为什么 ppmlhdfe 对于手动交互的变量给出不同的结果?

问题描述 投票:0回答:2

我正在使用

ppmlhdfe
和两个虚拟变量以及它们之间的相互作用进行回归。其构造如下:

gen interaction = D1*D2 
ppmlhdfe y D1#D2 control i.year, vce(robust)
ppmlhdfe y D1 interaction D2 control i.year, vce(robust)

我进行此比较主要是为了查看结果是否相同,因为

esttab
输出和标记第一个版本的方式有点丑陋且令人困惑。然而,虽然第二个版本中 D1 和 D2 的系数与第一个版本中 D1 = 1、D2 = 0 和 D1 = 0、D2 = 1 的系数匹配,但交互作用项完全不同 - 符号错误、大小错误、显着性错误。在第一个版本中但在第二个版本中微不足道。第一个版本中明确输出的 D1 = 0、D2 = 0 上的系数由于共线性而被省略,所以我觉得结果应该是相同的。我已使用
reg
命令重新运行此命令,以确保这不是 ppml 问题,但同样的事情发生了。我还尝试添加虚拟变量和交互作为显式因子变量:

ppmlhdfe y i.D1 i.interaction i.D2 control i.year, vce(robust)

但结果并没有改变。

我发现了对类似问题的这个回答,但使用了手册和连续交互术语,这与我的情况有点不同。无论如何,我尝试应用它,生成第一个虚拟变量的两个级别并与另一个虚拟变量进行交互,如下所示:

tab D1, gen(d)
gen d1D2 = d1*D2
gen d2D2 = d2*D2
ppmlhdfe y D1 D2 d1D2 d2D2 control i.year, vce(robust)

但是发生的情况是,由于共线性,d2D2 被省略了——这并不奇怪——结果是相同的。有谁知道这是为什么吗?

EDIT1:最小可行示例-

sysuse auto.dta, clear
gen high_price = 0
replace high_price = 1 if price>6165
gen interaction = high_price*foreign 
ppmlhdfe trunk high_price interaction foreign headroom, vce(robust)
ppmlhdfe trunk high_price#foreign headroom, vce(robust)

EDIT2:请注意,我也回复了上面提到的 Stata 帖子,因为我在此处发帖后意识到那里可能有更多 Stata 特定的帮助。

regression stata interaction dummy-variable
2个回答
0
投票

我尝试遵循 Jeff Wooldridge 和 Carlo Lazzaro 收到的关于 Statalist 的建议

ppmlhdfe trunk high_price##foreign headroom, vce(robust)

ppmlhdfe trunk high_price c.high_price#c.foreign foreign headroom, vce(robust)

两者都产生与手动交互项相同的结果。仍然不确定单个 # 的情况如何,但我得出的结论是使用 ## 更好。


0
投票

在这里,当您运行 i.D1#i.D2 时,对于 - 1.D1#0.D2、0.D1#1.D2 和 1 的每个组合,基数设置为 0.D1#0.D2。 D1#1.D2。因此,当您运行 i.D1#i.D2 时,您观察到的 1.D1#1.D2 效果实际上等于效果之和 - D1 + D2 + D1#D2。

© www.soinside.com 2019 - 2024. All rights reserved.