使用polr拟合有序逻辑回归后,如何获取响应变量类别转换的置信区间?
关于polr有序逻辑回归阈值置信区间的问题解答
首先明确:你看到的Low|Medium、Medium|High这类条目是有序逻辑回归中的阈值参数(cutpoints/zeta),它们用于划分响应变量不同有序类别的对数几率分界点,属于模型的核心参数之一,你的理解没有问题。
为什么broom::tidy返回NA?
broom::tidy()默认聚焦于自变量的回归系数输出,没有为阈值参数计算置信区间,因此这部分的conf.low和conf.high会显示NA,但这不代表阈值的置信区间无法计算。
计算阈值置信区间的方法
我们可以通过模型对象直接提取阈值的估计值和方差协方差矩阵,用正态近似法手动计算置信区间,具体代码示例如下:
library(MASS) library(broom) # 拟合有序逻辑回归模型 fit <- polr(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) # 提取阈值参数(zeta)的估计值 zeta_estimates <- fit$zeta # 从模型的方差协方差矩阵中提取阈值对应的标准误 zeta_se <- sqrt(diag(vcov(fit))[names(zeta_estimates)]) # 计算95%置信区间(使用正态分布临界值1.96) conf_level <- 0.95 critical_val <- qnorm((1 + conf_level)/2) zeta_ci_low <- zeta_estimates - critical_val * zeta_se zeta_ci_high <- zeta_estimates + critical_val * zeta_se # 整理成与tidy输出一致的格式 zeta_results <- data.frame( term = names(zeta_estimates), estimate = zeta_estimates, std.error = zeta_se, conf.low = zeta_ci_low, conf.high = zeta_ci_high, p.value = NA # 阈值一般不做显著性检验,故设为NA ) # 合并自变量系数的tidy结果与阈值结果 full_model_summary <- rbind( tidy(fit, conf.int = TRUE, exponentiate = FALSE), zeta_results ) # 若需要指数化自变量系数(注意:阈值指数化无实际解释意义,不建议对阈值做此操作) full_model_summary_exp <- full_model_summary full_model_summary_exp[!grepl("\\|", full_model_summary_exp$term), c("estimate", "conf.low", "conf.high")] <- exp(full_model_summary_exp[!grepl("\\|", full_model_summary_exp$term), c("estimate", "conf.low", "conf.high")])
补充说明
阈值参数的置信区间解释与自变量系数不同:它反映的是分界点的对数几率的可信范围,指数化后对应的是类别转换的几率分界范围,实际分析中很少对阈值做指数化处理,重点关注其数值对应的分界逻辑即可。
内容的提问来源于stack exchange,提问作者Isaac Victor Silva Rodrigues I
相关产品推荐
相关产品推荐

