循环多次回归

问题描述 投票:0回答:1

我正在尝试从此帖子中运行以下代码:looping with iterations over two lists of variables for a multiple regression in R具有修改后的变量和数据框名称,因为它似乎完全可以满足我的要求,并使用非常相似的数据集。但是,它总是给我一个错误,我不知道为什么,所以如果有人可以帮助我理解该错误或相应的代码行,以便我能找出问题所在,那么我将不胜感激。

for(i in 1:n) {
  vars = names(output)[names(output) %in% paste0(c(".PRE", ".POST"), i)]
  models[[as.character(i)]] = lm(paste("growth_rate ~ ", paste(vars, collapse=" +   ")),
                                 data = output)
}

Error in parse(text = x, keep.source = FALSE) : 
  <text>:2:0: unexpected end of input
1: growth_rate ~  
   ^

我的数据集几乎与上述文章中给出的数据集相似,除了我的“ RDPI_T”和“ DRY_T”变量是交替排列的(在这种情况下,我认为不重要)。我有类似的变量是输出数据集中的69个PRE变量,称为id1.PRE,id2.PRE ... id69.PRE,还有69个POST变量,称为id1.POST,id2.POST ... id69.POST。另外,growth_rate在称为输出的同一数据集中。

此外,我还想添加2个其他的自变量,这些变量是常规的并且不是来自列表:国家和年份,但是我不确定如何将其纳入此处?

任何帮助将不胜感激。谢谢!

r loops regression linear-regression
1个回答
1
投票
如果您的列名为id1.PRE,id2.PRE,则上面具有的粘贴功能将不起作用,这很可能引发错误。

请执行dput(head(output))并粘贴输出,这使我们可以查看列名以及为什么行不通。

根据您描述列名称的方式,尝试以下操作:

#simulate data output=data.frame( "growth_rate"=rnorm(100), matrix(rnorm(100*69*2),nrow=100) ) colnames(output)[-1] = c(paste("id",1:69,".PRE",sep=""),paste("id",1:69,".POST",sep="")) output$year = 1901:2000 output$country = sample(letters,nrow(output),replace=TRUE) n=69 #create list to hold models models = vector("list",n) for(i in 1:n) { vars = paste0("id",i,c(".PRE", ".POST")) # i think it works without as.formula, but better to be safe FORMULA = as.formula(paste("growth_rate ~ ", paste(vars, collapse=" + "))) models[[i]] = lm(FORMULA,data = output) }

如果要包括其他变量:

for(i in 1:n) { vars = paste0("id",i,c(".PRE", ".POST")) # add other variables vars = c(vars,"country","year") FORMULA = paste("growth_rate ~ ", paste(vars, collapse=" + ")) models[[i]] = lm(FORMULA,data = output) }

© www.soinside.com 2019 - 2024. All rights reserved.