Предсказать будущие ценности с помощью Arma

У меня есть данные о продажах за 51 балл. Я хочу предсказать, скажем, еще 10 будущих значений. Это данные о продажах и, следовательно, сезонные, но точек данных очень мало для прогнозирования сезонности. Когда я использовал временной ряд, он, возможно, пытался соответствовать и дал "103" в качестве результатов для всего следующего прогноза. Я думал, что использование ARMA поможет, но после подгонки к ARMA и использования прогноза () я все равно получил тот же результат. Я новичок в тренде и прогнозировании и не знаю, существуют ли другие методы, кроме регрессии, для прогнозирования будущих значений. Пожалуйста, помогите.

Данные:

Product    23  22  21  31  29  13  15  20  15  26  11  24  14  18  15  21  25  23  27  30  19  18  20  13  23  40  14  15  20  14  9   22  14  24  26  22  23  16  24  19  14  10  17  12  11  15  9   24  17  22  28

Код, который я использовал:

library("tseries")
arma<-arma(Product)
final<-forecast(arma,10)

2 ответа

Подгонка ARIMA-модели к вашим данным приводит к ARIMA(0,0,0), что означает, что установленные значения зависят от 0 предыдущих наблюдений и 0 предыдущей ошибки подбора. Это снова означает, что лучший предсказатель, который может сделать модель ARIMA (на основе этих данных), является константой. Для каждого наблюдения, независимо от предыдущих наблюдений, оно будет предсказывать одно и то же значение.

library(forecast)
df <- c(23,  22,  21,  31,  29,  13,  15,  20,  15,  26,  11,  24, 14,  18,  15,  21, 
    25,  23 , 27,  30,  19,  18 , 20 , 13 , 23 , 40  ,14 , 15 , 20  ,14 , 9  , 22  ,
    14 , 24  ,26  ,22 , 23 , 16 , 24 , 19  ,14 , 10  ,17 , 12,  11,  15 , 9  , 24 , 1,
    7,  22,  28)


 # auto.arima() selects the ARIMA(r, s, q) model with the highest AIC-score:
 (auto.arima(df))
 # Series: ts 
 # ARIMA(0,0,0) with non-zero mean 

 #Coefficients:
 #    intercept   19.0000
 #    s.e.        0.9642

 # sigma^2 estimated as 49.29:  log likelihood=-174.62
 # AIC=353.25   AICc=353.49   BIC=357.15

 forecast.Arima(object = auto.arima(df), h = 10)
 #    Point    Forecast    Lo 80    Hi 80    Lo 95    Hi 95
 #    53             19 10.00226 27.99774 5.239138 32.76086
 #    54             19 10.00226 27.99774 5.239138 32.76086
 #    55             19 10.00226 27.99774 5.239138 32.76086
 #    56             19 10.00226 27.99774 5.239138 32.76086
 #    57             19 10.00226 27.99774 5.239138 32.76086
 #    58             19 10.00226 27.99774 5.239138 32.76086
 #    59             19 10.00226 27.99774 5.239138 32.76086
 #    60             19 10.00226 27.99774 5.239138 32.76086
 #    61             19 10.00226 27.99774 5.239138 32.76086
 #    62             19 10.00226 27.99774 5.239138 32.76086

В вашем вопросе отсутствуют некоторые детали, например, порядок модели ARMA, которую вы хотите установить, и код, который вы использовали. Учитывая, что значение 103 намного больше, чем любое из значений, которые вы нам дали, я подозреваю, что в вашем коде есть ошибка.
Вот реализация ARMA(1,1), которая должна работать:

data<-strsplit("23  22  21  31  29  13  15  20  15  26  11  24  14  18  15  21  25  23  27  30  19  18  20  13  23  40  14  15  20  14  9   22  14  24  26  22  23  16  24  19  14  10  17  12  11  15  9   24  17  22  28",split="  ")
data<-as.numeric(data[[1]])
mod<-arima(data,order=c(1,0,1))
pred<-predict(mod,n.ahead=10)
pred
plot(c(data,pred$pred),type="l")

РЕДАКТИРОВАТЬ: Кен прав, между прочим, модель ARMA не кажется, что полезно для ваших данных, и прогнозы будут в основном даны термином перехвата.

Другие вопросы по тегам