如何用R的margins包复现Stata的分组边际效应输出?
复现Stata
margins i.group, atmeans 的R实现 问题核心
Stata的margins i.group, atmeans会在所有协变量取样本均值的条件下,计算group(即你的x1)每个水平对应的原始尺度预测值(泊松模型下就是预期发生数)。R的margins包默认输出链接尺度(log)的结果,这是导致你看到差异的主要原因。
解决方案
方法1:使用margins包
先确保安装并加载包,然后指定参数获取原始尺度的预测值,同时让其他协变量取均值:
# 安装并加载包 install.packages("margins") library(margins) # 计算除x1外其他协变量的均值 cov_means <- colMeans(data[, setdiff(names(data), "x1")], na.rm = TRUE) # 生成x1各水平的预测值,其他协变量取均值 margins_result <- margins(glm.model, predictions = TRUE, type = "response", at = c(list(x1 = unique(factor(data$x1))), cov_means)) # 查看结果 summary(margins_result)
方法2:使用emmeans包(更贴合Stata逻辑)
emmeans包专门用于计算边际均值,语法更直观:
# 安装并加载包 install.packages("emmeans") library(emmeans) # 计算x1各水平的边际均值(其他协变量取均值,原始尺度) emmeans_result <- emmeans(glm.model, ~ x1, type = "response") # 查看结果 summary(emmeans_result)
结果说明
两种方法的输出结果会和Stata一致:
emmeans包的emmean列、margins包的fit列,就是每个x1组的预期发生数- 附带的标准误、置信区间也会和Stata对应输出匹配
内容的提问来源于stack exchange,提问作者user27842288
相关产品推荐
相关产品推荐

