R-Flexsurv与时间相关协变量
我了解到,根据Christopher Jackson(2016)[“flexsurv:R中的参数生存建模平台,统计软件杂志,70(1)],R flexsurv软件包也可用于建模时间相关协变量 然而,即使经过几次在线论坛的调整和搜索,我也无法弄清楚是怎么回事 在开始估计时间相关的协变量之前,我尝试创建一个只包含时间无关协变量的简单模型,以测试我是否正确指定了Surv对象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
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
,我指的是最终事件之前的时间(例如机器故障).Withcensrec
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")