Stata 如何从xtlogit模型复制平均边际效应

Stata 如何从xtlogit模型复制平均边际效应,stata,logistic-regression,random-effects,marginal-effects,Stata,Logistic Regression,Random Effects,Marginal Effects,我对从随机效应logit模型(使用xtlogit在Stata中运行)复制平均边际效应感兴趣。我了解如何使用Delta方法从logit模型中重现平均边际效应。例如,在下面的代码中,我成功地重现了边距中报告的年龄的平均边际效应 *** Stata code * download data webuse union, clear * calculate delta and copy variable of interest - age sum age gen xdelta = r(sd)/1000

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

*** 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
边际效果的任何帮助。谢谢大家!


-----编辑的目的是为了更清楚地表明我有兴趣复制
边距报告的估计值

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

$$\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_))而不是将值粘贴到中,可能会获得更好的精度


也许有一种更有效的方法可以使用Mata、Python甚至是模拟方法来实现这一点,但我将让您自己来解决这个问题。当您询问如何“手动”计算时,您还可以使用
xtmelogit

获得REs的后验模态估计值,但不清楚。在你成功的例子中,没有多少是“手工”完成的。如果您对
xtlogit之后的页边距工作方式感兴趣,re
630页有一个很好的起点,并推荐了一种估算方法。非常感谢您的评论。我想“用手”不是正确的说法——我的意思是我想复制或复制
边距
报告的边际效应。我修改了我的问题。另外,我会查看你传递的参考资料!我总是忘记,所以不支持乳胶。如果有任何不清楚的地方,请告诉我。这非常有帮助。非常感谢。