拟合威布尔生存函数的置信区间?

机器算法验证 生存 威布尔分布
2022-04-10 18:10:23

我正在实施 Weibull 生存分析拟合器,并已成功估计参数及其标准误差。我还可以生成拟合的生存曲线。我的问题是如何使用拟合参数和标准误差来计算生存曲线的置信区间?

2个回答

我刚刚解决了这个问题,因为我自己也有同样的问题。我的回答很大程度上要归功于 Mara Tableman(使用 S/R 进行生存分析的第 65 页)。

假设您有使用 Weibull 分布的生存函数 ,则可以为后续的计算 95% 置信区间的下限和上限:S(t)t

CIlo=exp{log(S(t))×ez/nu}
CIhi=exp{log(S(t))×ez/nu}

其中是正态分布的相关分位数(表示 95% CI),是在随访时间内观察到的事件数(即,不是患者/受试者的数量)。zz1.96nu

下面是 R 代码,用于计算一个向量的置信界限,命名为S_t,生存比例(一个向量在指定的后续时间,)。S(t)t

nu # number of events, needs to be set
z_st<-qnorm(0.975)
ci_lo <- exp(log(S_t)*exp(z_st/sqrt(nu)))
ci_hi <- exp(log(S_t)*exp(-z_st/sqrt(nu)))

我发现@tystanza 的答案(Tableman 的方程式)给出了一个过于保守的置信区间——也就是说,它们太宽了。当我进行蒙特卡罗模拟来估计 Tableman 置信区间的覆盖率时,我发现名义上的 95% CI 给出了 100% 的覆盖率。

我从 flexsurv 包中找到了另一个选项。我认为它们不会直接暴露置信区间,但可以从“摘要”中找到它们。这是我发现的获取 CI 的 hack 解决方法。我确实通过 MC 抽样验证了这些 CI 的覆盖率几乎是正确的(我发现 CI 在 930/1000 案例中包含 95% 置信区间的真实值——非常接近)。

require(flexsurv)
require(survival)

sWei = flexsurvreg(Surv(samples, rep(1,N)) ~ 1, dist='weibull', cl = 1-alpha)
s = unlist(summary(sWei))
lowerCI = s[(2*N+1):(3*N)]
upperCI = s[(3*N+1):(4*N)]