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

求问:是否存在类似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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:15:25