生存分析
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
estat
Cox回归后删失结局一致性
Stata
estat concordanceR 包:survival
survival::concordance(fit)与 Stata 有差异 固定流程;请明确调整示例列名。删失权重及风险和时间并列处理影响统计量。
另有 1 个示例及替代实现
Cox比例风险诊断
Stata
estat phtest, detailR 包:survival
survival::cox.zph(fit, transform = "identity")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差实现及默认时间变换可能不同。
ltable
固定区间的精算寿命表生存率
Stata
ltable time event, intervals(0 2 4 6)R 包:base
{ ends <- c(2, 4, 6); starts <- c(0, 2, 4); n <- vapply(starts, function(t) sum(data$time >= t), integer(1)); d <- vapply(seq_along(ends), function(i) sum(data$time >= starts[i] & data$time < ends[i] & data$event == 1), integer(1)); w <- vapply(seq_along(ends), function(i) sum(data$time >= starts[i] & data$time < ends[i] & data$event == 0), integer(1)); q <- d / (n - w / 2); data.frame(start = starts, end = ends, at_risk = n, failures = d, withdrawals = w, survival = cumprod(1 - q)) }与 Stata 有差异 固定流程;请明确调整示例列名。使用退出人数减半的精算修正及左闭区间,假设区间内删失均匀;须统一边界规则和分组区间。
predict
根据累积风险计算Cox基线生存率
Stata
predict baseS, basesurvR 包:survival
{ h <- survival::basehaz(fit, centered = FALSE); data.frame(time = h$time, survival = exp(-h$hazard)) }固定流程;请明确调整示例列名。基线对应零协变量;须核对目标参考特征。Stata basesurv采用乘积极限构造,exp(-累积风险)是替代估计,不保证数值一致。
另有 11 个示例及替代实现
零协变量处基线累积风险
Stata
predict basehaz, basechazardR 包:survival
survival::basehaz(fit, centered = FALSE)与 Stata 有差异 固定流程;请明确调整示例列名。Cox基线明确对应零协变量;Stata按观察存储,R按唯一事件或删失时间返回。
loglogistic AFT条件中位生存时间
Stata
predict median_time, medianR 包:survival
stats::predict(fit, type = "quantile", p = .5)与 Stata 有差异 固定流程;请明确调整示例列名。预测特定分布的生存时间分位数,并非平均时间。
Cox回归偏差残差
Stata
predict residual*, devianceR 包:survival
stats::residuals(fit, type = "deviance")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差每个事件一行;得分和影响残差每个观察一行。
Cox系数影响残差
Stata
predict residual*, dfbetaR 包:survival
stats::residuals(fit, type = "dfbeta")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差每个事件一行;得分和影响残差每个观察一行。
Cox回归鞅残差
Stata
predict residual*, mgaleR 包:survival
stats::residuals(fit, type = "martingale")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差每个事件一行;得分和影响残差每个观察一行。
标准化Schoenfeld残差
Stata
predict residual*, scaledschR 包:survival
stats::residuals(fit, type = "scaledsch")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差每个事件一行;得分和影响残差每个观察一行。
事件特异Schoenfeld残差
Stata
predict residual*, schoenfeldR 包:survival
stats::residuals(fit, type = "schoenfeld")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差每个事件一行;得分和影响残差每个观察一行。
Cox得分贡献
Stata
predict residual*, scoresR 包:survival
stats::residuals(fit, type = "score")与 Stata 有差异 固定流程;请明确调整示例列名。Schoenfeld残差每个事件一行;得分和影响残差每个观察一行。
Cox-Snell期望事件量
Stata
predict value, csnellR 包:survival
stats::predict(fit, type = "expected", reference = "zero")与 Stata 有差异 固定流程;请明确调整示例列名。相对预测明确以零为中心;期望事件量取决于各观察的随访时间。
Cox相对风险得分
Stata
predict value, hrR 包:survival
stats::predict(fit, type = "risk", reference = "zero")与 Stata 有差异 固定流程;请明确调整示例列名。相对预测明确以零为中心;期望事件量取决于各观察的随访时间。
Cox线性预测量
Stata
predict value, xbR 包:survival
stats::predict(fit, type = "lp", reference = "zero")与 Stata 有差异 固定流程;请明确调整示例列名。相对预测明确以零为中心;期望事件量取决于各观察的随访时间。
snapspan
将快照转为协变量向后续区间生效的区间数据
Stata
snapspan id time event, generate(start)R 包:stats
{ out <- data[order(data$id, data$time), ]; previous <- ave(out$time, out$id, FUN = function(v) c(NA_real_, head(v, -1))); previous_x <- ave(out$x, out$id, FUN = function(v) c(NA_real_, head(v, -1))); out$start <- previous; out$x <- previous_x; out[!is.na(out$start), ] }固定流程;请明确调整示例列名。首个快照定义进入时间,事件在区间末发生,普通协变量向后续区间生效;本流程剔除初始零长度行,比较行数时须核对Stata保留的基线行。
stbase
stci
中位生存时间及置信限
Stata
stci, medianR 包:survival
stats::quantile(survival::survfit(s ~ 1), probs = .5)与 Stata 有差异 固定流程;请明确调整示例列名。中位数插值和置信限约定可能不同。
截断于时间九的限制平均生存时间
Stata
stci, rmeanR 包:survival
summary(survival::survfit(s ~ 1), rmean = "common")$table与 Stata 有差异 rmean=“common”将生存曲线积分限制在最大观测随访时间,与Stata的stci, rmean一致,不向随访期外推。须统一分析样本和删失声明。
stcox
Cox 比例风险模型
Stata
stcox x1 x2R 包:survival
survival::coxph(survival::Surv(time, died) ~ x1 + x2, data = data)与 Stata 有差异 exp(coef(fit)) 给出 stcox 报告的风险比。 coxph() 默认用 Efron 处理并列事件;Stata stcox 默认 Breslow。设 ties = “breslow” 可匹配并列事件似然。
另有 9 个示例及替代实现
Cox模型的组别协变量交互
Stata
stcox c.x##i.groupR 包:survival
survival::coxph(survival::Surv(time, event) ~ x * factor(group), ties = "breslow", data = data)与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
Breslow结点处理的Cox回归
Stata
stcox x zR 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z, data = data, ties = "breslow")与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
加权Cox模型与三明治协方差
Stata
stcox x z [pw=w], vce(robust)R 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z, ties = "breslow", data = data, weights = w, robust = TRUE)与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
Efron结点处理的Cox回归
Stata
stcox x z, efronR 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z, data = data, ties = "efron")与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
精确部分似然Cox回归
Stata
stcox x z, exactpR 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z, data = data, ties = "exact")与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
共享Gamma脆弱性Cox模型
Stata
stcox x z, shared(id)R 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z + frailty(id, distribution = "gamma"), ties = "breslow", data = data)与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
分层Cox基线风险
Stata
stcox x z, strata(group)R 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z + strata(group), ties = "breslow", data = data)与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
聚类稳健Cox推断
Stata
stcox x z, vce(cluster id)R 包:survival
survival::coxph(survival::Surv(time, event) ~ x + z, ties = "breslow", data = data, cluster = id)与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
Cox对数时间变化系数
Stata
stcox x, tvc(z) texp(ln(_t))R 包:survival
survival::coxph(survival::Surv(time, event) ~ x + tt(z), ties = "breslow", data = data, tt = function(z, t, ...) z * log(t))与 Stata 有差异 固定流程;请明确调整示例列名。须明确统一并列事件、风险区间、权重和参考推断。
stcrreg
Fine-Gray亚分布风险流程
Stata
stcrreg x z, compete(cause==2)R 包:survival
{ expanded <- survival::finegray(survival::Surv(time, cause) ~ x + z + id, data = data, etype = "target"); survival::coxph(survival::Surv(fgstart, fgstop, fgstatus) ~ x + z, data = expanded, weights = fgwt, cluster = id) }与 Stata 有差异 固定流程;请明确调整示例列名。使用加权扩展数据实现;删失权重和方差方法可能不同。
stdescribe
stfill
在生存分析受试者内向前携带已观察协变量
Stata
stfill z, forwardR 包:zoo
{ out <- data[order(data$id, data$start), ]; out$z <- ave(out$z, out$id, FUN = function(v) zoo::na.locf(v, na.rm = FALSE)); out }与 Stata 有差异 固定流程;请明确调整示例列名。要求区间顺序正确且不重叠;开头缺失仍保留,后续信息不会向前期回填。
stgen
标记生存观察史中曾经暴露的受试者
Stata
stgen ever_x = ever(x==1)R 包:stats
transform(data, ever_x = ave(x == 1, id, FUN = function(v) as.integer(any(v))))与 Stata 有差异 固定流程;请明确调整示例列名。所有已观察区间均参与历史计算;暴露缺失值须明确处理,不能默认当作未暴露。
stintreg
区间删失对数正态回归
Stata
stintreg x, interval(lower upper) distribution(lognormal)R 包:survival
survival::survreg(survival::Surv(lower, upper, type = "interval2") ~ x, data = data, dist = "lognormal")与 Stata 有差异 Stata必须指定interval(lower upper)。Weibull的time选项选择AFT系数,与survreg对应,而非Stata默认的PH系数。interval2中端点相等为精确事件,下端点NA表示左删失,上端点NA表示右删失;须显式转换Stata的左删失边界。
区间删失Weibull回归
Stata
stintreg x, interval(lower upper) distribution(weibull) timeR 包:survival
survival::survreg(survival::Surv(lower, upper, type = "interval2") ~ x, data = data, dist = "weibull")与 Stata 有差异 Stata必须指定interval(lower upper)。Weibull的time选项选择AFT系数,与survreg对应,而非Stata默认的PH系数。interval2中端点相等为精确事件,下端点NA表示左删失,上端点NA表示右删失;须显式转换Stata的左删失边界。
stir
比较两组发生率
Stata
stir groupR 包:stats
{ counts <- tapply(data$event, data$group, sum); times <- tapply(data$time, data$group, sum); stats::poisson.test(counts, T = times) }与 Stata 有差异 固定流程;请明确调整示例列名。R提供条件精确检验和区间,Stata默认区间方法可能不同。
stjoin
stmh
stptime
strate
streg
参数生存模型
Stata
streg x, distribution(weibull)R 包:survival
survival::survreg(survival::Surv(time, died) ~ x, data = data, dist = "weibull")与 Stata 有差异 survreg() 报告加速失效时间形式;Stata 的 Weibull 默认使用风险形式,因此符号和尺度不同。
另有 7 个示例及替代实现
exponential加速失效时间模型
Stata
streg x z, distribution(exponential) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + z, data = data, dist = "exponential")与 Stata 有差异 固定流程;请明确调整示例列名。survreg报告AFT系数;转换为Weibull比例风险系数须调整符号和尺度。
loglogistic加速失效时间模型
Stata
streg x z, distribution(loglogistic) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + z, data = data, dist = "loglogistic")与 Stata 有差异 固定流程;请明确调整示例列名。survreg报告AFT系数;转换为Weibull比例风险系数须调整符号和尺度。
lognormal加速失效时间模型
Stata
streg x z, distribution(lognormal) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + z, data = data, dist = "lognormal")与 Stata 有差异 固定流程;请明确调整示例列名。survreg报告AFT系数;转换为Weibull比例风险系数须调整符号和尺度。
weibull加速失效时间模型
Stata
streg x z, distribution(weibull) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + z, data = data, dist = "weibull")与 Stata 有差异 固定流程;请明确调整示例列名。survreg报告AFT系数;转换为Weibull比例风险系数须调整符号和尺度。
loglogistic分组尺度加速失效模型
Stata
streg x, distribution(loglogistic) strata(group) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + factor(group) + strata(group), data = data, dist = "loglogistic")与 Stata 有差异 factor(group)提供分层截距,strata(group)提供分层尺度,与Stata的streg, strata()对应。survreg报告AFT系数;比较Stata的Weibull或指数模型风险比输出前须转换系数。
lognormal分组尺度加速失效模型
Stata
streg x, distribution(lognormal) strata(group) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + factor(group) + strata(group), data = data, dist = "lognormal")与 Stata 有差异 factor(group)提供分层截距,strata(group)提供分层尺度,与Stata的streg, strata()对应。survreg报告AFT系数;比较Stata的Weibull或指数模型风险比输出前须转换系数。
weibull分组尺度加速失效模型
Stata
streg x, distribution(weibull) strata(group) timeR 包:survival
survival::survreg(survival::Surv(time, event) ~ x + factor(group) + strata(group), data = data, dist = "weibull")与 Stata 有差异 factor(group)提供分层截距,strata(group)提供分层尺度,与Stata的streg, strata()对应。survreg报告AFT系数;比较Stata的Weibull或指数模型风险比输出前须转换系数。
sts
Kaplan-Meier 生存曲线
Stata
sts graphR 包:survival
plot(survival::survfit(survival::Surv(time, died) ~ 1, data = data))Log-rank 检验
Stata
sts test groupR 包:survival
survival::survdiff(survival::Surv(time, died) ~ group, data = data)另有 8 个示例及替代实现
Kaplan-Meier生存曲线数据
Stata
sts listR 包:survival
survival::survfit(s ~ 1)与 Stata 有差异 固定流程;请明确调整示例列名。R返回曲线数据;比较时须明确置信变换和并列事件处理。
分组Kaplan-Meier曲线
Stata
sts list, by(group)R 包:survival
survival::survfit(s ~ data$group)与 Stata 有差异 固定流程;请明确调整示例列名。R返回曲线数据;比较时须明确置信变换和并列事件处理。
Nelson-Aalen累积风险
Stata
sts list, cumhazR 包:survival
{ f <- survival::survfit(s ~ 1); data.frame(time = f$time, cumhaz = f$cumhaz) }与 Stata 有差异 固定流程;请明确调整示例列名。R返回曲线数据;比较时须明确置信变换和并列事件处理。
累积失败概率
Stata
sts list, failureR 包:survival
{ f <- survival::survfit(s ~ 1); data.frame(time = f$time, failure = 1 - f$surv) }与 Stata 有差异 固定流程;请明确调整示例列名。R返回曲线数据;比较时须明确置信变换和并列事件处理。
Kaplan-Meier区间变换:log
Stata
sts list, level(95)R 包:survival
survival::survfit(s ~ 1, conf.type = "log", conf.int = .95)固定流程;请明确调整示例列名。明确选择R的置信变换;Stata默认显示方式可能不同。
Kaplan-Meier区间变换:log-log
Stata
sts list, level(95)R 包:survival
survival::survfit(s ~ 1, conf.type = "log-log", conf.int = .95)固定流程;请明确调整示例列名。明确选择R的置信变换;Stata默认显示方式可能不同。
Kaplan-Meier区间变换:plain
Stata
sts list, level(95)R 包:survival
survival::survfit(s ~ 1, conf.type = "plain", conf.int = .95)固定流程;请明确调整示例列名。明确选择R的置信变换;Stata默认显示方式可能不同。
生存曲线Log-rank比较
Stata
sts test group R 包:survival
survival::survdiff(s ~ data$group, rho = 0)与 Stata 有差异 固定流程;请明确调整示例列名。未分层的两组Log-rank检验。
stset
声明生存时间数据
Stata
stset time, failure(died)R 包:survival
survival::Surv(data$time, data$died)R 不需要声明:在每个模型公式左边写 Surv(time, died) 即可。
另有 2 个示例及替代实现
延迟进入计数过程响应
Stata
stset exit, enter(time entry) failure(event)R 包:survival
survival::Surv(data$entry, data$time, data$event)与 Stata 有差异 固定流程;请明确调整示例列名。明确提供进入和退出时间;多区间数据每个风险区间应占一行。
右删失生存响应
Stata
stset time, failure(event)R 包:survival
survival::Surv(data$time, data$event)与 Stata 有差异 固定流程;请明确调整示例列名。创建生存响应对象,不改变全局数据声明状态。
stsplit
在固定切点拆分风险区间
Stata
stsplit period, at(3 6)R 包:survival
{ Surv <- survival::Surv; survival::survSplit(Surv(time, event) ~ ., data = data, cut = c(3, 6), start = "start", end = "time", event = "event", episode = "period") }与 Stata 有差异 固定流程;请明确调整示例列名。返回扩展后的风险区间数据;episode变量是区间序号。
stsum
生存时间的概要
Stata
stsumR 包:survival
survival::survfit(survival::Surv(time, died) ~ 1, data = data)sttocc
从队列风险集抽取巢式病例对照样本
Stata
sttocc, number(2)R 包:base
{ cases <- which(data$event == 1); sets <- lapply(seq_along(cases), function(j) { i <- cases[j]; at_risk <- which(data$entry <= data$time[i] & data$time >= data$time[i] & data$id != data$id[i]); controls <- sample(at_risk, min(2L, length(at_risk)), replace = FALSE); out <- data[c(i, controls), ]; out$case <- c(1L, rep(0L, length(controls))); out$set <- j; out$failure_time <- data$time[i]; out }); do.call(rbind, sets) }固定流程;请明确调整示例列名。示例为无并列失败的单记录队列;每次从风险集抽对照,同一人可出现在多个匹配集。并列失败排序和多区间数据需更完整实现。