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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:57:10