Точность прогноза в квартальных данных - PullRequest
3 голосов
/ 13 марта 2020

Ввод проблемы в контекст. У меня есть набор данных из 249 ежемесячных наблюдений с последнего месяца 1999 года по последний месяц 2019 года. Я хочу разделить свои данные в наборе обучающих данных (67% наблюдений = 1999: M12 - 2013: M3) и наборе испытаний (33% наблюдений = 2013: М4 - 2019: М12).

Я хочу сгенерировать некоторый прогноз для разных горизонтов в период моего набора тестовых данных с целью агрегирования их по частоте. Прогноз, который я хочу создать, таков: (1) создать прогноз на три месяца квартала (напр. 2013: M4-2013: M6); (2) принять данные испытаний (напр. 2013: M4) и затем сформировать прогноз на следующие два месяца для завершения квартала (напр. 2013: M5-2013: M6); (3) возьмите два наблюдения данных тестирования (напр. 2013: M4-2013: M5) и затем сгенерируйте прогноз следующего месяца, чтобы завершить квартал (напр. 2013: M6). Проблема в том, что я хочу использовать один и тот же процесс для каждого квартала каждого года, но с помощью своего кода я могу делать это все кварталы одного года. Мой код такой:

IMAE_st=c(-7.4,2.3,1.5,-4.3,1.2,0.8,-1.2,-0.1,-3.4,11.6,-1.6,0.8,-7.6,0.7,3,-4.6,1.3,1.1,3.7,-0.6,-2.1,10,-1.1,-0.9,-6.8,3,2.5,-3.5,2.9,-0.3,1.7,0.2,-3.8,7.7,-1.7,2.7,-6,0,3.1,-5.2,1.2,-0.2,4.8,-1,-5.3,6.1,0.4,3.9,-7.4,1.4,3.4,-5.3,2.2,1.8,0.2,0.9,-6.2,6.1,0.4,5.1,-5.4,2.6,3.3,-2.2,1.4,1.6,0.4,1.6,-2.6,0,4.8,2.8,-4,0.4,5.9,-4.5,6.5,-1.7,-1.9,2.2,-2.8,-0.7,0.9,4,-1.6,4.1,3.5,-6.6,6.8,-5.5,2.8,2.1,-4.5,4.7,0.7,2.2 ,-1.094243,2.061736,1.261673,1.400988,-2.686458,-2.931763,2.463777,-5.865786,-5.702746,8.985015,-5.361467,7.015653,-4.164264,1.890622,3.347635,0.8412946,-4.293641,0.4378137,1.753006,-1.792383,-3.392016,7.010339,0.4669987,5.166962,-7.342639,8.620356,4.961904,-2.27037,-4.403983,-0.4058399,-0.0006269216,0.9101128,-3.653829,5.874634,1.23485,4.915203,-10.18752,8.868478,2.592532,-5.164624,3.010858,-5.440857,-0.3194466,1.398669,-3.215918,2.42323,5.623348,2.49572,-6.188624,5.66199,1.942882,-6.479795,5.81233,-5.344266,0.7927707,0.1494195,-6.375121,5.324398,4.696597,3.327214,-5.545626,3.583564,1.308576,0.8850498,1.529226,-6.857546,2.906524,2.646316,-4.273569,8.741708,-2.335401,3.607867,-0.64897,-0.9326381,5.385847,-2.381201,2.492911,-6.226132,1.68159,1.33562,-0.1845478,6.027951,-2.431819,8.677393,-6.131252,-1.116671,5.760681,1.09493,1.038909,-6.851417,5.809619,-0.6484918,-2.092617,5.642243,0.5657242,3.325799,-7.452096,5.747844,4.864472,4.787076,-5.029128,-3.621099,0.5874782,3.189216,-2.476685,2.641581,0.02642367,7.101326,-9.953643,5.528632,7.797032,-3.800533,0.6497054,-6.77975,1.550721,6.655995,-11.21055,10.12577,3.576361,7.89576,-10.7566,4.937723,7.452756,-2.261446,-0.3664012,-5.391343,1.703623,5.132268,-9.584682,8.364911,4.151098,6.167502,-10.62951,4.954477,7.233774,-6.072865,3.072285,-10.1259,5.133208,5.721085,-9.562793,8.859794,4.974963,8.791776)


  for (i in 1:4){
#definiendo variable de cambio
prueba <- paste("IMAE",i,sep = ".")

# Tomando las observaciones (2000:M1- 2013:M3 Hasta M6)
IMAE_1 <- window(IMAE_st, c(2000,1), c(2013,2 + i))

# Modelo ARIMA Estimar Observaciones
ar.IMAE1 <- forecast::auto.arima(IMAE_1, ic=c("aic"))

  if(i<4){
    #Pronostico
    forecast.IMAE1 <- forecast::forecast(ar.IMAE1,h=3)
  }

plot(forecast.IMAE1)

#Guardando el valor estimado del IMAE para el ultimo trimestre
IMAE1 <- aggregate.ts(ts(append(IMAE_1, forecast.IMAE1$mean), start = c(2000,1), end = c(2013,6), frequency=12), nfrequency = 4, mean)

assign(prueba, IMAE1)
}
...