我已经试着处理这件事有一段时间了,没有运气。本质上,我所做的是对一些面板数据的两阶段最小二乘法。为此,我使用plm软件包。我想做的是
我的问题是,在第一个2 2SLS中,所使用的观测数少于数据集中的总观测值,所以我的残差向量很短,我得到了以下误差
Model.frame.default中的错误(公式,lhs = lhs,rhs = rhs,data = data,变量长度不同(“ivreg.2.a$残留物”))
这是我试图运行的代码,以便参考,如果您需要更多的详细信息,请告诉我。我真的需要我的剩余向量是相同的长度,在第一个2 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)]),])如果你还需要什么就告诉我。
发布于 2017-12-08 11:42:01
我假设这163个观测值被删除,因为它们在一个相关变量中有NA。R中的大多数*lm函数都有一个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然而,plm的文档表示,这个参数“目前还不完全支持”,因此,如果您首先将这1550行过滤到一个新的dataframe中,并完成所有后续工作,就会更简单。
顺便说一句,如果plm的行为类似于lm,那么您不需要指定complete.cases才能工作,因为它应该跳过NA的任何操作。
https://stackoverflow.com/questions/47707281
复制相似问题