Предсказать будущие ценности с помощью 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 не кажется, что полезно для ваших данных, и прогнозы будут в основном даны термином перехвата.