使用R中plm包的within模型时丢失年度虚拟变量及观测值的问题
伍德里奇《计量经济学导论》C3i习题R代码问题解析
问题重现
我正在完成伍德里奇《计量经济学导论》中的C3i习题,运行以下R代码:
library(wooldridge) library(plm) jtrain.p <- pdata.frame(jtrain,index=c("fcode","year")) fereg <- plm(hrsemp~d88+d89+grant+lag(grant)+log(employ),data=jtrain.p,model="within") summary(fereg)
得到的输出显示有一个系数因奇异值被丢弃,观测值为261(n=135,T=1-2),但教材答案中观测值为390(n=135,T=3),且包含d88、d89两个年度虚拟变量的系数。请问为何会丢失一个年度虚拟变量,观测值为何减少,是否与模型缺失值处理方式有关?
问题解答
1. 年度虚拟变量被丢弃的原因
你使用的是plm包的个体固定效应(within)模型,这类模型会对每个个体的变量做「去均值」变换,以此消除个体层面的固定异质性。
原数据覆盖1987、1988、1989三年,d88和d89是代表后两年的虚拟变量,隐含基准组为1987年。在去均值变换后,三个年度虚拟变量的离均差会出现完全多重共线性(对每个个体来说,三年虚拟变量的和恒为1,变换后依然满足线性相关关系)。为了保证模型可识别,plm会自动丢弃其中一个虚拟变量。
而教材答案保留了两个年度虚拟变量,说明教材采用的是混合OLS回归(而非个体固定效应模型),或是在固定效应模型中未同时纳入所有年度虚拟变量(仅以某一年为基准,未触发共线性)。
2. 观测值减少的原因
观测值从390降到261,主要来自两个因素:
- 滞后变量
lag(grant):使用滞后变量会自动丢弃每个个体的第一个观测值(无前期数据可参考),直接减少一批样本。 log(employ)的缺失值:原数据中employ(企业雇佣人数)存在缺失值,计算对数后这些值会被标记为NA,进一步筛选掉无效样本。
两者共同作用,最终有效观测数降至261。
3. 缺失值处理的影响
plm拟合模型时默认采用列表删除法:只要某条观测的因变量、自变量(包括滞后变量)存在任何缺失值,就会直接删除整条观测。这是观测值减少的核心机制——滞后变量导致的首年样本丢失,加上log(employ)的缺失值,共同筛选出了261个有效观测。
内容的提问来源于stack exchange,提问作者AKJ
相关产品推荐
相关产品推荐

