使用plm循环面板数据

时间:2017-12-22 11:01:10

标签: r plm

我的df看起来像这样:

Country  Year  X       Y1    Y2    Y3    Y4
ARG      1990  0.4875  1.23  2.51  1.42  4.85
ARG      1991  0.4952  1.66  2.31  1.25  5.02
ARG      1992  0.5120  1.87  2.57  1.92  4.66
ARG      1993  0.5213  1.96  2.41  2.42  5.85

其中X是我的自变量,Ys是我想要循环的因变量。

我尝试过类似的事情:

for (i in out_start:out_end){
  outcome = colnames(RegTest)[i]
  model <- plm(get(outcome) ~ X, data=RegTest, index=c("Country", "year"), model= "within")
  summary(model)
}

我之前将out_start设置为4并在列的末尾结束但我收到一条错误消息:

Error in uniqval[as.character(effect), , drop = F] : 
  incorrect number of dimensions

我看不出有什么问题,因为它似乎正确地找到了该列的名称。

PS:如果有人知道如何在一个df中列出所有摘要,那将非常有帮助。

2 个答案:

答案 0 :(得分:1)

使用公式解决问题您可以将paste()函数与as.formula()结合使用。

summary()的每个调用产生的结果保存在列表中相当容易。您可以在循环之前将model初始化为list,并将循环的每次迭代的结果指定为model的条目。

以下代码块演示了如何使用包Fatalities中的数据集AER执行此操作。我选择了miles作为回归量,并且循环遍历了几种交通事故死亡率。

library(AER)
library(plm)
data("Fatalities")

out_start <- 17
out_end <- 26

model <- list()

for (i in out_start:out_end){
  outcome <- colnames(Fatalities)[i]
  model[[i-out_start+1]] <- summary(
    plm(as.formula(paste(outcome, " ~ miles", sep = "")), 
        data = Fatalities, 
        index=c("state", "year"), model= "within") 
  )
}
model

答案 1 :(得分:1)

加载以下包

library(tidyverse)
library(plm)
library(broom)

让我们创建您的数据集:注意,我认为错误消息取决于“Country”变量,该变量需要多个值来运行模型。

RegTest <- data.frame(rep(c("ARG","SPA"),2),
                      c(1990,1990,1991,1991),
                      c(0.4875,0.4952,0.5120,0.5213),
                      c(1.23,1.66,1.87,1.96),
                      c(2.51,2.31,2.57,2.41),
                      c(1.42,1.25,1.92,2.42),
                      c(4.85,5.02,4.66,5.85))
names(RegTest) <- c("Country","Year","X","Y1","Y2","Y3","Y4")

从原始数据集中选取独立变量

indipendent_variables <- RegTest[,4:7]

使用模型构建函数,将indipendet_variables设置为函数的主要参数

plm_function <- function(indipendent_variable) 
    plm(indipendent_variables ~ X, data=RegTest, index=c("Country","Year"), model="within")

让我们使用purrr包中的map函数迭代运行你的函数而不使用for循环

models <- map(indipendent_variables, plm_function)

使用扫帚包中的tidy功能检查模型结果

tidy(models$Y1)

要从模型结果中获取更多统计信息,请使用扫帚包中的augment函数

tidy(augment(models$Y1))

在数据框中保存增强结果

results_Y1 <- tidy(augment(models$Y1))