R:在回归中使用具有较少观察值的变量(plm)

时间:2017-12-08 03:29:56

标签: r plm

我一直试图解决这个问题一段时间没有运气。基本上,我正在做的是在一些面板数据上的两阶段最小二乘法。要做到这一点,我使用的是plm包。我想做的是

  1. 做2SLS
  2. 从1中获取2SLS的残差。
  3. 在不同的2SLS中使用这些残差作为工具
  4. 我遇到的问题是,在第一个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)]),])
    

    如果您还有其他需要,请告诉我。

1 个答案:

答案 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跳过任何内容。