【问题标题】:Predict future values using Arma使用 Arma 预测未来价值
【发布时间】:2017-10-13 21:32:39
【问题描述】:

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

【问题讨论】:

    标签: r predict forecastr


    【解决方案1】:

    将 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
    

    【讨论】:

      【解决方案2】:

      您的问题缺少一些细节,例如您想要拟合的 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 模型似乎对您的数据没有多大用处,并且预测主要由截距项给出。

      【讨论】:

      • 用代码编辑了问题。根据数据,您建议使用什么模型?
      • 如果没有更深入地了解数据的来源,我可能会从线性回归模型开始,看看它会把我带到哪里。另外,tseries 包没有forecast 函数(至少我的包版本没有)
      • 我刚刚拟合了一个线性模型,它也不能很好地工作。但是,数据的差异太大,您无法确定一个清晰的趋势,并且几乎没有自相关发生,所以我真的想不出更好的选择。
      • 谢谢!我想要一些技术来仅基于这些值来预测未来的值。似乎数据太少,无法预测更好的值。
      猜你喜欢
      • 2018-02-17
      • 2021-10-24
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多