Просто се запознах с времеви редове и използване този пост на R-блогъри като ръководство за следното упражнение: безсмисленият опит да се предскаже бъдещата възвращаемост на фондовия пазар ... Просто упражнение в разбирането на концепцията за времевите редове.
Проблемът е, че когато заговоря предсказанотостойности Получавам постоянна линия, която е в противоречие с историческите данни. Тук е, в синьо, в края на стационарната историческа Dow Jones, която се връща ежедневно.
В действителност бих искал по-оптимистичен визуален или "повторен" сюжет като този, който съм получил за прогнозирания брой въздушни пътници:
Това е кодът:
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 за отговор № 1Постигането на известен напредък и ОП е твърде дълъг.
- От неработица до работа малко: Или защо получавам "не-времевите редове не на правилната дължина" и други загадъчни съобщения за грешки ... Е, без да знам подробности, просто ми хрумна да проверя какво се опитвах да
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)
:
Тръгвам към Staples ...