熟悉时间序列,并使用this R-bloggers post作为the following exercise的指南:徒劳地尝试预测股票市场的未来回报......只是练习理解时间序列的概念时间序列。
问题在于,当我绘制预测值时,我得到一条恒定线,这与历史数据不一致。这是蓝色的,在道琼斯的历史日常回报的尾端。
实际上,我想要一个更乐观的"视觉上的,或者是一种重新趋势的"比我预测的航空旅客数量所得到的情节:
这是代码:
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
答案 0 :(得分:2)
取得一些进展,OP太长了。
cbind.ts
:is.ts(d) [1] FALSE
啊哈!即使d
是xts
对象,也不是时间序列。所以我只需要运行as.ts(d)
。解决了!不切实际的市场预测:现在将其绘制为
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))
好的......高盛(Goldman Sachs)的工作前景不容乐观。我需要吸引一些投资者。让我们再煮一下这条蛇的油了:
获得扁平化线路让我们加上“季节性”,我们准备像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.")
fore = forecast(fit2, h = 365 * 5); plot(fore)
,瞧... 哦,不!我无法通过这种现实检查获得任何投资...好事我没有放弃我的白天工作......等一下,我搞砸了进入模型:fore = forecast(fit3, h = 365 * 5) plot(fore)
:
我要去斯台普斯......