如何计算使用nnet包构建的多分类logit模型的边际效应?
多分类logit边际效应获取方案
你当前只拿到1个类别的边际效应属于margins包的默认参数设置问题,不是操作错误,两类可行实现方式如下:
方案1:修正margins包调用参数
margins包的marginal_effects()函数处理nnet::multinom生成的多分类模型时,默认仅输出首个非参照类的边际效应,通过category参数指定目标类别即可输出对应结果:
- 单类别边际效应获取示例:
# 假设你的模型名为mod,因变量灌溉类型的类别为c("无灌溉","地面灌溉","滴灌") me_drip <- marginal_effects(mod, category = "滴灌")
- 批量获取三类边际效应示例:
library(margins) # 提取因变量所有类别 irr_categories <- levels(your_data$irrigation_type) # 循环计算每个类别的边际效应 me_list <- lapply(irr_categories, function(cat) { marginal_effects(mod, category = cat) }) # 给列表元素命名对应类别 names(me_list) <- irr_categories
调用后me_list的三个元素分别对应三类灌溉类型的全样本边际效应,使用summary()可输出平均边际效应结果。
方案2:使用marginaleffects包(更推荐)
marginaleffects是margins包的继任维护版本,对多分类模型的支持更完善,默认直接返回所有类别的边际效应,无需额外参数设置:
library(marginaleffects) # 获取每条观测对应三个类别的边际效应 me_observation <- marginaleffects(mod) # 直接获取常用的平均边际效应(AME)汇报结果 me_ame <- avg_slopes(mod)
返回结果会自动通过group列区分三类灌溉类型,自带标准误、显著性检验结果,可直接用于分析汇报。
结果校验规则
多分类logit模型的边际效应天然满足:同一自变量对所有类别的边际效应之和为0,你可通过该规则快速验证计算结果是否正确。
内容的提问来源于stack exchange,提问作者Charlotte
相关产品推荐
相关产品推荐

