首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么ppmlhdfe给出了手动交互变量的不同结果?

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

Stack Overflow用户
提问于 2022-01-19 22:03:36
回答 1查看 204关注 0票数 0

我正在使用带有两个虚拟变量的ppmlhdfe运行一个回归,以及它们之间的交互。其结构如下:

代码语言:javascript
运行
复制
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问题,但是发生了同样的事情。我还尝试将虚拟和交互作为显式因子变量添加:

代码语言:javascript
运行
复制
ppmlhdfe y i.D1 i.interaction i.D2 control i.year, vce(robust)

但结果并没有改变。

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

代码语言:javascript
运行
复制
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:最起码可行的例子-

代码语言:javascript
运行
复制
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:请注意,我也回复了上面提到的Statalist的帖子,因为我在这里发帖后意识到,可能会有更多针对Stata的帮助。

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 17:07:19

根据杰夫·伍尔德里奇和卡洛·拉扎罗关于“史泰斯特”的建议,我尝试了

代码语言:javascript
运行
复制
ppmlhdfe trunk high_price##foreign headroom, vce(robust)

代码语言:javascript
运行
复制
ppmlhdfe trunk high_price c.high_price#c.foreign foreign headroom, vce(robust)

两者产生的结果与手动交互术语相同。仍然不确定单一#到底是怎么回事,但我得出结论,最好使用##。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70778330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档