【问题标题】:Looping through many multiple regressions循环通过许多多重回归
【发布时间】:2020-03-30 10:15:19
【问题描述】:

我正在尝试从这篇文章中运行这段代码: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 个称为 id1.PRE、id2.PRE ... id69.PRE 的 PRE 变量以及称为 id1.POST、id2.POST ... id69.POST 的 69 个 POST 变量。此外,growth_rate 位于名为 output 的同一数据集中。

此外,我还想添加另外 2 个常规且不来自列表的自变量:国家和年份,但我不确定如何在此处合并?

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

【问题讨论】:

  • 循环模型进行 Wald 检验是统计上的不当行为。您需要以最糟糕的方式进行统计咨询。
  • 我正在复制一篇被引用超过 1000 次并发表在 The Quarterly Journal of Economics 上的论文,所以我并没有真正质疑统计数据,而是试图找到一种方法来做到这一点。我很高兴听到你的建议,而不是关于我多么需要统计咨询的人生教训。
  • 是否适当考虑了此类过程中产生的多重比较问题?
  • 恐怕他们在论文中没有提到类似的东西。但他们在运行 69 个模型后得出了一个 chi2 值和一个 p 值。基本上他们想使用 69 个回归模型来比较 id.PRE 是否与 id.POST 相同(数据在我之前的帖子中解释:stackoverflow.com/questions/59150321/…)以得出一个总体结论。

标签: r loops regression linear-regression


【解决方案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)
}

【讨论】:

  • 使用新创建的模型,我正在尝试运行 Wald 测试,但它似乎不能同时在 69 个模型上工作,只有当我选择对单个模型进行 Wald 测试时从列表中。有什么想法吗? #install.packages("aod") library(aod) wald.test(b = coef(models[[1]]), Sigma = vcov(models[[1]]), Terms = 1:2) #this one works only wald.test(b = coef(models), Sigma = vcov(models,Terms = 1:2)) #this one does not work
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2012-04-18
  • 2017-05-05
  • 1970-01-01
  • 2013-05-01
  • 2020-12-28
  • 1970-01-01
相关资源
最近更新 更多