[R] plot(cox.zph()): customize xlab & ylab
Dan Bebber
danbebber at yahoo.co.uk
Mon Jul 11 17:04:09 CEST 2005
Dear all,
I've modified the plot.cox.zph function to allow
customized xlab and ylab (see below). Someone might
like to confirm that it works.
Thanks for all the assistance.
Dan
___________________________________
plot.cox.zph <- function (x, resid = TRUE, se = TRUE,
df = 4, nsmo = 40, var,
xlab="Time",ylab = paste("Beta(t) for",
dimnames(yy)[[2]]),...)
{
xx <- x$x
yy <- x$y
d <- nrow(yy)
df <- max(df)
nvar <- ncol(yy)
pred.x <- seq(from = min(xx), to = max(xx), length
= nsmo)
temp <- c(pred.x, xx)
lmat <- ns(temp, df = df, intercept = TRUE)
pmat <- lmat[1:nsmo, ]
xmat <- 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)
}
if (missing(var))
var <- 1:nvar
else {
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")
}
if (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 = 17)[2 *
(1:8)])
temp <- signif(apr1$y, 2)
apr2 <- approx(xtime, xx, temp)
xaxisval <- apr2$y
xaxislab <- 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 + temp
ylow <- yhat - temp
yr <- range(yr, yup, ylow)
}
if (x$transform == "identity")
plot(range(xx), yr, type = "n", xlab =
xlab, ylab = ylab[i],
...)
else if (x$transform == "log")
plot(range(xx), yr, type = "n", xlab =
xlab, ylab = ylab[i],
log = "x", ...)
else {
plot(range(xx), yr, type = "n", xlab =
xlab, 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)
}
}
}
--- Thomas Lumley <tlumley at u.washington.edu> wrote:
> On Mon, 11 Jul 2005, Adaikalavan Ramasamy wrote:
>
> > I am not sure if there is an easy way around this.
> An ugly hack is to
> > make a copy the function "survival:::plot.cox.zph"
> and make your
> > modified function. But there are others in the
> list who might know
> > neater solutions.
>
> If you then send a patch to the package maintainer
> it stops being an ugly
> hack and turns into an example of collaborative
> open-source development :)
>
> -thomas
>
>
More information about the R-help
mailing list