我正在尝试从此帖子中运行以下代码: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个其他的自变量,这些变量是常规的并且不是来自列表:国家和年份,但是我不确定如何将其纳入此处?
任何帮助将不胜感激。谢谢!
请执行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) }