当数据为NA时,使用plm包和twoways效果进行回归

时间:2016-12-08 17:35:36

标签: r regression panel-data plm

因此,我希望使用双向效果对面板数据进行时间和存储的回归。如果面板完美平衡,它可以正常工作,但由于某些原因,如果不是,代码就会卡住。 (见:https://stat.ethz.ch/pipermail/r-help/2010-May/239272.html)。

我的数据本质上并不是不平衡的,但它有一些NAs,所以我猜它在plm函数删除NA的行时变得不平衡。 我写了一个示例代码来举例说明我的数据。

如果我这样做:

set.seed(123)
library(plm)
number.of.days <- 1100
number.of.stores <- 1000
days <- sort(rep(c(1:number.of.days),number.of.stores))
stores <- rep(c(1:number.of.stores),number.of.days)

data <- cbind.data.frame(stores,days,matrix(rnorm(number.of.days*number.of.stores*7),nrow=number.of.days*number.of.stores,ncol=7))
colnames(data)[3:9] <- c('y',paste0('x',1:6))

data <- plm.data(data,c("stores","days"))  
fit <- plm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data, index=c("stores","days"), effect="twoway", model="within")

它工作正常,因为面板是平衡的。但是,如果我创建一些NA值:

data$y[sample(1:number.of.days*number.of.stores,150)] <- NA
data$x1[sample(1:number.of.days*number.of.stores,150)] <- NA
data$x2[sample(1:number.of.days*number.of.stores,150)] <- NA
data$x3[sample(1:number.of.days*number.of.stores,150)] <- NA
data$x4[sample(1:number.of.days*number.of.stores,150)] <- NA
data$x5[sample(1:number.of.days*number.of.stores,150)] <- NA
data$x6[sample(1:number.of.days*number.of.stores,150)] <- NA

并尝试再次运行回归:

 fit <- plm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data, index=c("stores","days"), effect="twoway", model="within")

它不起作用。

我尝试使用&#39;个人&#39;对于商店的效果以及添加一个带有假人的矩阵的时间,但是因为有1100天,它变得同样缓慢。

我认为这不是一个罕见的问题。有没有已知的解决方案?

谢谢

1 个答案:

答案 0 :(得分:3)

lfe包中的felm函数能够处理此问题(并且也能有效地处理)。

正在运行

fit2 <- felm(y ~ x1 + x2 + x3 + x4 + x5 + x6 | stores + days | 0 | stores , data = data)

NAs的数据产生结果。

请注意公式规范,您可以在其中指定要投影的因子(即固定效果)。公式中的最后一个stores指定用于聚类标准错误的变量。有关详细信息,请参阅优秀的felm帮助文件和lfe包文档。