为何使用lm函数的固定效应回归未剔除时间不变变量?
个体固定效应回归中plm与lm处理时间不变变量的差异原因
个体固定效应回归本应剔除时间不变变量(这类变量会被个体固定效应吸收),但使用plm函数时符合预期,lm函数却未剔除该类变量,原因可从两者的实现机制差异解释:
模拟数据与回归代码
首先是生成的面板数据代码:
X = rnorm(9,0,1) Y = 2*X df <- data.frame( X, Y, Z = c(1, 1, 1, 0, 0, 0, 0, 0, 0), id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), t = c(1, 2, 3, 1, 2, 3, 1, 2, 3) )
用plm执行双向固定效应回归:
plmfit <- plm(Y~X+Z, index = c("id", "t"), effect = "twoways", model = "within", data = df) summary(plmfit)
输出未报告时间不变变量Z,符合预期。
用lm执行包含个体/时间虚拟变量的回归:
lmfit <- lm(Y~X+Z+factor(id)+factor(t),data=df) summary(lmfit)
输出中时间不变变量Z未被剔除,需解释这一现象。
核心原因:两者实现固定效应的机制不同
plm的within模式:本质是对每个个体的所有变量做组内去均值变换——用变量的每个观测值减去该个体的变量均值。时间不变变量Z在同一个体的所有时间点取值相同,去均值后所有观测值都会变成0,因此回归时会被自动剔除,不会出现在结果中。
lm的虚拟变量模式:通过
factor(id)直接引入个体虚拟变量,此时Z与个体虚拟变量存在完全多重共线性(比如你的数据中Z=1仅对应id=1,和id=1的虚拟变量取值完全一致)。但R的lm函数默认不会主动剔除共线性变量,它会保留所有输入变量,仅将无法识别的系数标记为NA。你可以查看lmfit的结果,会发现Z或某个个体虚拟变量的系数为NA,这就是多重共线性导致的系数不可估计,只是lm没有像plm那样直接剔除变量。
内容的提问来源于stack exchange,提问作者Leonardo19
相关产品推荐
相关产品推荐

