因子变量的边际效应

时间:2016-09-21 19:11:38

标签: stata logistic-regression

在Stata中使用logit后的边际效果时,为什么我会得到不同的结果,具体取决于我如何指定因子变量。

例如

    sysuse auto
    gen expensive=0
    replace expensive=1 if price>=4000
    qui logit expensive i.foreign 
    margins, dydx(foreign)

    qui logit expensive foreign
    margins, dydx(foreign)

我得到的是其中一个对外国人的边际效应,而另一个人对外国人的影响。我只是不清楚为什么会发生这种情况,我以前会认为这些都是一样的。

任何帮助将不胜感激。最重要的是,哪一个是正确的?

1 个答案:

答案 0 :(得分:1)

这就是Stata在引擎盖下做的事情(双关语):

sysuse auto, clear
gen expensive=0
replace expensive=1 if price>=4000
logit expensive i.foreign, coefl
predict phat, pr

/* Change in Pr(Expensive) for a tiny change in foreign */
margins, dydx(foreign) continuous // this is like your second spec
gen double me_foreign = phat*(1-phat)*_b[1.foreign]
sum me_foreign

/* Discrete change in Pr(Expensive) for when foreign goes from all 1 to all 0 */
margins, dydx(foreign)
replace foreign=1
predict phat1, pr
replace foreign=0
predict phat0, pr
gen double fd_foreign = phat1 - phat0
sum fd_foreign

如果省略i.前缀,Stata会计算出昂贵概率的变化,因为外国的变化很小。您可以通过将continuous选项添加到margins, dydx()而不是拟合第二个模型来模仿它。 Stata计算每次观察相对于外国人的预测概率昂贵的导数,然后取平均值。这没有多大意义,因为它不符合明智的操纵。外来是二元的,但是导数给你外国的一个小变化的概率变化,好像它是连续的。在线性模型中,这种差异并不重要,但在非线性模型中它可以。

使用前缀i.,Stata计算预测概率之间的有限差异,就好像每辆汽车都是外国减去预测的概率,就像每辆汽车都是在国内生产一样,然后取平均值。对于二元变量,这可能更明智。另一方面,这里(以及许多实证应用中)的差异并不大,你经常看到人们做前者而不是后者。