Logit模型两种边际效应计算方法的差异疑问
Logit边际效应两种方法的数值差异原因
核心差异:边际效应的计算基准点完全不同
logitmfx默认计算的是均值处的边际效应(MEM):先把所有自变量取均值代入模型,得到对应的预测概率p_mean,再用公式β * p_mean*(1-p_mean)计算边际效应——相当于只在“平均观测值”这一个点上算效应。marginaleffects包的slopes函数默认计算的是平均边际效应(AME):先给每一条观测数据单独计算边际效应(用该观测的自变量值算出p_i,再算β * p_i*(1-p_i)),最后把所有观测的边际效应取平均值——相当于对整个样本的效应做平均。
其他可能的差异来源
- 固定效应的处理:
feglm是专门用于拟合固定效应非线性模型的工具(用偏似然估计),如果你用logitmfx时没有正确加入相同的固定效应(比如没加虚拟变量或者用了不同的固定效应处理方式),模型的系数β本身就会有差异,进而导致边际效应数值不同。 - 计算细节的差异:两个包在处理数值精度、导数计算的小细节上可能有细微差别,但这通常不会导致“显著差异”,核心还是基准点的问题。
- 固定效应的处理:
验证方法
- 如果你把
slopes的计算基准改成均值处,结果会和logitmfx默认值对齐:用slopes(model, newdata = datagrid()),datagrid()默认会取所有自变量的均值生成一个虚拟观测,计算该点的边际效应。 - 反过来,把
logitmfx改成计算AME:设置参数atmean = FALSE,此时它会对每个观测计算边际效应再平均,结果会和slopes默认值一致。
- 如果你把
内容的提问来源于stack exchange,提问作者elongat
相关产品推荐
相关产品推荐

