首页 > 解决方案 > 在 R 中使用循环创建一系列回归

问题描述

我正在尝试创建 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))
    }
}

标签: rloopsregressioneconomics

解决方案


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

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))到列表中。


推荐阅读