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

在R中用margins包复现Stata的平均离散概率效应分析可行吗?

用R的margins包复现Stata的margins命令效果

完全可以复现Stata中margins, at(age=(25(5)65)) over(sports)的分析逻辑,核心是利用margins包的at和by参数对应Stata的同名设定,以下是具体步骤:

1. 先明确Stata命令的含义

你给出的Stata命令是:在sports的不同分组下,计算当age取25、30、35…65时,运动行为(sports)对结果变量的平均离散概率效应(即离散变量的边际效应,也就是sports取值变化时对应的概率变化量)。

2. R中的复现代码

假设你的数据框为df,结果变量是二分变量y(对应Stata中的被解释变量),sports是离散分组变量(比如0/1或多分类),age是连续控制变量,这里以常用的logit模型为例:

步骤1:拟合基础模型

library(margins)
# 拟合logit模型(和Stata的logit命令对应)
model <- glm(y ~ sports + age, family = binomial(link = "logit"), data = df)

步骤2:计算指定条件下的离散概率效应

用margins()函数,通过at参数指定age的取值序列,by参数对应Stata的over(sports)分组,variables参数明确计算sports的边际效应:

# 生成age的取值序列:25到65,步长5
age_vals <- seq(25, 65, 5)

# 计算分组下的边际效应
result <- margins(model,
                  at = list(age = age_vals),
                  by = "sports",
                  variables = "sports")

# 查看格式化结果
summary(result)

补充:若需预测概率而非边际效应

如果你的Stata命令实际是计算不同sports组、不同age下的预测概率(而非边际效应),可以用predictions()函数:

pred_probs <- predictions(model,
                          at = list(age = age_vals),
                          by = "sports")

print(pred_probs)

关键参数说明

  • at = list(age = age_vals):完全对应Stata的at(age=(25(5)65)),指定需要计算的age取值点
  • by = "sports":对应Stata的over(sports),按sports分组输出结果
  • variables = "sports":明确指定计算sports的边际效应,对应Stata中默认的离散变量边际效应计算逻辑

内容的提问来源于stack exchange,提问作者Noicel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:27