使用 R 中的 survfit 函数对多个新数据点进行生存时间的置信区间
Confidence intervals for survival times using survfit function in R for multiple new data points
我认为解决这个问题的方法可能很简单,但我想不出来。
我已将 cox 比例风险模型拟合到数据集。我想对新数据点进行绝对风险预测,就像在风险预测模型中所做的那样。例如,P(T>t),其中 T 是发生感兴趣事件之前的时间。
数学上我理解这个过程。必须首先估计累积风险函数,可以在此处找到执行此操作的公式示例:https://stats.stackexchange.com/questions/46532/cox-baseline-hazard
生存函数是累积风险函数的简单函数,S(t)=exp(−H(t)),公式可以在这里找到: https://stats.stackexchange.com/questions/58046/proof-of-relationship-between-hazard-rate-probability-density-survival-functio
在拟合一个名为 fit1 的 cox 比例风险模型后,这一切都可以使用 R 中的 survfit 和 summary 函数来完成,对于新数据点,newdata:
newdata1 = data.frame(x1=0,x2=3,x3=5)
summary(survfit(fit1, newdata, type="aalen",se.fit = TRUE, conf.int = 0.95),times=50)
这给出 P(T>50),以及以下输出:
time n.risk n.event survival std.err lower 95% CI upper 95% CI
50 14462 3216 0.835 0.00631 0.823 0.848
至关重要的是,这给出了生存概率的上限和下限 CI。现在如果我想对多个数据点执行此操作,那么我定义:
newdata1 = data.frame(x1=0,x2=3,x3=5)
newdata2 = data.frame(x1=1,x2=1,x3=2)
newdata=rbind(newdata1,newdata2)
summary(survfit(fit1, newdata, type="kalb",se.fit = TRUE, conf.int = 0.95),times=50)
我得到以下输出:
time n.risk n.event survival1 survival2
50 14462 3216 0.835 0.822
它给出了每个患者的生存概率,但没有给出相关的置信区间。尽管 conf.int=0.95.
要求置信区间
所以问题是:当获得多个数据点的预测生存概率时,如何获得生存概率的置信区间?
您看到的不完全是函数的输出,而是输出摘要,其中为 newdata
中的不同行数定义了不同的行为。
从下面的例子可以看出
fit <- coxph(Surv(futime, fustat) ~ age, data=ovarian)
(CI_summary1 <- summary(survfit(fit, newdata=data.frame(age=c(60)), type="aalen",se.fit = TRUE, conf.int = 0.95),times=50))
(CI_summary2 <- summary(survfit(fit, newdata=data.frame(age=c(60,70)), type="aalen",se.fit = TRUE, conf.int = 0.95),times=50))
str(CI_summary2)
您要查找的置信区间在 CI_summary2$upper
和 CI_summary2$lower
中。
我认为解决这个问题的方法可能很简单,但我想不出来。
我已将 cox 比例风险模型拟合到数据集。我想对新数据点进行绝对风险预测,就像在风险预测模型中所做的那样。例如,P(T>t),其中 T 是发生感兴趣事件之前的时间。
数学上我理解这个过程。必须首先估计累积风险函数,可以在此处找到执行此操作的公式示例:https://stats.stackexchange.com/questions/46532/cox-baseline-hazard
生存函数是累积风险函数的简单函数,S(t)=exp(−H(t)),公式可以在这里找到: https://stats.stackexchange.com/questions/58046/proof-of-relationship-between-hazard-rate-probability-density-survival-functio
在拟合一个名为 fit1 的 cox 比例风险模型后,这一切都可以使用 R 中的 survfit 和 summary 函数来完成,对于新数据点,newdata:
newdata1 = data.frame(x1=0,x2=3,x3=5)
summary(survfit(fit1, newdata, type="aalen",se.fit = TRUE, conf.int = 0.95),times=50)
这给出 P(T>50),以及以下输出:
time n.risk n.event survival std.err lower 95% CI upper 95% CI
50 14462 3216 0.835 0.00631 0.823 0.848
至关重要的是,这给出了生存概率的上限和下限 CI。现在如果我想对多个数据点执行此操作,那么我定义:
newdata1 = data.frame(x1=0,x2=3,x3=5)
newdata2 = data.frame(x1=1,x2=1,x3=2)
newdata=rbind(newdata1,newdata2)
summary(survfit(fit1, newdata, type="kalb",se.fit = TRUE, conf.int = 0.95),times=50)
我得到以下输出:
time n.risk n.event survival1 survival2
50 14462 3216 0.835 0.822
它给出了每个患者的生存概率,但没有给出相关的置信区间。尽管 conf.int=0.95.
要求置信区间所以问题是:当获得多个数据点的预测生存概率时,如何获得生存概率的置信区间?
您看到的不完全是函数的输出,而是输出摘要,其中为 newdata
中的不同行数定义了不同的行为。
从下面的例子可以看出
fit <- coxph(Surv(futime, fustat) ~ age, data=ovarian)
(CI_summary1 <- summary(survfit(fit, newdata=data.frame(age=c(60)), type="aalen",se.fit = TRUE, conf.int = 0.95),times=50))
(CI_summary2 <- summary(survfit(fit, newdata=data.frame(age=c(60,70)), type="aalen",se.fit = TRUE, conf.int = 0.95),times=50))
str(CI_summary2)
您要查找的置信区间在 CI_summary2$upper
和 CI_summary2$lower
中。