如何使用 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)
数据
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)