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

使用stargazer导出风险比生存分析结果时显著性水平异常问题

解决Stargazer输出风险比时显著性标记异常的问题

问题根源在于stargazer的apply.coef参数会基于转换后的风险比重新计算p值,而非沿用Cox模型原始的p值,导致显著性标记错误。正确的做法是手动提取风险比、经delta方法调整的标准误,以及模型原始p值,直接传递给stargazer,确保显著性标记与原始结果一致。

修改后的代码:

# 加载所需包
library(dplyr)
library(foreign)
library(stargazer)

# 读取原始数据
data = read_stata("leaders, institutions, covariates, updated tvc.dta")

# 为每个领导人设置时间起点t0
data = mutate(data,t0 = lag(t,default=0), .by=leadid)

# 构建生存分析对象与模型
# 自然死亡模型
survobj_natural = Surv(data[["t0"]], data[["_t"]], data$c_natural)
natural_original <- coxph(survobj_natural~legislature + lgdp_1+ growth_1 +exportersoffuelsmainlyoil_EL2008+ ethfrac_FIXED+ communist+ mil+ cw+ age, 
                          data=data, ties="breslow")

# 政变模型
survobj_coup = Surv(data[["t0"]], data[["_t"]], data$c_coup)
coups_original <- coxph(survobj_coup~legislature + lgdp_1+ growth_1 +exportersoffuelsmainlyoil_EL2008+ ethfrac_FIXED+ communist+ mil+ cw+ age, 
                        data=data, ties="breslow")

# 革命模型
survobj_revolt = Surv(data[["t0"]], data[["_t"]], data$c_revolt)
revolt_original <- coxph(survobj_revolt~legislature + lgdp_1+ growth_1 +exportersoffuelsmainlyoil_EL2008+ ethfrac_FIXED+ mil+ cw+ age, 
                         data=data, ties="breslow")

# 定义函数提取风险比、调整后的标准误和原始p值
extract_hr_stats <- function(model) {
  log_coef <- coef(model)
  hr <- exp(log_coef)
  # 用delta方法计算风险比的标准误:exp(系数) * 原始标准误
  hr_se <- exp(log_coef) * summary(model)$coefficients[,3]
  # 提取模型原始p值
  p_val <- summary(model)$coefficients[,5]
  list(hr = hr, se = hr_se, p = p_val)
}

# 提取三个模型的统计量
natural_stats <- extract_hr_stats(natural_original)
coups_stats <- extract_hr_stats(coups_original)
revolt_stats <- extract_hr_stats(revolt_original)

# 生成带正确显著性标记的风险比表格
stargazer(natural_original, coups_original, revolt_original,
          coef = list(natural_stats$hr, coups_stats$hr, revolt_stats$hr),
          se = list(natural_stats$se, coups_stats$se, revolt_stats$se),
          p = list(natural_stats$p, coups_stats$p, revolt_stats$p),
          digits = 3,
          title = "生存分析结果(风险比)")

关键说明:

  1. 风险比标准误调整:通过delta方法计算风险比的标准误(exp(系数)*原始标准误),这是风险比标准误的正确计算方式,避免stargazer使用原始对数系数标准误导致的偏差。
  2. 原始p值直接传递:直接使用Cox模型输出的p值,确保显著性标记与原始结果完全一致,彻底解决apply.coef参数导致的p值重算错误。
  3. 保留模型元信息:仍传入原始模型对象给stargazer,保证变量名、模型结构等元信息完整,仅替换需要调整的统计量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:22:14