使用Arma预测未来值

时间:2017-05-15 07:31:15

标签: r predict forecastr

我有51点的销售数据。我想预测10个未来的价值。这是一个销售数据,因此是季节性的,但数据点很少用于预测季节性。当我使用时间序列时,它可能会尝试拟合并给出“103”作为所有下一个预测的结果。我认为使用ARMA会有所帮助,但在适应ARMA并使用forecast()后,我仍然得到相同的输出。我不熟悉趋势和预测,也不知道除了回归之外是否有不同的方法可以预测未来的价值。请帮助。

数据:

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 个答案:

答案 0 :(得分:0)

将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

答案 1 :(得分:0)

您的问题缺少一些细节,例如您想要适合的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模型似乎对您的数据没什么用处,预测主要是由拦截术语给出的。