Note: This initial blog post is discontinued. If you want to have the latest development of the function have a look at the static page PlotHR
Usually a Cox-regression is achieved in R by
library(survival)
model <- coxph ( SuvivalObject ~ Covariate1 + Covariate2 + Factor1 + Factor2 , data = Dataset )
The covariates can be enclosed in other funtions:
- factors should be enclosed by factor()
- strata, which allow to adjust for a factor without getting an estimate, should be enclosed by strata()
- non-log linear continuous terms can be enclosed by
pspline()
In the latter case the model might look like
model <- coxph (SurvivalObject ~ pspline(Covariate1) + Covariate2 + factor(Factor1) + strata(Factor2) , data = Dataset )
The functional form of the covariates (including the factors) can now be plotted with
termplot(model)
Though the termplot() function fails with plotting just one covariate and leaves no cusomization.
The function plotHR() plots the functional form of the desired term: plotHR(model)
plots the first term in the model by default but other terms can be accessed by calling their number (e.g. the second one):
plotHR(model , terms = 2)
In order to use the function you have to “source” it into R. It is the same procedure as calling a package, but using “source” instead of “library”.
Paste the function syntax into a textfile and safe it (as plot.HR.R) on your harddisk, remember the path and include
source("C:Path/to/plotHR_0.6.R")
before using the function.
Download plotHR()
Note: I have rewritten the function several times since I wrote the initial post … using version numbers now …
-
V0.6 – removed the y.log option, since the scale should be logaritmic anyway. Later I will also rewrite the x.log option, since the feature is already incorporated in the plot.default() function. I also removed the dottet line at HR=1 level, since some complained about it overstating the importance of the log(HR) intercept. I included it, since it gives a hint about the significance of the smooth term, in case the confidence intervalls cross over the line… Those who miss it can add manually
lines( h = 0 , type = 2 )
I rewrote the “rugs” option. Try
rugs = "density"
It is still “beta”ish, but some like it. - V0.5 – bug fix for the y-scale and slight adjustment of the default plotting colors (paler CI shade and stronger term-line)
- V0.4 – the y-scale should be logarithmic; a HR of 0.5 (50% reduced Hazard) should show the same distance from HR = 1 as a doubled Hazard (HR = 2); this is now default. The linear scale I used initially is biased in this concern (Hat-tip: Arve Ulvik, Eva Pedersen and Roy Nilsen). The option y.log allows both ways (linear and log-scale); the axis labels denote Hazard Ratio instead of log(HR).
Usage:
plotHR( model , terms = 1 , se = TRUE , rug = "ticks" , x.log = FALSE , xlab = "" , ylab = "Hazard Ratio" , main = NULL , xlim = NULL , ylim = NULL, col.term = "#08519C", lwd.term = 3, col.se = "#DEEBF7", cex = 1 , bty = "n" , axes = TRUE )
- model – a coxph model
- terms – integer; the number of the term to plot
- se – logical TRUE/FALSE; plotting the CI
- rug – “ticks” or “density”; rug plot or density plot at x-axis. Any other value for “rug” will omit the rugplot.
- x.log – logical TRUE/FALSE; log-transformed exposure variable
- xlab – character; x-axis label
- ylab – character; y-axis label
- main – character; main plot title
- xlim – 2×1 column vector; x-range of plot
- ylim – 2×1 column vector; y-range of plot
- col.term – color of HR-curve
- lwd.term – line width of HR-curve
- col.se – color of CI (if plotted)
- cex – numeric; size factor of labels
- bty – specifies the boxtype around the plot. See
?plot.default