仅仅了解了时间序列,并以这篇R-博客文章作为以下练习的指南:预测股市未来回报的徒劳尝试……只是一个理解时间序列概念的练习。
问题是,当我绘制预测值时,会得到一条常数线,这与历史数据不符。这是,蓝色的,在平稳的历史道琼斯日报的尾端。
在现实中,我想要一个更“乐观”的视觉效果,或者是一个“重新流行”的情节,比如我对预计的航空旅行者人数的预测:
这是代码:
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
发布于 2016-07-21 22:58:41
取得了一些进展,而且行动太长了。
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 )没有就业前景。我需要吸引一些投资者。我们再煮点蛇油吧:
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)
我要去斯台普斯。
https://stackoverflow.com/questions/38492428
复制相似问题