【问题标题】:Fit and Predict Arima in R在 R 中拟合和预测 Arima
【发布时间】:2019-06-20 07:04:28
【问题描述】:

我正在尝试用自变量 (ARIMAX) 拟合 R 中的 Arima 模型。 模型拟合数据包含正数和负数。问题是在拟合模型后,预测函数抛出的数字甚至与用于拟合模型的数据都不接近。

# Sample Data
y <- c( -0.05628948,  0.01907727,  0.00000000, -0.01907727,  0.00000000, -0.01940678,
0.05724351, -0.01875946, -0.03848405,  0.05724351)
x <- c(0.000000000,-0.071700531 ,-0.023863364,  0.013701646,  0.000000000,  0.085009788,
  -0.028666940, -0.046181130, -0.027316528,  0.006895152)

#Fit the model
model <- arima(y, order=c(2,0,1),fixed = c(NA,NA,NA,NA,NA),xreg=x)

#Use the predict function with x again as the input
fore <- predict(model,newxreg = x)[1]

########################Output########################################
Model - 
Call:
arima(y, order = c(2, 0, 1), xreg = x, fixed = c(NA, NA, NA, NA, NA))

Coefficients:
         ar1      ar2      ma1  intercept       x
      -0.7935  -0.5747  -0.2986    -0.0010  0.0569
s.e.   0.4327   0.4399   0.6892     0.0026  0.1245

sigma^2 estimated as 0.0005055:  log likelihood = 22.91,  aic = -33.83

Predict - 

> fore
$`pred`
Time Series:
Start = 11 
End = 20 
Frequency = 1 
[1] -0.03206240 -0.03614031 -0.03341961 -0.03128313 -0.03206240 -0.02722754
[7] -0.03369281 -0.03468892 -0.03361601 -0.03167025

不确定为什么 predict 中的所有值都只是负数(而原始 y 既有正数也有负数),因此与原始 y 值不同。请指教。谢谢!

【问题讨论】:

    标签: r predict arima


    【解决方案1】:

    这里发生了一些事情。一种是您使用的 predict 没有 n.ahead 参数。这是预测下一个值(在此示例中为时间 11),然后仅使用 x 参数在接下来的 9 个值上稍微更改该预测(n.ahead = 1 是 predict.Arima 的默认值)。要获得时间序列的实际预测,请使用forecastpredictn.ahead = 10

    另一件事是,即使 x 值相同,您也不应该期望接下来 10 个时间段的预测数与前 10 个观测值相同。 ar 和 ma 系数将在一个方向上发送预测。这里有很多关于 ma 变量等的短期记忆,但要点是即使 x 变量相同,对未来的预测也不会与过去相同(如案例这个例子)。

    我认为您的主要担忧已在第一段中得到解决。以下是使用n.ahead = 10 或使用forecast 函数的预测。

    fore <- predict(model,newxreg = x, n.ahead = 10)[1]
    fore
    
    $pred
    Time Series:
    Start = 11 
    End = 20 
    Frequency = 1 
     [1] -0.032062405 -0.013745753  0.022305060 -0.014876850 -0.003612005
     [6]  0.014262754 -0.009471801 -0.004258822  0.001812099 -0.003776596
    
    forecast(model, xreg = x)
       Point Forecast       Lo 80       Hi 80       Lo 95      Hi 95
    11   -0.032062405 -0.06087474 -0.00325007 -0.07612707 0.01200226
    12   -0.013745753 -0.05641143  0.02891993 -0.07899728 0.05150577
    13    0.022305060 -0.02118176  0.06579188 -0.04420229 0.08881241
    14   -0.014876850 -0.05983585  0.03008215 -0.08363571 0.05388201
    15   -0.003612005 -0.05066734  0.04344333 -0.07557693 0.06835292
    16    0.014262754 -0.03300372  0.06152923 -0.05802508 0.08655059
    17   -0.009471801 -0.05694644  0.03800283 -0.08207799 0.06313439
    18   -0.004258822 -0.05212230  0.04360466 -0.07745970 0.06894205
    19    0.001812099 -0.04610561  0.04972981 -0.07147172 0.07509592
    20   -0.003776596 -0.05172413  0.04417094 -0.07710602 0.06955283
    

    【讨论】:

    • 感谢您的回答,非常感谢。当我使用您提到的预测功能时,我收到一条错误消息,提示 Error in predict.Arima(object, n.ahead = h) : 'xreg' and 'newxreg' have different numbers of columns
    • 是的,您需要确保forecast 函数中xreg 中的值数等于您为h 输入的值。
    • 对不起,我没有仔细阅读错误。也就是说,当您建立模型时,您有一定数量的 x 变量(例如 2 个),而当您使用预测函数进行预测时,您不再有 2 个变量。确保用于制作模型的结构与用于预测的结构相同。
    【解决方案2】:

    在 auto.arima / arima 中添加 lambda =0 以获得正预测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-26
      • 2021-11-04
      • 2019-07-17
      • 1970-01-01
      • 2015-06-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多