我的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中列出所有摘要,那将非常有帮助。
答案 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))