R语言如何为两组设置相同时期效应 修正lm与plm模型共线性问题
基础线性模型问题解决
现有模型输出说明
你当前运行的lm代码输出的factor(yr_survey)系数默认就是两组共用的全局时期效应,不存在分组估计的情况——只有当你在模型中加入college * factor(yr_survey)交互项时,才会估计两组异质的时期效应。
你当前模型的核心问题是yr_entry = yr_survey - yr_edu带来的精确共线性,R会自动剔除三个变量中的某一个的系数,你可以直接查看回归结果中标记为NA的项确认被自动剔除的变量。
满足约束的调整方案
要严格实现「时期效应仅基于非大学教育群体估算、两类群体时期效应完全一致」的要求,同时解决共线性问题,可以用两阶段估计法:
- 第一阶段仅使用未受过大学教育的样本估计时期效应:
# 第一阶段:非大学样本估计时期效应 mod_stage1 <- lm(wage ~ age + woman + yr_edu + yr_entry + factor(yr_survey), data = data[data$college == 0, ]) # 提取调查年份的时期效应,匹配到全样本 data$yr_effect <- predict(mod_stage1, newdata = transform(data, wage = 0, age = 0, woman = 0, yr_edu = 0, yr_entry = 0), type = "terms")[, "factor(yr_survey)"]
- 第二阶段使用全样本回归,将已经估计完成的时期效应作为控制变量放入模型,不再单独加入调查年份哑变量:
mod_stage2 <- lm(wage ~ college * age + woman + yr_edu + yr_entry + yr_effect, data = data)
随机效应面板模型调整方法
把上述两阶段逻辑适配到plm框架即可,操作如下:
- 第一阶段用非大学教育样本估计时期效应,可根据需求选择第一阶段用混合回归或随机效应:
# 第一阶段:非大学样本估计时期效应,随机效应设定 mod_plm_stage1 <- plm(wage ~ age + woman + yr_edu + yr_entry + factor(yr_survey), data = data[data$college == 0, ], index = c("id", "year"), model = "random") # 提取时期效应匹配到全样本 data$yr_effect <- predict(mod_plm_stage1, newdata = transform(data, wage = 0, age = 0, woman = 0, yr_edu = 0, yr_entry = 0), type = "terms")[, "factor(yr_survey)"]
- 第二阶段跑全样本随机效应模型:
mod_plm_stage2 <- plm(wage ~ college * age + woman + yr_edu + yr_entry + yr_effect, data = data, index = c("id", "year"), model = "random")
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

