【问题标题】:Loop panel data using plm使用 plm 循环面板数据
【发布时间】:2017-12-22 11:01:09
【问题描述】:

我有一个看起来像这样的 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 中列出所有摘要,那将非常有帮助。

【问题讨论】:

  • 需要更多详细信息以获得帮助。但似乎你对你的国家效应没有独特的价值观。查找国家/地区年份重复项。忘记循环,先直接尝试。然后使用循环。

标签: r plm


【解决方案1】:

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

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

以下代码块演示了如何使用来自包AER 的数据集Fatalities 来执行此操作。我选择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

【讨论】:

    【解决方案2】:

    加载以下包

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

    让我们创建您的数据集:请注意,我认为错误消息取决于“国家/地区”变量,该变量需要多个值才能运行模型。

    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)
    

    使用 broom 包中的 tidy 函数检查模型结果

    tidy(models$Y1)
    

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

    tidy(augment(models$Y1))
    

    将增强的结果保存在数据框中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2012-10-18
      • 2019-06-03
      • 2017-12-07
      • 2011-03-22
      • 2021-09-01
      • 2014-03-28
      相关资源
      最近更新 更多