Title: | Construct Nomograms for Competing Risks Regression Models |
---|---|
Description: | Nomograms are constructed to predict the cumulative incidence rate which is calculated after adjusting for competing causes to the event of interest. K-fold cross-validation is implemented to validate predictive accuracy using a competing-risk version of the concordance index. Methods are as described in: Kattan MW, Heller G, Brennan MF (2003). |
Authors: | Michael Kattan [aut], Changhong Yu [aut], Xinge Ji [aut], Zajichek Alex [cre] |
Maintainer: | Zajichek Alex <[email protected]> |
License: | GPL (>= 3) |
Version: | 3.0.1.9000 |
Built: | 2025-02-12 04:41:55 UTC |
Source: | https://github.com/clevelandclinicqhs/qhscrnomo |
Uses the anova.rms
method to construct an analysis of variance table for the competing risks regression model fit from crr.fit
.
## S3 method for class 'cmprsk' anova(object,...)
## S3 method for class 'cmprsk' anova(object,...)
object |
A model fit by |
... |
Not used |
An anova.rms
matrix
This function requires that the rms
package is attached
Changhong Yu. Department of Quantitative Health Sciences, Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) anova(prostate.crr)
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) anova(prostate.crr)
Computes the concordance index for a predictor as a discrimination metric for binary, time-to-event, and competing risks outcomes.
cindex( prob, fstatus, ftime, type = "crr", failcode = 1, cencode = 0, tol = 1e-20 )
cindex( prob, fstatus, ftime, type = "crr", failcode = 1, cencode = 0, tol = 1e-20 )
prob |
A risk score (typically a probability giving the risk of event failure) |
fstatus |
The event status |
ftime |
The event times. Applies when the |
type |
The outcome type: |
failcode |
The value of |
cencode |
The censoring event code. Defaults to |
tol |
Error tolerance (not used) |
A named vector with following elements:
N |
Total number of observations in the input data |
n |
Number of observations used for calculation |
usable |
Total number of usable pairs |
concordant |
Number of concordant pairs |
cindex |
The concordance index: number of concordant pairs divided by the total number of usable pairs |
Changhong Yu, Michael Kattan, Brian Wells, Amy Nowacki.
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) # Cross-validated predictions prostate.dat$preds.cv.prostate.crr.120 <- tenf.crr(prostate.crr, time = 120, fold = 2) ## calculate the competing-risks version of concordance index with(prostate.dat, cindex(preds.cv.prostate.crr.120, ftime = TIME_EVENT, fstatus =EVENT_DOD, type = "crr"))["cindex"]
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) # Cross-validated predictions prostate.dat$preds.cv.prostate.crr.120 <- tenf.crr(prostate.crr, time = 120, fold = 2) ## calculate the competing-risks version of concordance index with(prostate.dat, cindex(preds.cv.prostate.crr.120, ftime = TIME_EVENT, fstatus =EVENT_DOD, type = "crr"))["cindex"]
Fits a competing risks regression model using the crr
function from an existing cph
object which can then be used to construct a nomogram.
crr.fit(fit, cencode = 0, failcode = 1)
crr.fit(fit, cencode = 0, failcode = 1)
fit |
A Cox proportional hazards regression model constructed from |
cencode |
The value of the status column that indicates a censored observation |
failcode |
The value of the status column that indicates the event of interest |
Returns a list of class cmprsk
, with components:
coef |
the estimated regression coefficients |
loglik |
log pseudo-liklihood evaluated at coef |
lscore |
derivitives of the log pseudo-likelihood evaluated at coef |
inf |
-second derivatives of the log pseudo-likelihood |
var |
estimated variance covariance matrix of coef |
res |
matrix of residuals giving the contribution to each score (columns) at each unique failure time (rows) |
uftime |
vector of unique failure times |
bfitj |
jumps in the Breslow-type estimate of the underlying sub-distribution cumulative hazard (used by predict.crr()) |
tfs |
the tfs matrix (output of tf(), if used) |
converged |
TRUE if the iterative algorithm converged. |
cencode |
the value of the status indicator that indicates a censored observation |
failcode |
the value of the status indicator that indicates an event of interest |
cph.f |
regular survival model fitted by cph which is saved for
function |
cphdat |
data used for cph model, where all
predictors are represented in numeric format, which is used by function
|
This function requires that the rms
package is attached
Michael W. Kattan, Ph.D. and Changhong Yu. Department of Quantitative Health Sciences, Cleveland Clinic
Michael W. Kattan, Glenn Heller and Murray F. Brennan (2003). A
competing-risks nomogram for sarcoma-specific death following local
recurrence. Statistics in Medicine. Stat Med
. 2003;22:3515-3525.
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) prostate.crr
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) prostate.crr
Uses cuminc
to estimate the cumulative incidence at a given time point within subgroups of a continuous variable (often predicted failure probabilities from a crr.fit
model).
groupci( x, ftime, fstatus, u, cencode = 0, failcode = 1, ci = TRUE, m = 50, g = NULL, cuts = NULL, pl = TRUE, conf.int = 0.95, xlab = NULL, ylab = NULL, xlim = c(0, 1), ylim = c(0, 1), lty = 1, add = FALSE, cex.subtitle = FALSE, ab = TRUE, a = 0, b = 1, ... )
groupci( x, ftime, fstatus, u, cencode = 0, failcode = 1, ci = TRUE, m = 50, g = NULL, cuts = NULL, pl = TRUE, conf.int = 0.95, xlab = NULL, ylab = NULL, xlim = c(0, 1), ylim = c(0, 1), lty = 1, add = FALSE, cex.subtitle = FALSE, ab = TRUE, a = 0, b = 1, ... )
x |
A numeric variable to assess calibration for |
ftime |
The event time variable. See |
fstatus |
The event status variable. See |
u |
A single time point to assess calibration at |
cencode |
The censoring event code. See |
failcode |
The value of |
ci |
Should the failure probability be assessed? Defaults to |
m |
Minimum number of observations in each group. See |
g |
Number of quantile groups. See |
cuts |
Actual cut points to use for |
pl |
Should the calibration curve be plotted? Defaults to |
conf.int |
Confidence limit on error bars. Defaults to 0.95. Set to |
xlab |
The x-axis label. Uses |
ylab |
The y-axis label. Uses a default label is none specified. |
xlim |
The x-axis limits. Defaults to c(0, 1). |
ylim |
The y-axis limits. Defaults to c(0, 1). |
lty |
Line type for connecting estimates and error bars |
add |
Defaults to |
cex.subtitle |
Character size for subtitle (default 0.7). Defaults to |
ab |
Should a reference line be added? See |
a |
The intercept for the reference line. See |
b |
The slope for the reference line. See |
... |
To divide x
, the function first looks for cuts
, then g
, then m
.
A matrix with a row for each group of x
:
x |
Mean value of |
n |
Number of observations |
events |
Number of events (of type |
ci |
Estimated cumulative incidence (or event-free probability if |
std.err |
Estimated standard error for the |
If pl=TRUE
, a calibration plot is also displayed.
Changhong Yu, Michael Kattan, Ph.D
Department of Quantitative Health Sciences
Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) # Cross-validated predictions prostate.dat$preds.cv.prostate.crr.120 <- tenf.crr(prostate.crr, time = 120, fold = 2) with(prostate.dat, groupci(preds.cv.prostate.crr.120, ftime = TIME_EVENT, fstatus =EVENT_DOD, g = 5, u = 120, xlab = "Nomogram predicted 10-year cancerspecific mortality", ylab = "Observed predicted 10-year cancerspecific mortality") )
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) # Cross-validated predictions prostate.dat$preds.cv.prostate.crr.120 <- tenf.crr(prostate.crr, time = 120, fold = 2) with(prostate.dat, groupci(preds.cv.prostate.crr.120, ftime = TIME_EVENT, fstatus =EVENT_DOD, g = 5, u = 120, xlab = "Nomogram predicted 10-year cancerspecific mortality", ylab = "Observed predicted 10-year cancerspecific mortality") )
Uses the Newlabels
function to change the labels predictors when constructing a nomogram.
## S3 method for class 'cmprsk' Newlabels(fit, labels, ...)
## S3 method for class 'cmprsk' Newlabels(fit, labels, ...)
fit |
A model fit by |
labels |
A character vector specifying the new labels for variables in a fit. |
... |
Other arguments for |
To give new labels for all variables, you can specify labels of the
form labels = c("Age in Years","Cholesterol")
, where the list of new labels
is assumed to be the length of all main effect-type variables in the fit
and in their original order in the model formula. You may specify a named
vector to give new labels in any order for a subset of the variables,
e.g., labels = c(age = "Age in Years", chol = "Cholesterol")
.
A new crr.fit
object with adjusted labels
Changhong Yu. Department of Quantitative Health Sciences, Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) prostate.g <- Newlabels( prostate.crr, c( TX = 'Treatment options', BX_GLSN_CAT = 'Biopsy Gleason Score Sum', CLIN_STG = 'Clinical stage' ) )
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) prostate.g <- Newlabels( prostate.crr, c( TX = 'Treatment options', BX_GLSN_CAT = 'Biopsy Gleason Score Sum', CLIN_STG = 'Clinical stage' ) )
Uses the Newlevels
function to change the labels predictors when constructing a nomogram.
## S3 method for class 'cmprsk' Newlevels(fit, levels, ...)
## S3 method for class 'cmprsk' Newlevels(fit, levels, ...)
fit |
A model fit by |
levels |
A list of named vectors specifying the new level labels for categorical predictors. |
... |
Other arguments for |
A new crr.fit
object with adjusted labels on the factor levels
This will override parms
and datadist
information that were stored with the fit.
Changhong Yu. Department of Quantitative Health Sciences, Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) prostate.g <- Newlevels(prostate.crr, list(TX = c('Treatment 1', 'Treatment 2', 'Treatment 3')))
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) prostate.g <- Newlevels(prostate.crr, list(TX = c('Treatment 1', 'Treatment 2', 'Treatment 3')))
Draws a partial nomogram from a crr.fit
object that can be used to manually obtain predicted values from from a competing risks regression model.
nomogram.crr( fit, failtime, ci = TRUE, ..., adj.to, lp = TRUE, lp.at, lplabel = "Linear Predictor", fun.at, fun.lp.at, funlabel = "Predicted Value", fun.side, interact = NULL, intercept = 1, conf.int = FALSE, col.conf = c(1, 12), conf.space = c(0.08, 0.2), conf.lp = c("representative", "all", "none"), est.all = TRUE, abbrev = FALSE, minlength = 4, maxscale = 100, nint = 10, label.every = 1, force.label = FALSE, xfrac = 0.35, cex.axis = 0.85, cex.var = 1, col.grid = FALSE, vnames = c("labels", "names"), varname.label = TRUE, varname.label.sep = "=", ia.space = 0.7, tck = -0.009, lmgp = 0.4, omit = NULL, naxes, points.label = "Points", total.points.label = "Total Points", total.sep.page = FALSE, total.fun, verbose = FALSE, total.min, total.max, mikeomit = NULL )
nomogram.crr( fit, failtime, ci = TRUE, ..., adj.to, lp = TRUE, lp.at, lplabel = "Linear Predictor", fun.at, fun.lp.at, funlabel = "Predicted Value", fun.side, interact = NULL, intercept = 1, conf.int = FALSE, col.conf = c(1, 12), conf.space = c(0.08, 0.2), conf.lp = c("representative", "all", "none"), est.all = TRUE, abbrev = FALSE, minlength = 4, maxscale = 100, nint = 10, label.every = 1, force.label = FALSE, xfrac = 0.35, cex.axis = 0.85, cex.var = 1, col.grid = FALSE, vnames = c("labels", "names"), varname.label = TRUE, varname.label.sep = "=", ia.space = 0.7, tck = -0.009, lmgp = 0.4, omit = NULL, naxes, points.label = "Points", total.points.label = "Total Points", total.sep.page = FALSE, total.fun, verbose = FALSE, total.min, total.max, mikeomit = NULL )
fit |
A model fit by |
failtime |
A vector of time points to display failure probability axes for. |
ci |
Should the failure probability be displayed? Defaults to |
... |
Settings of variables to use in constructing axes.
If |
adj.to |
If |
lp |
Set to |
lp.at |
If |
lplabel |
label for linear predictor axis. Default is |
fun.at |
Function values to label on axis. Default |
fun.lp.at |
If you want to evaluate one of the functions at a
different set of linear predictor values than may have been used in
constructing the linear predictor axis, specify a vector or list of
vectors of linear predictor values at which to evaluate the function.
This is especially useful for discrete functions. The presence of this
attribute also does away with the need for |
funlabel |
Label for |
fun.side |
A vector or list of vectors of |
interact |
When a continuous variable interacts with a discrete one,
axes are constructed so that the continuous variable moves within the
axis, and separate axes represent levels of interacting factors. For
interactions between two continuous variables, all but the axis variable
must have discrete levels defined in |
intercept |
For models such as the ordinal logistic model with multiple intercepts, specifies which one to use in evaluating the linear predictor. |
conf.int |
Confidence levels to display for each scoring. Default is
|
col.conf |
Colors corresponding to |
conf.space |
A 2-element vector with the vertical range within which to draw confidence bars, in units of 1=spacing between main bars. Four heights are used within this range (8 for the linear predictor if more than 16 unique values were evaluated), cycling them among separate confidence intervals to reduce overlapping. |
conf.lp |
Default is |
est.all |
To plot axes for only the subset of variables named in
|
abbrev |
Set to |
minlength |
Applies if |
maxscale |
Default maximum point score is 100. |
nint |
Number of intervals to label for axes representing continuous variables. See |
label.every |
Specify |
force.label |
Set to |
xfrac |
Fraction of horizontal plot to set aside for axis titles |
cex.axis |
Character size for tick mark labels |
cex.var |
Character size for axis titles (variable names) |
col.grid |
If |
vnames |
By default, variable labels are used to label axes. Set
|
varname.label |
In constructing axis titles for interactions, the
default is to add |
varname.label.sep |
If |
ia.space |
When multiple axes are draw for levels of interacting factors, the default is to group combinations related to a main effect. This is done by spacing the axes for the second to last of these within a group only 0.7 (by default) of the way down as compared with normal space of 1 unit. |
tck |
See |
lmgp |
Spacing between numeric axis labels and axis (see |
omit |
Vector of character strings containing names of variables for which to suppress drawing axes. Default is to show all variables. |
naxes |
Maximum number of axes to allow on one plot. If the nomogram requires more than one "page", the "Points" axis will be repeated at the top of each page when necessary. |
points.label |
A character string giving the axis label for the points scale |
total.points.label |
A character string giving the axis label for the total points scale |
total.sep.page |
Set to |
total.fun |
A user-provided function that will be executed before the
total points axis is drawn. Default is not to execute a function. This
is useful e.g. when |
verbose |
Set to |
total.min |
Setting the minimal value in the total point axis on the nomogram. |
total.max |
Setting the maximal value in the total point axis. |
mikeomit |
The predictor variables specified by their names here will not be shown in the nomogram. The predicted outcome based on this reduced nomogram would be the same as if users were using the full version of the nomogram by entering the some values for the predictors remaining in the reduced nomogram but adjusted values for the hiden predictors so that 0 points will be achieved from these hiden predictor variables in the full nomogram. |
A list of class "nomogram"
that contains information used in
plotting the axes. Please see nomogram
for details.
Changhong Yu, Michael Kattan, Ph.D
Department of Quantitative
Health Sciences
Cleveland Clinic
Frank Harrell
Department of Biostatistics
Vanderbilt University
[email protected]
Banks J: Nomograms. Encylopedia of Statistical Sciences, Vol 6. Editors: S Kotz and NL Johnson. New York: Wiley; 1985.
Lubsen J, Pool J, van der Does, E: A practical device for the application of a diagnostic or prognostic function. Meth. Inform. Med. 17:127–129; 1978.
Wikipedia: Nomogram, https://en.wikipedia.org/wiki/Nomogram.
Michael W. Kattan, Glenn Heller and Murray F. Brennan (2003). A
competing-risks nomogram
for sarcoma-specific death following local
recurrence. Statistics in Medicine. Stat Med
. 2003;22:3515-3525.
data(prostate.dat) dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y= TRUE, surv=TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f,cencode = 0,failcode = 1) ## make a CRR nomogram nomogram.crr(prostate.crr,failtime = 120,lp=FALSE, funlabel = "Predicted 10-year cumulative incidence")
data(prostate.dat) dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y= TRUE, surv=TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f,cencode = 0,failcode = 1) ## make a CRR nomogram nomogram.crr(prostate.crr,failtime = 120,lp=FALSE, funlabel = "Predicted 10-year cumulative incidence")
Draws a partial nomogram that can be used to manually obtain predicted values. This is a modified version of nomogram
.
nomogram.mk6( fit, ..., adj.to, lp = TRUE, lp.at, lplabel = "Linear Predictor", fun, fun.at, fun.lp.at, funlabel = "Predicted Value", fun.side, interact = NULL, intercept = 1, conf.int = FALSE, col.conf = c(1, 12), conf.space = c(0.08, 0.2), conf.lp = c("representative", "all", "none"), est.all = TRUE, abbrev = FALSE, minlength = 4, maxscale = 100, nint = 10, label.every = 1, force.label = FALSE, xfrac = 0.35, cex.axis = 0.85, cex.var = 1, col.grid = NULL, vnames = c("labels", "names"), varname.label = TRUE, varname.label.sep = "=", ia.space = 0.7, tck = NA, tcl = -0.25, lmgp = 0.4, omit = NULL, naxes, points.label = "Points", total.points.label = "Total Points", total.sep.page = FALSE, total.fun, verbose = FALSE, cap.labels = FALSE, total.min, total.max, survtime, mikeomit = NULL )
nomogram.mk6( fit, ..., adj.to, lp = TRUE, lp.at, lplabel = "Linear Predictor", fun, fun.at, fun.lp.at, funlabel = "Predicted Value", fun.side, interact = NULL, intercept = 1, conf.int = FALSE, col.conf = c(1, 12), conf.space = c(0.08, 0.2), conf.lp = c("representative", "all", "none"), est.all = TRUE, abbrev = FALSE, minlength = 4, maxscale = 100, nint = 10, label.every = 1, force.label = FALSE, xfrac = 0.35, cex.axis = 0.85, cex.var = 1, col.grid = NULL, vnames = c("labels", "names"), varname.label = TRUE, varname.label.sep = "=", ia.space = 0.7, tck = NA, tcl = -0.25, lmgp = 0.4, omit = NULL, naxes, points.label = "Points", total.points.label = "Total Points", total.sep.page = FALSE, total.fun, verbose = FALSE, cap.labels = FALSE, total.min, total.max, survtime, mikeomit = NULL )
fit |
A regression model that was created with |
... |
Settings of variables to use in constructing axes.
If |
adj.to |
If you didn't define |
lp |
Set to |
lp.at |
If |
lplabel |
label for linear predictor axis.
Default is |
fun |
on another axis. If more than one transformation is plotted,
put them in a list, e.g. |
fun.at |
function values to label on axis. Default |
fun.lp.at |
If you want to
evaluate one of the functions at a different set of linear predictor
values than may have been used in constructing the linear predictor axis,
specify a vector or list of vectors
of linear predictor values at which to evaluate the function. This is
especially useful for discrete functions. The presence of this attribute
also does away with the need for |
funlabel |
label for |
fun.side |
a vector or list of vectors of |
interact |
When a continuous variable interacts with a discrete one,
axes are constructed so that the continuous variable moves within the axis,
and separate axes represent levels of interacting factors. For
interactions between two continuous variables, all but the axis variable
must have discrete levels defined in |
intercept |
for models such as the ordinal logistic model with multiple intercepts, specifies which one to use in evaluating the linear predictor. |
conf.int |
confidence levels to display for each scoring.
Default is |
col.conf |
colors corresponding to |
conf.space |
a 2-element vector with the vertical range within which to draw confidence bars, in units of 1=spacing between main bars. Four heights are used within this range (8 for the linear predictor if more than 16 unique values were evaluated), cycling them among separate confidence intervals to reduce overlapping |
conf.lp |
default is |
est.all |
To plot axes for only the subset of variables named in
|
abbrev |
Set to |
minlength |
|
maxscale |
default maximum point score is 100 |
nint |
number of intervals to label for axes representing continuous
variables.
See |
label.every |
Specify |
force.label |
set to |
xfrac |
fraction of horizontal plot to set aside for axis titles |
cex.axis |
character size for tick mark labels |
cex.var |
character size for axis titles (variable names) |
col.grid |
If left unspecified, no vertical reference lines are drawn.
Specify a vector of length one (to use the same color for both minor and
major reference lines) or two (corresponding to the color for the major and
minor divisions, respectively) containing colors, to cause vertical
reference lines to the top points scale to be drawn. For R, a good choice
is |
vnames |
By default, variable labels are used to label axes. Set
|
varname.label |
In constructing axis titles for interactions, the
default is to add |
varname.label.sep |
If |
ia.space |
When multiple axes are draw for levels of interacting factors, the default is to group combinations related to a main effect. This is done by spacing the axes for the second to last of these within a group only 0.7 (by default) of the way down as compared with normal space of 1 unit. |
tck |
see |
tcl |
length of tick marks in nomogram |
lmgp |
spacing between numeric axis labels and axis
(see |
omit |
vector of character strings containing names of variables for which to suppress drawing axes. Default is to show all variables. |
naxes |
maximum number of axes to allow on one plot. If the nomogram requires more than one “page”, the “Points” axis will be repeated at the top of each page when necessary. |
points.label |
a character string giving the axis label for the points scale |
total.points.label |
a character string giving the axis label for the total points scale |
total.sep.page |
set to |
total.fun |
a user-provided function that will be executed before the
total points axis is drawn. Default is not toe xecute a function.
This is useful e.g. when |
verbose |
set to |
cap.labels |
logical: should the factor labels have their first letter capitalized? |
total.min |
the minimum point for the total point axis |
total.max |
the maxmum point for the total point axis |
survtime |
specified survival time for the predicted survival probability |
mikeomit |
a modified version of |
A nomogram
Used internally for nomogram.crr
. See nomogram
.
Banks J: Nomograms. Encylopedia of Statistical Sciences, Vol 6. Editors: S Kotz and NL Johnson. New York: Wiley; 1985.
Lubsen J, Pool J, van der Does, E: A practical device for the application of a diagnostic or prognostic function. Meth. Inform. Med. 17:127–129; 1978.
Wikipedia: Nomogram, https://en.wikipedia.org/wiki/Nomogram.
nomogram.crr
rms
nomogram
plot.summary.rms
axis
pretty
approx
data(prostate.dat) dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y= TRUE, surv=TRUE,time.inc = 144) ## make a cph nomogram nomogram.mk6(prostate.f, survtime=120, lp=FALSE, funlabel = "Predicted 10-year cumulative incidence")
data(prostate.dat) dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y= TRUE, surv=TRUE,time.inc = 144) ## make a cph nomogram nomogram.mk6(prostate.f, survtime=120, lp=FALSE, funlabel = "Predicted 10-year cumulative incidence")
Extracts the cumulative incidence estimates from a cuminc
object for the cause of interest at a specified time point into a data.frame
.
pred.ci(cum, tm1, failcode = 1)
pred.ci(cum, tm1, failcode = 1)
cum |
A |
tm1 |
A single time point to return the cumulative incidence at |
failcode |
The value of the status column that indicates the event of interest |
A data.frame
with 3 columns:
Group |
The group name. If the |
CI.Prob |
The cumulative incidence probability at the desired time point |
CI.Var |
The estimated variance of the cumulative incidence estimate |
Michael W. Kattan, Ph.D. and Changhong Yu.
Department of Quantitative Health Sciences, Cleveland Clinic
cum <- cmprsk::cuminc(prostate.dat$TIME_EVENT, prostate.dat$EVENT_DOD, cencode = 0) pred.ci(cum, 60, failcode = 1)
cum <- cmprsk::cuminc(prostate.dat$TIME_EVENT, prostate.dat$EVENT_DOD, cencode = 0) pred.ci(cum, 60, failcode = 1)
Computes the predicted probability of the event of interest at a specified time point for a competing risks regression model fit by crr.fit
. This function is adapted from predict.crr
.
## S3 method for class 'cmprsk' predict(object, newdata = NULL, time, lps, ...)
## S3 method for class 'cmprsk' predict(object, newdata = NULL, time, lps, ...)
object |
A model fit by |
newdata |
A |
time |
A single time point to calculate the failure probability |
lps |
Should the linear predictor be returned instead of the failure probability? Defaults to |
... |
Additional arguments such as |
A vector of failure probabilities at the specified time point (or linear predictors if lps=TRUE
) with length equal to the number of rows in newdata
Michael W. Kattan, Ph.D. and Changhong Yu.
Department of
Quantitative Health Sciences, Cleveland Clinic
Fine JP and Gray RJ (1999)
A proportional hazards model
for the subdistribution of a competing risk. JASA
94:496-509.
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) predict(prostate.crr, time = 60)
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) predict(prostate.crr, time = 60)
This is an artificial prostate cancer dataset used for illustrating the usage of functions in QHScrnomo
prostate.dat
prostate.dat
prostate.dat
A data frame with 2000 observations on the following 9 variables:
patient ID
Treatment options of prostate cancera with levels EBRT
, PI
, RP
Pre-treatment PSA levels
Biopsy Gleason Score Sum. a factor with levels 1
for 2-6 2
for 7 and 3
for 8-10
Clinical stage with levels T1
, T2
, T3
Age at treatment date
patient ethnicity.a factor with levels 0
for other and 1
for African American
follow up time in months
followup status, 0 - censored, 1 - died of prostate cancer, 2 - died of other causes
This is a simulated dataset
Uses Function
to generate and print the linear predictor to the console or file which can be hard-coded into a function for evaluation on the scale of the original data. A time point can optionally be specified to retrieve the base sub-cumulative rate at that time point (i.e, the failure probability when all covariate values are 0).
sas.cmprsk(f, time = NA, baseonly = FALSE, file = "", append = FALSE)
sas.cmprsk(f, time = NA, baseonly = FALSE, file = "", append = FALSE)
f |
A model fit by |
time |
A single time point to calculate the failure probability |
baseonly |
Should we only display the failure probability at the specified |
file |
An optional connection or character string naming the file to print to. |
append |
Only used if the |
A printed equation using cat
(invisible NULL
)
Changhong Yu. Department of Quantitative Health Sciences, Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) sas.cmprsk(prostate.crr, time = 60)
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) sas.cmprsk(prostate.crr, time = 60)
Uses the summary.rms
method to construct a summary for the competing risks regression model fit from crr.fit
.
## S3 method for class 'cmprsk' summary(object, ...)
## S3 method for class 'cmprsk' summary(object, ...)
object |
A model fit by |
... |
Other arguments for |
A summary.rms
matrix
This function requires that the rms
package is attached
Changhong Yu. Department of Quantitative Health Sciences, Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) summary(prostate.crr)
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) summary(prostate.crr)
Computes "out-of-sample" predictions by K-fold cross-validation for each observation in the modeling data set from a crr.fit
object.
tenf.crr(fit, time = NULL, lps = FALSE, fold = 10, trace = TRUE)
tenf.crr(fit, time = NULL, lps = FALSE, fold = 10, trace = TRUE)
fit |
A model fit by |
time |
A single time point to calculate the failure probability |
lps |
Should the linear predictor be returned instead of the failure probability? Defaults to |
fold |
The number of folds. Defaults to |
trace |
Should the progress of cross-validation be printed to the console? Defaults to |
A vector of failure probabilities at the specified time point (or linear predictors if lps=TRUE
) with length equal to the number of rows in the original data set.
Changhong Yu, Michael Kattan, Ph.D
Department of Quantitative
Health Sciences
Cleveland Clinic
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) tenf.crr(prostate.crr, time = 120, fold = 2)
dd <- datadist(prostate.dat) options(datadist = "dd") prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) + BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) + RACE_AA, data = prostate.dat, x = TRUE, y = TRUE, surv = TRUE,time.inc = 144) prostate.crr <- crr.fit(prostate.f, cencode = 0, failcode = 1) tenf.crr(prostate.crr, time = 120, fold = 2)