Элементы данных не передаются в мою матрицу. Что не так?

#r #for-loop #forecasting #forecast

#r #для цикла #прогнозирование #прогноз

Вопрос:

Я создал пустую матрицу для заполнения данными временных рядов и прогнозами, используя

 pred <- matrix(rep(NA,80),20,4)
  

Но когда я пытаюсь заполнить матрицу циклом for, я получаю сообщение об ошибке («Ошибка в pred[i, 2] <- прогноз (fit.season, h = 1): количество элементов для замены не кратно длине замены»)

 beer1 <- window(ausbeer, start=1990,end=c(2009,4))
n.end <- 2004.75 # 2004Q4

fit.season <- tslm(beer1 ~ season, data=beer1)
fit.trend <- tslm(beer1 ~ season   trend, data=beer1)

for(i in 1:20){
  tmp0 <- 1990
  tmp1 <- n.end (i-1)*.25
  tmp <- window(beer1,tmp0,tmp1)
  pred[i,1] <- window(beer1,tmp1 .25,tmp1 .25) # actual data
  # compute forecasts
  pred[i,2] <- forecast(fit.season, h=1)
  pred[i,3] <- forecast(fit.trend, h=1)
}
  

Я знаю, что сообщение об ошибке означает, что столбцы не равны, поэтому я проверил матрицу, и был заполнен только первый элемент (строка 1, столбец 1).

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

 for(i in 1:20){
  tmp0 <- 1992
  tmp1 <- n.end (i-1)*.25
  tmp <- window(beer1,tmp0,tmp1)
  pred[i,1] <- window(beer1,tmp1 .25,tmp1 .25) # actual 
  # compute forecasts
  pred[i,2] <- meanf(tmp, h=1)$mean
  pred[i,3] <- rwf(tmp, h=1)$mean
  pred[i,4] <- snaive(tmp, h=1)$mean
}
  

И вся матрица была заполнена.

Что не так с тем, что я изначально сделал?

Ответ №1:

forecast Функция возвращает объект класса forecast , а не вектор. Замените последние две строки в вашем цикле на

 pred[i,2] <- forecast(fit.season, h=1)$mean
pred[i,3] <- forecast(fit.trend, h=1)$mean
  

чтобы извлечь только точечные прогнозы

Комментарии:

1. Большое вам спасибо за объяснение! Это очень помогло. Могу ли я спросить, почему среднее значение?

2. Прогноз точки обычно является средним значением распределения прогноза.

3. Большое вам спасибо! Я предположил, что функция для начала вернула прогноз точки.