如何添加虚拟变量与连续变量交互项及面板回归中大学特定线性时间趋势?
问题解答
1. 虚拟变量与连续变量的交互项添加方法
在plm中添加虚拟变量和连续变量的交互项,有两种实用方式:
- 仅添加纯交互项:用
:运算符,比如虚拟变量block1(二分类/多分类)和连续变量instatetuition的交互,写法为block1:instatetuition。这种方式只加入交互项,适合主效应已经在模型里的场景。 - 同时添加主效应+交互项:用
*运算符,写法为block1*instatetuition,等价于block1 + instatetuition + block1:instatetuition,适合还没加入主效应的情况。
示例代码片段:
# 仅加纯交互项(主效应已在模型中) model <- plm(gradrate4yr ~ block1 + instatetuition + block1:instatetuition + block2 + faculty + costs + per_urm + per_white + per_fem + as.factor(unitid) + as.factor(year), data = gradeData, model = 'within', weights = meansize) # 加主效应+交互项 model <- plm(gradrate4yr ~ block1*instatetuition + block2 + faculty + costs + per_urm + per_white + per_fem + as.factor(unitid) + as.factor(year), data = gradeData, model = 'within', weights = meansize)
2. 面板回归中加入大学特定线性时间趋势的正确实现
你的核心问题是没把year作为连续变量构建个体特定趋势,另外要注意:plm的within模型已经自动控制了个体固定效应,不需要手动在公式里加as.factor(unitid),重复添加会造成冗余甚至报错。
正确做法是:把year作为连续变量,与unitid(转为因子型)构建交互项factor(unitid):year,这样每个大学都会有专属的时间趋势斜率。
修正后的完整代码:
model <- plm(gradrate4yr ~ block1 + block2 + instatetuition + faculty + costs + per_urm + per_white + per_fem + factor(unitid):year + as.factor(year), data = gradeData, model = 'within', weights = meansize)
关键说明:
- 移除了
as.factor(unitid):model='within'通过去均值处理已经控制了个体固定效应,重复添加会引发多重共线性。 factor(unitid):year:year作为连续变量,这个交互项代表每个大学独有的线性时间趋势,每个unitid对应一个year的系数,实现大学特定的时间趋势控制。- 保留
as.factor(year):用来控制年度固定效应,捕捉所有大学共有的时间冲击。
内容的提问来源于stack exchange,提问作者Ohrwurm
相关产品推荐
相关产品推荐

