Add an observed event time outcome to a latent variable model.
Add an observed event time outcome to a latent variable model.
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
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.
Examples
# Right censored survival data without covariatesm0 <- lvm()distribution(m0,"eventtime")<- coxWeibull.lvm(scale=1/100,shape=2)distribution(m0,"censtime")<- coxExponential.lvm(rate=1/10)m0 <- eventTime(m0,time~min(eventtime=1,censtime=0),"status")sim(m0,10)# 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.4regression(m,from="sbp",to="eventtime")<--0.01sim(m,6)# The parameters can be recovered using a Cox regression# routine or a Weibull regression model. E.g.,## Not run: 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)## End(Not run)# 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=1/0.7)distribution(ma,"censtime")<- weibull.lvm(scale=2,shape=1/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.7regression(ma,from="sbp",to="eventtime")<--0.008set.seed(17)sim(ma,6)# The regression coefficients of the AFT model# can be tranformed into log(hazard ratios):# coef.coxWeibull = - coef.weibull / shape.weibull## Not run: 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## End(Not run)# The following are equivalent parametrizations# which produce exactly the same random numbers:model.aft <- lvm()distribution(model.aft,"eventtime")<- weibull.lvm(intercept=-log(1/100)/2,sigma=1/2)distribution(model.aft,"censtime")<- weibull.lvm(intercept=-log(1/100)/2,sigma=1/2)sim(model.aft,6,seed=17)model.aft <- lvm()distribution(model.aft,"eventtime")<- weibull.lvm(scale=100^(1/2), shape=2)distribution(model.aft,"censtime")<- weibull.lvm(scale=100^(1/2), shape=2)sim(model.aft,6,seed=17)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)sim(model.cox,6,seed=17)# The minimum of multiple latent times one of them still# being a censoring time, yield# right censored competing risks datamc <- 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)