Функция петли в R - PullRequest
       9

Функция петли в R

0 голосов
/ 25 апреля 2019

Я пытаюсь использовать функцию Auto Arima для 70 переменных. Для этого мне нужно создать временные ряды 70 раз.

dealer1 <- ts(tier2[,2], start=c(2015,8), end = c(2018,12), frequency=12)
dealer2 <- ts(tier2[,3], start=c(2015,8), end = c(2018,12), frequency=12)
dealer3 <- ts(tier2[,4], start=c(2015,8), end = c(2018,12), frequency=12)..and so on.

А затем мне нужно снова использовать функцию Auto Arima для 70 переменных.

automatic.dealer1 = auto.arima(dealer1, ic = "aicc")
automatic.dealer2 = auto.arima(dealer2, ic = "aicc")
automatic.dealer3 = auto.arima(dealer3, ic = "aicc")... and so on

А затем прогнозируемый результат:

forecast.dealer1 = forecast(automatic.dealer1, h = 3)$mean
forecast.dealer2 = forecast(automatic.dealer2, h = 3)$mean
forecast.dealer3 = forecast(automatic.dealer3, h = 3)$mean

Я пытаюсь использовать цикл for в R, но получаю ошибку. Что я делаю не так ??

k <- 1
l <- 2

   for(i in seq(1,70)){

      dealer[k] <- ts(dealer1[,l], start=c(2015,8), end = c(2018,12), frequency=12)

      dealer[k]

      automatic <- auto.arima(dealer.[k], ic = "aicc")

      foreArima <- forecast(automatic, h=3)

      automatic

      foreArima

      k <- k+1
      l <- l+1
}

Мне нужна модель ARIMA, выбранная для всех 70 переменных, которые у меня есть в моих данных, плюс прогноз для каждой из них, который будет отображаться

Пример данных выглядит так:

enter image description here

1 Ответ

0 голосов
/ 25 апреля 2019

Прежде всего вам не нужен цикл для создания объекта ts. Вы можете создать многомерный ts объект, подобный этому

myts <- ts(tier2[,2:70], , start=c(2015,8), frequency=12)

Вот как вы используете цикл for в R:

result <- numeric(ncol(myts)) #initialize a vector where the results will be stored.

for (j in 1:ncol(myts)) {
    automatic.dealer <- auto.arima(myts[,j], ic = "aicc")
    result[j] <- forecast(automatic.dealer, h = 3)$mean
}

Так же, как дополнительная информация: большую часть времени вы можете избежать циклов в R, используя apply, sapply или lapply. Это повышает удобочитаемость вашего кода и производительность.

РЕДАКТИРОВАТЬ : если вы хотите сохранить все результаты, вы можете сохранить результаты из auto.arima в список:

result <- numeric(ncol(myts))
arima.list <- list()
forecast.list <- list()

for (j in 1:ncol(myts)) {
    automatic.dealer <- auto.arima(myts[,j], ic = "aicc")
    arima.list[[j]] <- automatic.dealer
    forecast.list[[j]] <- forecast(automatic.dealer, h = 3)
    result[j] <- forecast.list[[j]]$mean
}
...