Создание серии регрессий с l oop в R - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь создать 301 регрессию и сохранить их остатки в кадре данных с помощью al oop. Регрессии располагают государственным ВВП по отраслям слева и должны иметь соответствующий ВВП США справа. Они находятся в том же порядке во фрейме данных, так что, надеюсь, это облегчит задачу.

Проблема в том, что он регрессирует каждый столбец с каждым другим столбцом, что приводит к более чем 10000 регрессий вместо 301. Надеюсь, кто-то больше l oop сообразительный, чем я, может помочь понять это. И подробные объяснения были бы невероятно полезны, мне никогда не приходилось l oop в 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))
    }
}

1 Ответ

0 голосов
/ 04 апреля 2020

Не имея данных для тестирования, сложно дать полный ответ, однако я думаю, что проблема, которую вы испытываете, вызвана дополнительным l oop.

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)) в списке.

...