#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. Большое вам спасибо! Я предположил, что функция для начала вернула прогноз точки.