使用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 = "生存分析结果(风险比)")
关键说明:
- 风险比标准误调整:通过delta方法计算风险比的标准误(
exp(系数)*原始标准误),这是风险比标准误的正确计算方式,避免stargazer使用原始对数系数标准误导致的偏差。 - 原始p值直接传递:直接使用Cox模型输出的p值,确保显著性标记与原始结果完全一致,彻底解决
apply.coef参数导致的p值重算错误。 - 保留模型元信息:仍传入原始模型对象给
stargazer,保证变量名、模型结构等元信息完整,仅替换需要调整的统计量。
内容的提问来源于stack exchange,提问作者w5698
相关产品推荐
相关产品推荐

