For example, if the model 'm' includes latent event time variables are called 'T1' and 'T2' and 'C' is the end of follow-up (right censored), then one can specify

eventTime(object, formula, eventName = "status", ...)

Arguments

object

Model object

formula

Formula (see details)

eventName

Event names

...

Additional arguments to lower levels functions

Details

eventTime(object=m,formula=ObsTime~min(T1=a,T2=b,C=0,"ObsEvent"))

when data are simulated from the model one gets 2 new columns:

- "ObsTime": the smallest of T1, T2 and C - "ObsEvent": 'a' if T1 is smallest, 'b' if T2 is smallest and '0' if C is smallest

Note that "ObsEvent" and "ObsTime" are names specified by the user.

Author

Thomas A. Gerds, Klaus K. Holst

Examples

# Right censored survival data without covariates m0 <- lvm() distribution(m0,"eventtime") <- coxWeibull.lvm(scale=1/100,shape=2) distribution(m0,"censtime") <- coxExponential.lvm(rate=10) m0 <- eventTime(m0,time~min(eventtime=1,censtime=0),"status") sim(m0,10)
#> eventtime censtime time status #> 1 7.815469 0.02331809 0.02331809 0 #> 2 17.591054 44.18145768 17.59105429 1 #> 3 5.754867 28.57459643 5.75486693 1 #> 4 5.992997 4.39404546 4.39404546 0 #> 5 8.774178 5.87137075 5.87137075 0 #> 6 9.617718 6.74517464 6.74517464 0 #> 7 11.324639 1.85475025 1.85475025 0 #> 8 7.287763 3.66689470 3.66689470 0 #> 9 16.270005 0.37871490 0.37871490 0 #> 10 10.761131 0.86341548 0.86341548 0
# Alternative specification of the right censored survival outcome ## eventTime(m,"Status") <- ~min(eventtime=1,censtime=0) # Cox regression: # lava implements two different parametrizations of the same # Weibull regression model. The first specifies # the effects of covariates as proportional hazard ratios # and works as follows: m <- lvm() distribution(m,"eventtime") <- coxWeibull.lvm(scale=1/100,shape=2) distribution(m,"censtime") <- coxWeibull.lvm(scale=1/100,shape=2) m <- eventTime(m,time~min(eventtime=1,censtime=0),"status") distribution(m,"sex") <- binomial.lvm(p=0.4) distribution(m,"sbp") <- normal.lvm(mean=120,sd=20) regression(m,from="sex",to="eventtime") <- 0.4 regression(m,from="sbp",to="eventtime") <- -0.01 sim(m,6)
#> eventtime censtime time status sex sbp #> 1 37.577288 12.765574 12.765574 0 0 121.61477 #> 2 16.421736 5.954529 5.954529 0 1 140.55812 #> 3 13.326190 3.806308 3.806308 0 1 155.36751 #> 4 6.943647 6.793752 6.793752 0 1 145.86764 #> 5 12.986468 8.804785 8.804785 0 1 74.48927 #> 6 10.541387 9.934873 9.934873 0 0 83.13964
# The parameters can be recovered using a Cox regression # routine or a Weibull regression model. E.g., if (FALSE) { set.seed(18) d <- sim(m,1000) library(survival) coxph(Surv(time,status)~sex+sbp,data=d) sr <- survreg(Surv(time,status)~sex+sbp,data=d) library(SurvRegCensCov) ConvertWeibull(sr) } # The second parametrization is an accelerated failure time # regression model and uses the function weibull.lvm instead # of coxWeibull.lvm to specify the event time distributions. # Here is an example: ma <- lvm() distribution(ma,"eventtime") <- weibull.lvm(scale=3,shape=0.7) distribution(ma,"censtime") <- weibull.lvm(scale=2,shape=0.7) ma <- eventTime(ma,time~min(eventtime=1,censtime=0),"status") distribution(ma,"sex") <- binomial.lvm(p=0.4) distribution(ma,"sbp") <- normal.lvm(mean=120,sd=20) regression(ma,from="sex",to="eventtime") <- 0.7 regression(ma,from="sbp",to="eventtime") <- -0.008 set.seed(17) sim(ma,6)
#> eventtime censtime time status sex sbp #> 1 0.5531481 1.1285503 0.5531481 1 1 99.69983 #> 2 4.2973225 1.4665922 1.4665922 0 1 118.40727 #> 3 1.5884110 0.4704796 0.4704796 0 1 115.34026 #> 4 1.7404946 1.2284359 1.2284359 0 1 103.65464 #> 5 0.2765550 0.8633771 0.2765550 1 1 135.44182 #> 6 1.5803203 0.6912997 0.6912997 0 0 116.68776
# The regression coefficients of the AFT model # can be tranformed into log(hazard ratios): # coef.coxWeibull = - coef.weibull / shape.weibull if (FALSE) { set.seed(17) da <- sim(ma,1000) library(survival) fa <- coxph(Surv(time,status)~sex+sbp,data=da) coef(fa) c(0.7,-0.008)/0.7 } # The Weibull parameters are related as follows: # shape.coxWeibull = 1/shape.weibull # scale.coxWeibull = exp(-scale.weibull/shape.weibull) # scale.AFT = log(scale.coxWeibull) / shape.coxWeibull # Thus, the following are equivalent parametrizations # which produce exactly the same random numbers: model.aft <- lvm() distribution(model.aft,"eventtime") <- weibull.lvm(scale=-log(1/100)/2,shape=0.5) distribution(model.aft,"censtime") <- weibull.lvm(scale=-log(1/100)/2,shape=0.5) set.seed(17) sim(model.aft,6)
#> eventtime censtime #> 1 2.890253 3.1436842 #> 2 2.981019 0.4127472 #> 3 1.147834 2.0056626 #> 4 2.948915 1.1571425 #> 5 2.103028 2.1804985 #> 6 5.680430 1.8107400
model.cox <- lvm() distribution(model.cox,"eventtime") <- coxWeibull.lvm(scale=1/100,shape=2) distribution(model.cox,"censtime") <- coxWeibull.lvm(scale=1/100,shape=2) set.seed(17) sim(model.cox,6)
#> eventtime censtime #> 1 12.552208 13.652847 #> 2 12.946401 1.792538 #> 3 4.984980 8.710482 #> 4 12.806975 5.025406 #> 5 9.133336 9.469785 #> 6 24.669793 7.863944
# The minimum of multiple latent times one of them still # being a censoring time, yield # right censored competing risks data mc <- lvm() distribution(mc,~X2) <- binomial.lvm() regression(mc) <- T1~f(X1,-.5)+f(X2,0.3) regression(mc) <- T2~f(X2,0.6) distribution(mc,~T1) <- coxWeibull.lvm(scale=1/100) distribution(mc,~T2) <- coxWeibull.lvm(scale=1/100) distribution(mc,~C) <- coxWeibull.lvm(scale=1/100) mc <- eventTime(mc,time~min(T1=1,T2=2,C=0),"event") sim(mc,6)
#> X2 T1 X1 T2 C time event #> 1 0 7.087078 0.9728744 11.814841 3.204723 3.204723 0 #> 2 0 9.105653 1.7165340 7.716248 15.423587 7.716248 2 #> 3 1 5.069985 0.2552370 8.918131 7.444486 5.069985 1 #> 4 0 5.150130 0.3665811 11.629342 7.433594 5.150130 1 #> 5 1 6.171934 1.1807892 1.627404 2.395786 1.627404 2 #> 6 0 7.931261 0.6431921 3.930187 12.323722 3.930187 2