如何使用 survreg 模型预测特定时间点的生存率?

How to predict survival at certain time points, using a survreg model?

数据

library(survival)
kidney

型号

model = survreg(Surv(time, censored) ~ sex + age, data = kidney)

Call:
survreg(formula = Surv(time, censored) ~ sex + age, data = kidney)

Coefficients:
(Intercept)   sexfemale         age 
 8.44411429 -0.89481679 -0.02170266 

Scale= 1.653512 

Loglik(model)= -122.1   Loglik(intercept only)= -122.7
    Chisq= 1.21 on 2 degrees of freedom, p= 0.547 
n= 76 

如何预测多个时间点(例如 30、90、182 天)的两性存活率(加上 95% CI)?

有没有在不同尺度(例如原始时间尺度、概率)上做的技巧?

示例代码或示例将不胜感激。

您可以使用 survminer 包。示例:

library(survival)
library(survminer)

f1 <- survfit(Surv(time, status) ~ sex, data = kidney)

res.sum <- surv_summary(f1, data = kidney)

# define desired time points
times <- c(30, 90, 182)

summary(f1,times)

owner-accepted 答案仅适用于 Kaplan-Meier 估计器,它不是参数生存模型 (AFT)。 OP 询问如何从 R 中的 survreg 对象预测存活率。我有一个类似的问题:How to predict survival rates, from a Weibull model, given discrete times to event?

survival 包中的 predict.survreg 函数不会预测给定事件离散时间 (t = 1, 2, 3, ..., 48) 的存活率(概率)。幸运的是,对于 Weibull AFT 模型,我们可以使用 pweibull 函数或累积风险函数来预测给定 t 的生存率。

方法一:pweibull()

library(survival)

model = survreg(Surv(time, status) ~ sex + age, data = kidney,
                dist="weibull")

time_days = c(30, 90, 182)

newdat <- data.frame(sex=1, age=44)

mu_hat <- predict(model, newdata=newdat, type="link")

surv_hat <- 1 - pweibull(time_days, 
                         shape=1/model$scale,
                         scale=exp(mu_hat))

surv_hat

方法二:累积危害

predict_survival_weibull <- function(object, newdata, t){
  mu_hat <- predict(object, newdata=newdata, type="link")
  
  cum_hazard <- (t / exp(mu_hat))^(1/object$scale)
  
  surv <- exp(-cum_hazard)
  
  return(surv)
}

predict_survival_weibull(model, newdat, t=time_days)