3

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

*** 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

4

1 回答 1

3

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

$$\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 设置为其平均值,这可能不是您所想的。当然,$u_i$ 没有被观察到,甚至没有被 估计xtlogit, re,所以如果你想复制什么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 甚至模拟方法可能有更有效的方法来完成此操作,但我将由您自己解决。您还可以使用 获得 RE 的后验模态估计xtmelogit

于 2020-11-04T09:02:29.047 回答