Learn R Programming

rstpm2 (version 1.2.2)

pstpm2: Flexible semi-parametric survival model.

Description

This implements a penalised Royston-Parmar model using generalized additive models.

Usage

pstpm2(formula, data, smooth.formula = NULL,
       logH.args = NULL, 
       tvc = NULL, 
       control = list(parscale = 0.1, maxit = 300), init = NULL,
       coxph.strata = NULL, coxph.formula = NULL,
       weights = NULL, robust = FALSE, 
       bhazard = NULL, timeVar = "", time0Var = "",
       sp=NULL, use.gr = TRUE, use.rcpp = TRUE,
       criterion=c("GCV","BIC"), penalty = c("logH","h"),
       smoother.parameters = NULL,
       alpha=if (is.null(sp)) switch(criterion,GCV=1,BIC=1) else 1,
       sp.init=NULL, trace = 0,
       type=c("PH","PO","probit","AH"),
       reltol = list(search = 1.0e-6, final = 1.0e-8),
       contrasts = NULL, subset = NULL, ...)

Arguments

formula
a formula object, with the response on the left of a ~ operator, and the parametric terms on the right. The response must be a survival object as returned by the Surv function. [required]
data
a data.frame in which to interpret the variables named in the formula argument.
smooth.formula
a mgcv::gam formula for describing the baseline log-cumulative hazard function, time.varying effects and smoothed covariate effects (default=NULL). The default model is equal to ~s(log(time),k=-1) where time is the t
logH.args
a list describing the arguments for the s function for modelling the baseline log-cumulative hazard (default=NULL).
tvc
a list with the names of the time-varying coefficients (e.g. tvc=list(hormon), which is equivalent to smooth.formula=~...+s(log(time),by=hormon)).
control
control argument passed to optim.
init
init should either be FALSE, such that initial values will be determined using Cox regression, or a numeric vector of initial values.
coxph.strata
variable in the data argument for stratification of the coxph model fit for estimating initial values.
weights
an optional vector of 'prior weights' to be used in the fitting process. Should be NULL or a numeric vector.
robust
Boolean used to determine whether to use a robust variance estimator.
bhazard
variable for the baseline hazard for relative survival
timeVar
variable defining the time variable. By default, this is determined from the survival object, however this may be ambiguous if two variables define the time
sp
fix the value of the smoothing parameters.
use.rcpp
Boolean for whether to use Rcpp for the optimisation rather than R.
use.gr
in R, a Boolean to determine whether to use the gradient in the optimisation
criterion
in Rcpp, determine whether to use "GCV" or "BIC" for for the smoothing parameter selection.
penalty
use either the "logH" penalty, which is the default penalty from mgcv, or the "h" hazard penalty.
smoother.parameters
for the hazard penalty, a list with components which are lists with components var, transform and inverse.
alpha
an ad hoc tuning parameter for the smoothing parameter.
sp.init
initial values for the smoothing parameters.
trace
integer for trace reporting; 0 represents no additional reporting.
reltol
list with components for search and final relative tolerances.
contrasts
an optional list. See the contrasts.arg of model.matrix.default.
subset
an optional vector specifying a subset of observations to be used in the fitting process.
coxph.formula
additional formula used to improve the fitting of initial values [optional and rarely used].
time0Var
string variable to determine the entry variable; useful for when more than one data variable is used in the entry time.
type
type of link function.
...
additional arguments to be passed to the mle2 .

Value

  • A pstpm2-class object.

Details

The implementation extends the mle2 object from the bbmle package.

Examples

Run this code
data(brcancer)
## standard Kaplan-Meier curves by hormon
plot(survfit(Surv(rectime/365,censrec==1)~1,data=brcancer,subset=hormon==1),
  xlab="Recurrence free survival time (years)",
  ylab="Survival")
lines(survfit(Surv(rectime/365,censrec==1)~1,data=brcancer,subset=hormon==0),col=2,
  conf.int=TRUE)
legend("topright", legend=c("Hormonal therapy","No hormonal therapy"),lty=1,col=1:2,bty="n")

## now fit a penalised stpm2 model
fit <- pstpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer)
## no S4 generic lines() method: instead, use plot(..., add=TRUE)
plot(fit,newdata=data.frame(hormon=1),type="surv",add=TRUE,ci=FALSE,line.col="blue",lwd=2,
  rug=FALSE)
plot(fit,newdata=data.frame(hormon=0),type="surv",add=TRUE,ci=FALSE,line.col="green",lwd=2,
  rug=FALSE)

## plot showing proportional hazards
plot(fit,newdata=data.frame(hormon=1),type="hazard",line.col="blue",lwd=2,
  rug=FALSE,ylim=c(0,1e-3))
plot(fit,newdata=data.frame(hormon=0),type="hazard",add=TRUE,ci=FALSE,line.col="green",lwd=2,
  rug=FALSE)

## time-varying hazard ratios
fit.tvc <- pstpm2(Surv(rectime,censrec==1)~1,
  data=brcancer,
  smooth.formula=~s(log(rectime))+s(log(rectime),by=hormon))
plot(fit.tvc,newdata=data.frame(hormon=1),type="hazard",line.col="blue",lwd=2,
  rug=FALSE)
plot(fit.tvc,newdata=data.frame(hormon=0),type="hazard",line.col="red",lwd=2,
  add=TRUE)

## Smooth covariate effects
fit.smoothx <- pstpm2(Surv(rectime,censrec==1)~1,
  data=brcancer,
  smooth.formula=~s(log(rectime))+s(x1))
ages <- seq(21,80,length=301)
haz <- predict(fit.smoothx,newdata=data.frame(hormon=1,rectime=365,x1=ages),
               type="hazard",se.fit=TRUE)
matplot(ages,haz/haz[150,1],type="l",log="y",ylab="Hazard ratio")

## compare with df=5 from stpm2
fit.stpm2 <- stpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer,df=7)
plot(fit,newdata=data.frame(hormon=1),type="hazard",line.col="blue",lwd=2,
  rug=FALSE,ylim=c(0,1e-3))
plot(fit.stpm2,newdata=data.frame(hormon=1),type="hazard",line.col="orange",lwd=2,
  rug=FALSE,add=TRUE,ci=FALSE)

## time-varying coefficient
##summary(fit.tvc <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,
##                     tvc=list(hormon=3)))
##anova(fit,fit.tvc) # compare with and without tvc (unclear whether this is valid)

## some more plots
## plot(fit.tvc,newdata=data.frame(hormon=0),type="hr",var="hormon")
                                        # no lines method: use add=TRUE
## plot(fit.tvc,newdata=data.frame(hormon=1),type="hr",var="hormon",
##     add=TRUE,ci=FALSE,line.col=2)

## plot(fit.tvc,newdata=data.frame(hormon=0),type="sdiff",var="hormon")

## plot(fit.tvc,newdata=data.frame(hormon=0),type="hdiff",var="hormon")

## plot(fit.tvc,newdata=data.frame(hormon=0),type="hazard")
## plot(fit.tvc,newdata=data.frame(hormon=1),type="hazard",line.col=2,ci=FALSE,add=TRUE)

Run the code above in your browser using DataLab