求问:是否存在类似Stata mlogtest, combine命令的R函数?
R中替代Stata
mlogtest, combine的方法 Stata的mlogtest, combine命令用于批量执行Wald检验,判断多分类logistic回归模型中任意两个因变量类别是否可以合并(官方功能描述:combine计算多分类logit模型中两个结果类别是否可合并的Wald检验)。在R中,你可以通过以下方式实现类似功能:
1. 单个类别对的检验(基于mlogit+car包)
先使用mlogit包拟合多分类logit模型,再用car包的linearHypothesis构造检验假设:
# 加载依赖包 library(mlogit) library(car) # 示例数据与模型拟合 data("Fishing", package = "mlogit") fish_data <- mlogit.data(Fishing, choice = "mode", shape = "wide") mlogit_model <- mlogit(mode ~ price + catch, data = fish_data) # 检验"beach"和"pier"两个类别是否可合并 # 假设:两个类别对应的所有自变量系数相等 hypotheses <- c( "beach:price = pier:price", "beach:catch = pier:catch" ) # 执行Wald检验 linearHypothesis(mlogit_model, hypotheses)
2. 自动批量检验所有类别组合
如果你需要像mlogtest, combine那样自动遍历所有类别对并输出结果,可以自定义一个函数:
library(mlogit) library(car) # 定义批量合并检验函数 mlog_combine_test <- function(mlogit_model) { # 获取模型中的非基准类别 coef_names <- names(mlogit_model$coefficients) categories <- unique(sub(":(.*)", "", coef_names)) # 生成所有两两类别组合 category_pairs <- combn(categories, 2) # 遍历每个组合执行检验 test_results <- lapply(1:ncol(category_pairs), function(idx) { cat1 <- category_pairs[1, idx] cat2 <- category_pairs[2, idx] # 提取自变量名,构造系数相等的假设 vars <- unique(sub("(.*):", "", coef_names)) hypo_list <- paste0(cat1, ":", vars, " = ", cat2, ":", vars) # 执行Wald检验 res <- linearHypothesis(mlogit_model, hypo_list) # 整理结果 data.frame( 类别1 = cat1, 类别2 = cat2, 卡方值 = res$Chisq[2], 自由度 = res$Df[2], P值 = res$`Pr(>Chisq)`[2] ) }) # 合并所有结果 do.call(rbind, test_results) } # 使用示例:输出所有类别对的检验结果 mlog_combine_test(mlogit_model)
关键说明
- 多分类logit模型的基准类别无法参与合并检验(因为其系数被设为0,无比较意义)
- 检验的核心逻辑是:若无法拒绝“两个类别对应所有自变量系数相等”的原假设,则说明这两个类别可以合并
内容的提问来源于stack exchange,提问作者PCK1992
相关产品推荐
相关产品推荐

