मुझे यादृच्छिक प्रभाव लॉगिट मॉडल से औसत सीमांत प्रभावों को पुन: उत्पन्न करने में दिलचस्पी है (स्टाटा में xtlogit का उपयोग करके चलाएं)। मैं समझता हूं कि डेल्टा पद्धति का उपयोग करके 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 द्वारा रिपोर्ट किए गए अनुमानों को पुन: प्रस्तुत करने में दिलचस्पी है

3
Eunice 3 नवम्बर 2020, 07:04

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) करता है)। यह आरई को उसके औसत पर सेट करता है, जो कि आपके मन में नहीं हो सकता है। बेशक, $u_i$ को xtlogit, re द्वारा देखा या अनुमानित भी नहीं किया गया है, इसलिए यदि आप predict(pr) क्या दोहराना चाहते हैं, तो आपको अनुमानित विचरण का उपयोग करके बिना शर्त संभावना प्राप्त करने के लिए यादृच्छिक प्रभाव को एकीकृत करने की आवश्यकता है। .

स्टाटा में ऐसा करने का एक तरीका उपयोगकर्ता द्वारा लिखित 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)) का उपयोग करते हैं तो आप शायद और भी बेहतर सटीकता प्राप्त कर सकते हैं।

माता, पायथन, या यहां तक ​​​​कि सिमुलेशन दृष्टिकोण के साथ ऐसा करने का एक और अधिक कुशल तरीका हो सकता है, लेकिन मैं इसे काम करने के लिए आप पर छोड़ दूंगा। आप xtmelogit का उपयोग करके आरई के पश्च मोडल अनुमान भी प्राप्त कर सकते हैं।

3
Dimitriy V. Masterov 4 नवम्बर 2020, 12:09