因子变量的边际效应

Marginal Effects of Factor variables

在 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.foreign 方面。我只是不清楚为什么会这样,我之前认为这些是同一回事。

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

以下是 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 为每次观察计算相对于外国昂贵的预测概率的导数,然后取平均值。这不太合理,因为它不符合明智的操作。 Foreign是二元的,但是导数给了你foreign的一个小变化概率的变化,就好像它是连续的一样。在线性模型中,这种差异无关紧要,但在非线性模型中却可以。

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