R-Flexsurv与时间相关协变量

R-Flexsurv与时间相关协变量,r,survival-analysis,R,Survival Analysis,我了解到,根据Christopher Jackson(2016)[“flexsurv:R中的参数生存建模平台,统计软件杂志,70(1)],R flexsurv软件包也可用于建模时间相关协变量 然而,即使经过几次在线论坛的调整和搜索,我也无法弄清楚是怎么回事 在开始估计时间相关的协变量之前,我尝试创建一个只包含时间无关协变量的简单模型,以测试我是否正确指定了Surv对象 library(splitstackshape) library(flexsurv) ## create sample dat

我了解到,根据Christopher Jackson(2016)[“flexsurv:R中的参数生存建模平台,统计软件杂志,70(1)],R flexsurv软件包也可用于建模时间相关协变量

然而,即使经过几次在线论坛的调整和搜索,我也无法弄清楚是怎么回事

在开始估计时间相关的协变量之前,我尝试创建一个只包含时间无关协变量的简单模型,以测试我是否正确指定了Surv对象

library(splitstackshape)
library(flexsurv)

## create sample data
n=50
set.seed(2)
t <- rpois(n,15)+1
x <- rnorm(n,t,5)
df <- data.frame(t,x)
df$id <- 1:n
df$rep <- df$t-1
长期数据:

long.df <- expandRows(df, "rep")

rep.vec<-c()
for(i in 1:n){
  rep.vec <- c(rep.vec,1:(df[i,"t"]-1))
}

long.df$start <- rep.vec 
long.df$stop  <- rep.vec +1
long.df$censrec <- 0
long.df$censrec<-ifelse(long.df$stop==long.df$t,1,long.df$censrec)
现在我可以估计一个简单的考克斯模型,看看它是否有效:

coxph(Surv(t)~x,data=df)
这将产生:

    coef exp(coef) se(coef)     z     p
x -0.0588    0.9429   0.0260 -2.26 0.024
长格式:

coxph(Surv(start,stop,censrec)~x,data=long.df)
我得到:

     coef exp(coef) se(coef)     z     p
x -0.0588    0.9429   0.0260 -2.26 0.024
综上所述,我的长格式转换是正确的。现在,转到flexsurv框架:

flexsurvreg(Surv(time=t)~x,data=df, dist="weibull")
收益率:

Estimates: 
       data mean  est       L95%      U95%      se        exp(est)  L95%      U95%    
shape        NA    5.00086   4.05569   6.16631   0.53452        NA        NA        NA
scale        NA   13.17215  11.27876  15.38338   1.04293        NA        NA        NA
x      15.13380    0.01522   0.00567   0.02477   0.00487   1.01534   1.00569   1.02508
但是

flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull")
导致错误:

Error in flexsurvreg(Surv(start, stop, censrec) ~ x, data = long.df, dist = "weibull") : 
  Initial value for parameter 1 out of range
有人知道后一个Surv对象的正确语法吗?如果你使用正确的语法,你会得到相同的估计吗

多谢各位, 最好的, 大卫

===============

library(splitstackshape)
library(flexsurv)
x<-c(8.136527,  7.626712,  9.809122, 12.125973, 12.031536, 11.238394,  4.208863,  8.809854,  9.723636)
t<-c(2, 3, 13,  5,  7, 37 ,37,  9,  4)

df <- data.frame(t,x)

#transform into long format for time-dependent covariates
df$id <- 1:length(df$t)
df$rep <- df$t-1
long.df <- expandRows(df, "rep")

rep.vec<-c()
for(i in 1:length(df$t)){
    rep.vec <- c(rep.vec,1:(df[i,"t"]-1))
}

long.df$start <- rep.vec 
long.df$stop  <- rep.vec +1
long.df$censrec <- 0
long.df$censrec<-ifelse(long.df$stop==long.df$t,1,long.df$censrec)


coxph(Surv(t)~x,data=df)
coxph(Surv(start,stop,censrec)~x,data=long.df)

flexsurvreg(Surv(time=t)~x,data=df, dist="weibull")
flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull",inits=c(shape=.1, scale=1))
在收到42条反馈后编辑

===============

