You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何同时为coxph设置robust=T并在modelsummary中使用vcov='robust'?

解决coxph(robust=T)与modelsummary(vcov='robust')兼容及显著性星号问题

问题原因

当你在coxph()中设置robust=T时,模型内部已计算出稳健方差-协方差矩阵,但modelsummary()的vcov='robust'参数会尝试调用通用稳健方差提取方法,与coxph内置的稳健矩阵格式不兼容,因此报错。而使用vcov='classical'时,modelsummary()会提取普通方差矩阵,和coxph(robust=T)生成的稳健p值不匹配,导致显著性星号消失。

解决方案

方法一:直接传递模型内置的稳健方差矩阵

coxph(robust=T)的模型对象会将稳健方差矩阵储存在$var属性中,可直接将该矩阵传给modelsummary()的vcov参数:

示例代码

library(survival)
library(modelsummary)

# 构建带稳健标准误的Cox模型
data(lung)
mod1 <- coxph(Surv(time, status) ~ age + sex, data = lung, robust = TRUE)
mod2 <- coxph(Surv(time, status) ~ age + sex + ph.ecog, data = lung, robust = TRUE)
models_list <- list("Model 1" = mod1, "Model 2" = mod2)

# 汇总模型,传递每个模型的稳健方差矩阵
modelsummary(models_list,
             stars = TRUE,
             vcov = list(mod1$var, mod2$var)
)

方法二:用自定义函数批量提取稳健方差

如果有多个模型,写一个简单的提取函数更高效:

# 自定义提取coxph稳健方差的函数
extract_cox_robust_vcov <- function(model) {
  model$var
}

# 调用modelsummary时指定该函数
modelsummary(models_list,
             stars = TRUE,
             vcov = extract_cox_robust_vcov
)

额外说明

  • 上述方法会让modelsummary()基于稳健方差矩阵计算标准误、置信区间和p值,显著性星号可正常显示。
  • 若不需要在coxph()中预先设置robust=T,也可直接通过sandwich包在modelsummary()中计算稳健方差(需先安装sandwich包),示例:
# 不设置coxph的robust=T
mod1 <- coxph(Surv(time, status) ~ age + sex, data = lung)
mod2 <- coxph(Surv(time, status) ~ age + sex + ph.ecog, data = lung)

# 用sandwich包计算稳健方差
modelsummary(models_list,
             stars = TRUE,
             vcov = sandwich::vcovHC
)

内容的提问来源于stack exchange,提问作者hobsbawm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:15:41