我一直试图解决这个问题一段时间没有运气。基本上,我正在做的是在一些面板数据上的两阶段最小二乘法。要做到这一点,我使用的是plm包。我想做的是
我遇到的问题是,在第一个2SLS中,使用的观测数量少于数据集中的总观测数,因此我的残差向量很短,我得到以下错误
model.frame.default中的错误(术语(公式,lhs = lhs,rhs = rhs,data = data,: 变量长度不同(找到' ivreg.2.a $ residuals')
以下是我试图参考的代码,如果您需要更多详细信息,请告诉我。我真的只需要我的残差向量与第一个2SLS中使用的数据长度相同。作为参考,我的数据有1713个观测值,但是,在回归中只使用了1550个,因此我的残差向量是1550.我的两个2SLS回归的代码如下。
ivreg.2.a = plm(formula = diff(loda) ~ factor(year)+diff(lgdp) | index_g_l + diff(lcru_l) + diff(lcru_l_sq) + factor(year), index = c("country", "year"), model = "within", data = panel[complete.cases(panel[, c(1,2,3,4,5,7)]),])
ivreg.2.a = plm(formula = diff(lgdp) ~ factor(year)+index_g_l + diff(lcru_l) + diff(lcru_l_sq) + diff(loda)| index_g_l + diff(lcru_l) + diff(lcru_l_sq) + factor(year) + ivreg.2.a$residuals, index = c("country", "year"), model = "within", data = panel[complete.cases(panel[, c(1,2,3,4,5,7)]),])
如果您还有其他需要,请告诉我。
答案 0 :(得分:2)
我假设删除了163个观察值,因为它们在一个相关变量中有keepSynced()
。 R中的大多数NA
函数都有一个*lm
参数,可用于填充残差以纠正长度。例如,当缺少观察3时,
na.action
然而,residuals(lm(formula, data, na.action=na.omit)) # 1 2 4
residuals(lm(formula, data, na.action=na.exclude)) # 1 2 NA 4
的文档说这个参数“目前还没有得到完全支持”,所以如果你只是先将这些1550行过滤到一个新的数据帧,然后对它进行所有后续工作就会更简单一些。
顺便说一句,如果plm
的行为与plm
相同,则您无需指定lm
即可使用,因为它应该只使用complete.cases
s跳过任何内容。