在R中拟合`arima()`模型后的预测和绘图

时间:2016-07-20 23:23:58

标签: r time-series

熟悉时间序列,并使用this R-bloggers post作为the following exercise的指南:徒劳地尝试预测股票市场的未来回报......只是练习理解时间序列的概念时间序列。

问题在于,当我绘制预测值时,我得到一条恒定线,这与历史数据不一致。这是蓝色的,在道琼斯的历史日常回报的尾端。

enter image description here

实际上,我想要一个更乐观的"视觉上的,或者是一种重新趋势的"比我预测的航空旅客数量所得到的情节:

enter image description here

这是代码:

library(quantmod)
library(tseries)
library(forecast)
getSymbols("^DJI")
d = DJI$DJI.Adjusted
chartSeries(DJI)
adf.test(d) 
dow = 100 * diff(log(d))[-1]
adf.test(dow)
train = dow[1 : (0.9 * length(dow))]
test  = dow[(0.9 * length(dow) + 1):  length(dow)]
fit = arima(train, order = c(2, 0, 2))
predi = predict(fit, n.ahead = (length(dow) - (0.9*length(dow))))$pred
fore  = forecast(fit, h = 500)
plot(fore)

不幸的是,如果我尝试使用相同的代码用于航空旅客的预测,我会收到错误消息。例如:

fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))
应用于当前问题的

可能(?)是这样的:

fit2 = arima(log(d), c(2, 0, 2))
pred = predict(fit2, n.ahead = 500)
ts.plot(d,exp(pred$pred), log = "y", lty = c(1,3))
Error in .cbind.ts(list(...), .makeNamesTs(...), dframe = dframe, union = TRUE) : non-time series not of the correct length

1 个答案:

答案 0 :(得分:2)

取得一些进展,OP太长了。

  1. 从不工作到工作:或者为什么我得到“非正确长度的非时间序列”和其他神秘错误消息......好吧,不知道细节,我突然想到要检查一下cbind.tsis.ts(d) [1] FALSE啊哈!即使dxts对象,也不是时间序列。所以我只需要运行as.ts(d)。解决了!
  2. 不切实际的市场预测:现在将其绘制为

    fit2 = arima(log(d), c(2, 1, 2)); pred = predict(fit2, n.ahead = 365 * 5) ts.plot(as.ts(d),exp(pred$pred), log = "y", col= c(4,2),lty = c(1,3), main="VIX = 0 Market Conditions", ylim=c(6000,20000))

  3. enter image description here

    好的......高盛(Goldman Sachs)的工作前景不容乐观。我需要吸引一些投资者。让我们再煮一下这条蛇的油了:

    1. 获得扁平化线路让我们加上“季节性”,我们准备像1999年那样举办派对:

      fit3 = arima(log(d), c(2, 1, 2), seasonal=list(order = c(0, 1, 1), period=12))

      pred = predict(fit3, n.ahead = 365 * 5) ts.plot(as.ts(d),exp(pred$pred), log = "y", col= c(2,4),lty = c(1,3), main="Investors Prospectus - Maddoff & Co., Inc.")

    2. enter image description here

      1. 几乎就在那里:我去了John Oliver's页面并作为官方财务顾问打印了证书,所以我准备拿你的退休金。为了做到这一点,我只需要在未来五年的这个看涨前景中表达一些健康的不确定性。轻松,轻松...... fore = forecast(fit2, h = 365 * 5); plot(fore),瞧...
      2. enter image description here

        哦,不!我无法通过这种现实检查获得任何投资...好事我没有放弃我的白天工作......等一下,我搞砸了进入模型:fore = forecast(fit3, h = 365 * 5) plot(fore)

        enter image description here

        我要去斯台普斯......