2015-07-27 2 views
-1

У меня есть набор данных с датой закрытия ставки VIX. Мое упражнение состоит в том, чтобы прогнозировать 300 пунктов с последней даты и сравнить его с фактическими историческими данными. Фрагмент из 1826 наблюдений моих данных выглядитПрогнозирование временных рядов данных

Date Open High Low Close 
02/01/2004 17.96 18.68 17.54 18.22 
05/01/2004 18.45 18.49 17.44 17.49 
06/01/2004 17.66 17.67 16.19 16.73 
07/01/2004 16.72 16.75 15.5 15.5 
08/01/2004 15.42 15.68 15.32 15.61 
09/01/2004 16.15 16.88 15.57 16.75 
12/01/2004 17.32 17.46 16.79 16.82 
13/01/2004 16.6 18.33 16.53 18.04 
14/01/2004 17.29 17.3 16.4 16.75 
15/01/2004 17.07 17.31 15.49 15.56 
16/01/2004 15.4 15.44 14.9 15 
20/01/2004 15.77 16.13 15.09 15.21 
21/01/2004 15.63 15.63 14.24 14.34 
22/01/2004 14.2 14.87 14.01 14.71 
23/01/2004 14.73 15.05 14.56 14.84 
26/01/2004 15.78 15.78 14.52 14.55 
27/01/2004 15.28 15.44 14.74 15.35 
28/01/2004 15.37 17.06 15.29 16.78 

код генерирует прогноз, который является плоским, и я хотел бы построить на том же рисунке исторических данных. Как я могу это сделать?

r_vix=diff(log(VIX[,"Close"])) 
fit_1step <- auto.arima(r_vix[1:15]) 
h=300 
forecast_1step = forecast(fit_1step, h=h) 
plot(forecast_1step, xaxt="n",type="b") 
plot_labels = 5 
axis(1, at=seq(0,length(r_vix)+h-1,plot_labels), labels=VIX$Date[seq(2, length(r_vix)+h,plot_labels)]) 

ответ

0

Часть вашей проблемы в том, что вы пытаетесь представить даты использования ts объектов. В общем случае ts используется с данными, которые были отобраны в равных точках времени, например, ежедневно, еженедельно или ежемесячно. В вашем временном ряду отсутствуют данные для выходных и, возможно, некоторых праздников, поэтому ts не подходит и не требуется для функций прогнозирования. auto.arima может использовать вектор, содержащий данные. Кажется, что вашей единственной проблемой являются даты, отображаемые на диаграмме, созданной функцией графика для объектов forecast. Пример того, как это можно сделать, показан ниже.

library(forecast) 
r_vix <- diff(log(VIX[,"Close"]))[-1] 
num_train <- 1826   # number of points used to calculate ARIMA model 
fit_1step <- auto.arima(r_vix[1:num_train]) 
h <- 300     # number of forecast points 
forecast_1step = forecast(fit_1step, h=h) 
plot_start <- 1000   # number of points at start of data series omitted from plot 
plot(forecast_1step, xaxt="n", xlim=c(plot_start, num_train+300), ylim=range(r_vix)) 
data_fcst_pts <- num_train:(num_train+h) # range of data points in forecast interval 
points(data_fcst_pts, r_vix[data_fcst_pts],col="blue", type="p", pch=16) 
plot_labels <- 126  # interval between x-axis major tick marks 
axis(1, at=seq(0,length(r_vix)+h-1,plot_labels), 
    labels=VIX$Date[seq(2, length(r_vix)+h,plot_labels)]) 

UPDATE

код обновлен до опускают данные в начале временного ряда от сюжета и построение точек данных для интервала прогноза. Участок показан ниже. enter image description here

Отличное объяснение результатов и прогнозов для моделей ARIMA книги OText Родома Гайндманом особенно раздел ARIMA modelling in R. Профессор Hyndman является автором пакета forecast. Более конкретно, если вы пытаетесь прогнозировать VIX в качестве показателя волатильности P 500, используя модели ARIMA, вы, вероятно, захотите рассмотреть некоторые из многих исследований, используя методы ARCH или GARCH. Место для начала может быть Volatility Forecasting I: GARCH Models

+0

Привет, Уолтс, я редактировал мой оригинальный вопрос. Есть еще некоторые проблемы. Есть ли причина, по которой вы устанавливаете h-> 6, я бы предположил, что это 300, это мой прогнозный период. – Orongo

+0

Я установил h <- 6, так как в ваш пример были включены только 18 точек данных и 12 были использованы для обучения модели ARIMA. Вы можете использовать 300 с полным набором данных. – WaltS

Смежные вопросы