R语言plm包强制回归截距为0后系数未变的问题排查
问题分析与解决方案
你遇到的核心问题是面板数据索引设置错误,导致plm无法正确识别面板结构,进而使得无截距回归的系数计算出现异常(看似与带截距回归系数一致)。
错误点排查
你的代码中,在创建面板数据时使用了错误的年份列名:
pdata_Table2overall <- pdata.frame(Table2overall, index = c("Company_name", "Data_Year"))
数据框中的年份列实际名为Year,但你写的是Data_Year,这会导致plm无法正确按公司-年份的面板结构分组,回归计算逻辑出现偏差,最终表现为无截距回归的系数未发生预期变化。
修正步骤
1. 修正面板数据索引
将index参数中的"Data_Year"改为数据中实际存在的列名"Year":
pdata_Table2overall <- pdata.frame(Table2overall, index = c("Company_name", "Year"))
2. 重新运行无截距回归
执行修正后的代码后,plm会正确识别面板结构,此时无截距回归的系数会与带截距回归产生差异。
验证测试
使用你提供的测试数据,修正索引后运行回归:
- 带截距回归:
plm(AEG_BV ~ AEG_BVlag, data = pdata_Table2overall) - 无截距回归:
plm(AEG_BV ~ 0 + AEG_BVlag, data = pdata_Table2overall)
计算可得:
- 带截距回归的斜率系数约为0.964,截距约为**-0.00185**
- 无截距回归的斜率系数约为0.9197
两者系数明显不同,符合预期。
补充说明
生成滞后项后每个公司的第一行观测会出现NA,plm默认会自动剔除这些缺失值,这是正常行为,不影响回归逻辑。
内容的提问来源于stack exchange,提问作者oreka97
相关产品推荐
相关产品推荐

