Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
survfit()为区间删失数据生成的置信区间大得令人难以置信_R_Survival Analysis_Survival - Fatal编程技术网

survfit()为区间删失数据生成的置信区间大得令人难以置信

survfit()为区间删失数据生成的置信区间大得令人难以置信,r,survival-analysis,survival,R,Survival Analysis,Survival,我有一些数据,这些数据是由间歇性访谈产生的,在访谈中,询问一个人是否有某种症状。最后一次知道每个人没有这种特殊症状的时间表示为tstart。如果适用,观察到患者出现症状的时间为tstop。使用R中的survival包,使用Surv函数创建一个survival对象,指定这是区间删失数据。我想要生存函数的非参数最大似然估计。这可以使用survfit函数实现,该函数似乎将调用传递给内部函数survfitTurnbull。由此产生的置信区间之宽令人难以置信。我不明白为什么会这样 # A random s

我有一些数据,这些数据是由间歇性访谈产生的,在访谈中,询问一个人是否有某种症状。最后一次知道每个人没有这种特殊症状的时间表示为
tstart
。如果适用,观察到患者出现症状的时间为
tstop
。使用R中的
survival
包,使用
Surv
函数创建一个survival对象,指定这是区间删失数据。我想要生存函数的非参数最大似然估计。这可以使用
survfit
函数实现,该函数似乎将调用传递给内部函数
survfitTurnbull
。由此产生的置信区间之宽令人难以置信。我不明白为什么会这样

# A random sample of the data using dput()
structure(list(tstart = c(0.01, 38, 0.01, 0.01, 23, 26, 0.01, 
19, 0.01, 0.01, 22, 6, 0.01, 14, 16, 0.01, 0.01, 0.01, 0.01, 
21, 15, 0.01, 0.01, 13, 10, 0.01, 0.01, 19, 0.01, 0.01, 0.01, 
0.01, 22, 17, 27, 14, 16, 0.01, 20, 27, 10, 0.01, 0.01, 16, 20, 
7, 6, 15, 0.01, 0.01), tstop = c(4.01, NA, 5.01, 8.01, NA, NA, 
5.01, NA, 3.01, 16.01, NA, 6.01, 8.01, NA, NA, 7.01, 16.01, 1.01, 
10.01, NA, NA, 5.01, 8.01, NA, NA, 2.01, 3.01, NA, 7.01, 5.01, 
2.01, 9.01, NA, NA, NA, NA, NA, 10.01, NA, NA, NA, 5.01, 10.01, 
NA, NA, NA, 7.01, NA, 14.01, 4.01)), row.names = c(NA, -50L), class = "data.frame")

survObj <- with(temp_df, Surv(time = tstart, time2 = tstop, type = "interval2"))
survFit <- survfit(SurvObj ~ 1))
summary(survFit)
#使用dput()的随机数据样本
结构(列表)(tstart=c(0.01,38,0.01,0.01,23,26,0.01,
19, 0.01, 0.01, 22, 6, 0.01, 14, 16, 0.01, 0.01, 0.01, 0.01, 
21, 15, 0.01, 0.01, 13, 10, 0.01, 0.01, 19, 0.01, 0.01, 0.01, 
0.01, 22, 17, 27, 14, 16, 0.01, 20, 27, 10, 0.01, 0.01, 16, 20, 
7,6,15,0.01,0.01),tstop=c(4.01,NA,5.01,8.01,NA,NA,
5.01,NA,3.01,16.01,NA,6.01,8.01,NA,NA,7.01,16.01,1.01,
10.01,不适用,不适用,5.01,8.01,不适用,不适用,2.01,3.01,不适用,7.01,5.01,
2.01,9.01,NA,NA,NA,NA,NA,NA,10.01,NA,NA,NA,5.01,10.01,
NA,NA,NA,7.01,NA,14.01,4.01),row.names=c(NA,-50L),class=“data.frame”)

survObj值得一提的是,这看起来不像是软件中的一个bug,而是使用非参数最大似然估计(NPMLE,也称为Turnbull估计,如果你给它区间删失数据,它
survfit
是合适的)这样灵活的估计的潜在限制用于估计生存曲线。这个答案的TLDR版本是,我建议您使用参数模型,如Weibull,或者使用
survival::survreg
icenReg::ic_par
或者
icenReg::ic_bayes
。承认偏见:我是icenReg的作者

关于NPMLE的一个技术性但非常相关的注意事项是,它仅为Turnbull区间分配正概率质量,这些间隔定义为:间隔的左侧为某个观测间隔的左侧,Turnbull间隔的右侧为任何观测间隔的次最近右侧。为了说明这一点,我绘制了你的观察间隔和相应的Turnbull间隔

请注意,在最后两次Turnbull间歇之间有一个巨大的间隙!这会导致一个非常“跳跃”的NPMLE,这也会在跳跃之间导致相当多的错误

在花了很长时间思考这个问题之后,我的快速总结是,这是由于只有少量的信息数据和太多的灵活性造成的。在大多数生存分析案例中,假设平滑的生存曲线是合理的,例如参数分布。只要分布不太严格(阅读:单参数指数分布),这种温和的平滑假设允许您从数据中获得更多信息,而不会引入太多偏差

为了说明这一点,我附上了一个威布尔拟合+置信区间图和它旁边的拟合NPMLE

仅供参考,您在NPMLE中看到的框不是置信区间,而是NPMLE仅在分配给每个Turnbull区间的概率范围内是唯一的,但该概率在区间内的分布方式不会影响对数似然。因此,任何通过该框的生存曲线都会使对数可能性最大化