【问题标题】:Creating a series of regressions with loop in R在 R 中使用循环创建一系列回归
【发布时间】:2020-07-16 06:28:27
【问题描述】:

我正在尝试创建 301 回归并将它们的残差保存到带有循环的数据框中。回归的左边是按行业划分的州 gdp,右边需要有相应的美国 gdp。它们在数据框中的顺序相同,因此希望这会使事情变得更容易。

问题在于,它将每列与其他列进行回归,导致超过 10,000 次回归而不是 301 次。希望比我更精通循环的人可以帮助解决这个问题。详细的解释会非常有帮助,我以前从来没有在 R 中循环过。谢谢!

这是我的代码:

# Create start and end vectors
WY_start = 2
WY_end = 302
US_start = 303
US_end = 604
res <- data.frame(combined_gdp$Year)
# Loop
for (i in WY_start:WY_end) {
    WY = colnames(combined_gdp)[i]
    for (j in US_start:US_end) {
        US = colnames(combined_gdp)[j]
        model <- lm(get(WY) ~ get(US) + COAL_vol + OILW_vol + NGS_vol, 
                    na.action = na.exclude, data=combined_gdp)
        cbind(res, resid(model))
    }
}

【问题讨论】:

  • 嗨,欢迎来到堆栈溢出。你能看看创建一个可重现的例子吗?即使是两个州的数据样本也可以让某人尝试让您的代码正常工作。
  • 欢迎堆栈溢出。通过发布可重现的示例来帮助我们帮助您。它不必与您使用的数据完全相同,只是一些虚拟 data.frame 可能会这样做。我建议这个guideline。提出问题可能会更困难并且需要更长的时间,但是通过这样做,您将了解很多有关当前问题的信息。关于你的问题,我认为你的循环太多了。

标签: r loops regression economics


【解决方案1】:

没有要测试的数据很难给出完整的答案,但是我认为您遇到的问题是由额外的循环引起的。

WY_start <-2
WY_end   <-302
US_start <-303
US_end   <-604
res      <-data.frame(combined_gdp$Year)

# Loop
for (i in WY_start:WY_end){
     WY <- colnames(combined_gdp)[i]
     US <- colnames(combined_gdp)[i+301]
     model <- lm(get(WY)~get(US)+COAL_vol+OILW_vol+NGS_vol, 
           na.action=na.exclude,data=combined_gdp)
     cbind(res,resid(model))
}

您的代码正在获取每个 [ i ] 并将它们与每个 [ j ] 进行比较,因此您将获得 i * j 比较。由于它们的顺序相同,因此您只需要 1 个索引。此代码将采用第 2,3...302 列并将它们分别与第 303,304...604 列进行比较。我还建议将您的 cbind(res,resid(model)) 存储到一个列表中。

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2015-02-13
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多