在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
相关产品推荐
相关产品推荐

