Rev 4476 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
#SCCS @(#)plot.cox.zph.s 4.6 08/13/96plot.cox.zph <- function(x, resid=TRUE, se=TRUE, df=4, nsmo=40, var, ...) {##require(splines)xx <- x$xyy <- x$yd <- nrow(yy)df <- max(df) #error proofingnvar <- ncol(yy)pred.x <- seq(from=min(xx), to=max(xx), length.out=nsmo)temp <- c(pred.x, xx)lmat <- ns(temp, df=df, intercept=TRUE)pmat <- lmat[1:nsmo,] # for predictionxmat <- lmat[-(1:nsmo),]qmat <- qr(xmat)if (se) {bk <- backsolve(qmat$qr[1:df, 1:df], diag(df))xtx <- bk %*% t(bk)seval <- d*((pmat%*% xtx) *pmat) %*% rep(1, df)}ylab <- paste("Beta(t) for", dimnames(yy)[[2]])if (missing(var)) var <- 1:nvarelse {if (is.character(var)) var <- match(var, dimnames(yy)[[2]])if (any(is.na(var)) || max(var)>nvar || min(var) <1)stop("Invalid variable requested")}## Figure out a 'good' set of x-axis labels. Find 8 equally spaced# values on the 'transformed' axis. Then adjust until they correspond# to rounded 'true time' values. Avoid the edges of the x axis, or# approx() may give a missing valueif (x$transform == 'log') {xx <- exp(xx)pred.x <- exp(pred.x)}else if (x$transform != 'identity') {xtime <- as.numeric(dimnames(yy)[[1]])apr1 <- approx(xx, xtime, seq(min(xx), max(xx), length.out=17)[2*(1:8)])temp <- signif(apr1$y,2)apr2 <- approx(xtime, xx, temp)xaxisval <- apr2$yxaxislab <- rep("",8)for (i in 1:8) xaxislab[i] <- format(temp[i])}for (i in var) {y <- yy[,i]yhat <- pmat %*% qr.coef(qmat, y)if (resid) yr <-range(yhat, y)else yr <-range(yhat)if (se) {temp <- 2* sqrt(x$var[i,i]*seval)yup <- yhat + tempylow<- yhat - tempyr <- range(yr, yup, ylow)}if (x$transform=='identity')plot(range(xx), yr, type='n', xlab="Time", ylab=ylab[i], ...)else if (x$transform=='log')plot(range(xx), yr, type='n', xlab="Time", ylab=ylab[i], log='x',...)else {plot(range(xx), yr, type='n', xlab="Time", ylab=ylab[i],axes=FALSE,...)axis(1, xaxisval, xaxislab)axis(2)box()}if (resid) points(xx, y)lines(pred.x, yhat)if (se) {lines(pred.x, yup,lty=2)lines(pred.x, ylow, lty=2)}}}