繁体   English   中英

使用Arma预测未来价值

[英]Predict future values using Arma

我有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)

将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")

编辑:肯(Ken)是对的,顺便说一句,一个ARMA模型对于您的数据似乎没什么用,并且预测将主要由拦截项给出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM