【问题标题】:How to reproduce average marginal effects from xtlogit model如何从 xtlogit 模型重现平均边际效应
【发布时间】:2021-02-15 18:23:14
【问题描述】:

我有兴趣从随机效应 logit 模型(在 Stata 中使用 xtlogit 运行)再现平均边际效应。我了解如何使用 Delta 方法从 logit 模型中重现平均边际效应。例如,在下面的代码中,我成功地重现了 margins 中报告的 age 的平均边际效应。

*** Stata code
* download data
webuse union, clear

* calculate delta and copy variable of interest - age
sum age
gen xdelta = r(sd)/1000
clonevar age_ = age

* run logit model and calculate average marginal effect using margins
logit union age_
margins,dydx(age_)

* calculate average marginal effect by hand - mean of xme equals result from margins above
predict p1
replace age_ = age_+xdelta
predict p2
gen xme = (p2 - p1) / xdelta
sum xme

* calculate average marginal effect at fixed value of age using margins
margins,at(age=(16))

* calculate average marginal effect by hand - mean of p3 equals result from margins above
replace age_ = 16
predict p3
sum p3

我苦苦挣扎的地方是重现 xtlogit 模型的平均边际效应。

*** Stata code
* download data and designate panel variables
webuse union, clear
xtset idcode year

* run xtlogit model
xtlogit union age

* calculate average marginal effects - can't figure out how to reproduce these estimates :(
margins, dydx(*)
margins, at(age=(16))

非常感谢任何有关如何重现xtlogit 边际效应的帮助。谢谢!

----- 编辑以更清楚地表明我有兴趣复制margins报告的估计值

【问题讨论】:

  • 当您询问如何“手动”计算时,不清楚。在您的成功示例中,“手工”完成的工作并不多。如果您对 xtlogit, re Cameron & Trivedi 2010 第 630 页具有良好起点并推荐估算方法后的边距如何工作感兴趣。
  • 非常感谢您的评论。我猜“手工”不是正确的短语——我的意思是我想重现或复制margins 报告的边际效应。我修改了我的问题。另外,我会查看您传递的参考资料!

标签: stata logistic-regression random-effects marginal-effects


【解决方案1】:

有几种方法可以做到这一点,但基本上问题归结为事实

$$\Pr(y_{it}=1 \vert x_{it})=\int\Lambda(u_i + x_{it}'\beta)\cdot \varphi(0,\sigma_u^2) du_i $$

其中 $\varphi()$ 是正常密度。在您的代码中,您有效地将随机效应 $u_i$ 设置为零(这是 predict(pu0) 所做的)。这会将 RE 设置为其平均值,这可能不是您所想的。当然,xtlogit, re 没有观察到甚至估计 $u_i$,所以如果你想复制 predict(pr) 所做的事情,你需要将随机效应积分出来,使用估计的方差得到无条件概率。

在 Stata 中执行此操作的一种方法是使用用户编写的 integrate 命令进行一维数值积分,如下所示:

webuse union, clear
xtset idcode year
xtlogit union age, nolog
margins, at(age=(16)) predict(pr)
margins, dydx(*) at(age=16) predict(pr)
capture ssc install integrate
/* phat at age 16 */
integrate, f(invlogit(x - 3.0079682 + .01929225*16)*normalden(x,0,2.477537654945496)) l(-10) u(10) vectorise quadpts(1000)
/* ME at age 16 */
integrate, f(invlogit(x - 3.0079682 + .01929225*16)*(1-invlogit(x - 3.0079682 + .01929225*16))*(.01929225)*normalden(x,0,2.477537654945496)) l(-10) u(10) vectorise quadpts(1000)

如果您使用实际系数(如 _b[_cons] 和 e(sigma_u))而不是粘贴值,您可能会获得更好的精度。

使用 Mata、Python 或什至使用模拟方法可能会有更有效的方法来执行此操作,但我会留给您自己解决。您还可以使用 xtmelogit 获得 RE 的后验模态估计。

【讨论】:

  • 我总是忘记 SO 不支持 LaTeX。如果有任何不清楚的地方,请告诉我。
  • 这非常有帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 2020-05-07
  • 2019-06-02
  • 1970-01-01
  • 2021-07-03
  • 2014-12-15
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多