library(splitstackshape)
library(flexsurv)
x<-c(8.136527,  7.626712,  9.809122, 12.125973, 12.031536, 11.238394,  4.208863,  8.809854,  9.723636)
t<-c(2, 3, 13,  5,  7, 37 ,37,  9,  4)

df <- data.frame(t,x)

#transform into long format for time-dependent covariates
df$id <- 1:length(df$t)
df$rep <- df$t-1
long.df <- expandRows(df, "rep")

rep.vec<-c()
for(i in 1:length(df$t)){
    rep.vec <- c(rep.vec,1:(df[i,"t"]-1))
}

long.df$start <- rep.vec 
long.df$stop  <- rep.vec +1
long.df$censrec <- 0
long.df$censrec<-ifelse(long.df$stop==long.df$t,1,long.df$censrec)


coxph(Surv(t)~x,data=df)
coxph(Surv(start,stop,censrec)~x,data=long.df)

flexsurvreg(Surv(time=t)~x,data=df, dist="weibull")
flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull",inits=c(shape=.1, scale=1))


正在读取错误消息:

flexsurvreg中的错误(Surv(启动、停止、检查记录)~x,数据=long.df,dist=“weibull”,: 初始值必须是数字向量

然后阅读帮助页面,
?flexsurvreg
,似乎应该尝试将
inits
的值设置为命名的数字向量:

flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull", inits=c(shape=.1, scale=1))
Call:
flexsurvreg(formula = Surv(start, stop, censrec) ~ x, data = long.df, 
    dist = "weibull", inits = c(shape = 0.1, scale = 1))

Estimates: 
       data mean  est       L95%      U95%      se        exp(est)  L95%      U95%    
shape        NA    5.00082   4.05560   6.16633   0.53454        NA        NA        NA
scale        NA   13.17213  11.27871  15.38341   1.04294        NA        NA        NA
x      15.66145    0.01522   0.00567   0.02477   0.00487   1.01534   1.00569   1.02508

N = 715,  Events: 50,  Censored: 665
Total time at risk: 715
Log-likelihood = -131.5721, df = 3
AIC = 269.1443

非常相似的结果。我的猜测基本上是暗箭伤人,因此除了“扩展搜索”之外,我没有任何关于如何做出选择的指导。我只想提到,在flexsurv v1.1.1中,运行以下代码:

flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull")
不会返回任何错误。它还提供与非时变命令相同的估计值

flexsurvreg(Surv(time=t)~x,data=df, dist="weibull")

我很难理解您的意图。对什么是最终事件、什么是审查事件以及不同时间段的协变量进行一些评论会有所帮助。我很抱歉。对于
t
,我指的是最终事件之前的时间(例如机器故障).With
censrec
I表示在间隔结束时是否观察到故障。在这个简单的情况下,
t
之前具有停止时间的所有间隔均为0。I排除(目前)随时间变化的协变量,以测试模型规范是否正确(因此时间间隔有些随意)。如果没有时变协变量,我希望两个flexsurvreg模型具有相同的估计值。因此,我打算在下一步添加时变协变量之前正确设置模型。非常感谢!这确实有帮助。在使用编辑运行此示例时,我得到相同的结果。但是,当我使用基于真实距离的数据时分布,估计值不同:
x
flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull", inits=c(shape=.1, scale=1))
Call:
flexsurvreg(formula = Surv(start, stop, censrec) ~ x, data = long.df, 
    dist = "weibull", inits = c(shape = 0.1, scale = 1))

Estimates: 
       data mean  est       L95%      U95%      se        exp(est)  L95%      U95%    
shape        NA    5.00082   4.05560   6.16633   0.53454        NA        NA        NA
scale        NA   13.17213  11.27871  15.38341   1.04294        NA        NA        NA
x      15.66145    0.01522   0.00567   0.02477   0.00487   1.01534   1.00569   1.02508

N = 715,  Events: 50,  Censored: 665
Total time at risk: 715
Log-likelihood = -131.5721, df = 3
AIC = 269.1443
flexsurvreg(Surv(start,stop,censrec) ~ x ,data=long.df, dist="weibull")
flexsurvreg(Surv(time=t)~x,data=df, dist="weibull")