Методология прогнозирования VAR


19

Я строю модель VAR для прогнозирования цены актива и хотел бы знать, является ли мой метод статистически обоснованным, актуальны ли тесты, которые я включил, и нужно ли больше для обеспечения надежного прогноза на основе моих входных переменных.

Ниже приведен мой текущий процесс проверки причинности Грейнджера и прогнозирования выбранной модели VAR.

require("forecast")
require("vars")

#Read Data
da=read.table("VARdata.txt", header=T)
dac <- c(2,3) # Select variables
x=da[,dac]

plot.ts(x)
summary(x)

#Run Augmented Dickey-Fuller tests to determine stationarity and differences to achieve stationarity.
ndiffs(x[, "VAR1"], alpha = 0.05, test = c("adf"))
ndiffs(x[, "VAR2"], alpha = 0.05, test = c("adf"))

#Difference to achieve stationarity
d.x1 = diff(x[, "VAR1"], differences = 2)
d.x2 = diff(x[, "VAR2"], differences = 2)

dx = cbind(d.x1, d.x2)
plot.ts(dx)

#Lag optimisation
VARselect(dx, lag.max = 10, type = "both")

#Vector autoregression with lags set according to results of lag optimisation. 
var = VAR(dx, p=2)

#Test for serial autocorrelation using the Portmanteau test
#Rerun var model with other suggested lags if H0 can be rejected at 0.05
serial.test(var, lags.pt = 10, type = "PT.asymptotic")

#ARCH test (Autoregressive conditional heteroscedasdicity)
arch.test(var, lags.multi = 10)

summary(var)

#Granger Causality test
#Does x1 granger cause x2?
grangertest(d.x2 ~ d.x1, order = 2)

#Does x2 granger cause x1?
grangertest(d.x1 ~ d.x2, order = 2)

#Forecasting
prd <- predict(var, n.ahead = 10, ci = 0.95, dumvar = NULL)
print(prd)
plot(prd, "single")

Это метод звука?


1
Вы используете вторые отличия? Это немного необычно и может сделать модель более чувствительной, чем она должна быть. Кроме того, можете ли вы ожидать коинтеграции в вашей системе? А как насчет каких-либо детерминированных временных тенденций и / или сезонностей, вы проверяли их?
Ричард Харди

@ Ричард, насколько я понимаю, различия в достижении стационарности определяются тестом adf и будут корректироваться в соответствии с его предложением. Если тест adf определит, что он стационарный (верните 0, я бы не отличил переменную). Я не думал о коинтеграции и сезонности, но у меня сложилось впечатление, что вышеупомянутый метод позаботится о любой тенденции в переменных.
прочитали это

2
Тест ADF - это всего лишь тест, он имеет свои ограничения. Построение исходных данных, первых различий и, в конечном итоге, вторых различий может быть более информативным, чем просто выполнение теста. Кроме того, тест ADF имеет различные характеристики: (1) нет константы, нет тренда; (2) постоянный, без тренда; (3) константа и тренд; Выбор порядка задержки для теста также может быть нетривиальным. Следовательно, не стоит слепо полагаться на результаты. С точки зрения предмета, цены на активы обычно интегрируются с первого порядка, I (1). Мне (2) было бы сложно обосновать ...
Ричард Харди

@youjustreadthis Я включил ответ ниже. Я настоятельно рекомендую вам рассмотреть некоторые из его последствий
Джейкоб Х

Ответы:


28

Я думаю, вы поняли это правильно, но при построении модели VAR я обычно следую этим шагам:

1. Выберите переменные

Это самая важная часть построения вашей модели. Если вы хотите спрогнозировать цену актива, вам нужно включить переменные, которые связаны с механизмом формирования цены. Лучший способ сделать это через теоретическую модель. Поскольку вы не упомянули, что такое актив и каковы другие переменные, которые вы включили в свою модель, я действительно не могу сказать много об этом элементе, но вы можете найти краткое изложение моделей оценки активов здесь .

2. Проверьте данные и внесите необходимые коррективы

После выбора переменных вы можете внести некоторые коррективы в данные, которые улучшат оценку и интерпретацию модели. Полезно использовать сводную статистику и видеть график ряда, чтобы обнаружить выбросы, пропущенные данные и другие странные поведения. При работе с данными о ценах люди обычно берут натуральные журналы, что является преобразованием, стабилизирующим дисперсию, и также имеет хорошую интерпретацию (разница в ценах в журналах становится постоянно составной доходностью). Я не уверен, что вы взяли журналы перед оценкой модели, но это хорошая идея, если вы работаете с ценами на активы.

3. Проверьте, содержат ли данные нестационарные компоненты

Теперь вы можете использовать единичные корневые тесты, чтобы проверить, являются ли ваши серии стационарными. Если вас интересует только прогнозирование, как отмечает @JacobH, вы можете запускать VAR на уровнях, даже если ваши ряды нестационарны, но тогда вашим стандартным ошибкам нельзя доверять, что означает, что вы не можете сделать вывод о значении коэффициенты. Вы тестировали стационарно, используя тест ADF, который очень часто используется в этих приложениях, но учтите, что вы должны указать, хотите ли вы запускать тест с i) без константы и без тренда; II) постоянная и без тенденции; и iii) константа и тренд. Обычно ценовые ряды имеют стохастические тренды, поэтому линейный тренд не будет точным. В этом случае вы можете выбрать спецификацию ii. В своем коде вы использовалиndiffsФункция пакета прогноза. Я не уверен, какой из этих трех вариантов эта функция реализует для вычисления количества различий (я не смог найти это в документации). Чтобы проверить свой результат, вы можете использовать ur.dfфункцию из пакета "urca":

adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")

Обратите внимание, что эта команда запустит тест ADF с константой и с задержками, выбранными командой AIC, с максимальной задержкой 10. Если у вас есть проблемы с интерпретацией результатов, просто посмотрите на этот вопрос . Если ряды I (1), просто используйте разность, которая будет равна непрерывно составленным доходам. Если тест показывает, что серия I (2), и вы сомневаетесь в том, что вы можете использовать другие тесты, например, тест Филлипса-Перрона (PP.testфункция в R). Если все тесты подтверждают, что ваша серия - это я (2) (не забудьте использовать журнал серии перед запуском тестов), тогда возьмите второе различие, но учтите, что ваша интерпретация результатов изменится, так как теперь вы работаете с Разница в непрерывно составленных доходах. Цены на активы обычно равны I (1), поскольку они близки к случайному блужданию, что является белым шумом при применении первой разницы.

4. Выберите порядок модели

Это можно сделать с помощью обычно используемых критериев, таких как Akaike, Schwarz (BIC) и Hannan-Quinn. Вы сделали это с помощью VARselectфункции, и это правильно, но помните, по какому критерию вы использовали свое решение. Обычно разные критерии указывают на разные заказы для VAR.

5. Проверьте, существуют ли отношения коинтеграции

Если все ваши серии - это I (1) или I (2), перед запуском модели VAR, как правило, рекомендуется проверить, нет ли коинтеграционных отношений между сериями, особенно если вы хотите выполнить анализ импульсной характеристики с помощью невязки. Вы можете сделать это с помощью теста Йохансена или Энгла-Грейнджера (только для двумерных моделей). В R вы можете запустить тест Йохансена с ca.joфункцией пакета "urca". Обратите внимание, что этот тест также имеет разные характеристики. Для ценовых рядов я обычно использую следующий код (где pдлина лага пункта 4, выполненного с сериями в уровнях):

jo_eigen <- ca.jo(x, type = "eigen", ecdet = "const", K = p)
jo_trace <- ca.jo(x, type = "trace", ecdet = "const", K = p)

6. Оцените модель

Если ваши серии не объединены, вы можете легко оценить модель с помощью VARкоманды, как это делается в вашем коде. В случае, если ряды объединены, необходимо рассмотреть долгосрочные отношения, оценивая модель векторной коррекции ошибок с помощью следующего кода (где kпорядок коинтеграции):

vecm <- cajorls(joeigen, r = k)

7. Запустите диагностические тесты

Чтобы проверить, правильно ли указана ваша модель, вы можете запустить тест последовательной корреляции по остаткам. В вашем коде вы использовали тест Portmanteau с serial.testфункцией. Я никогда не использовал эту функцию, но думаю, что все в порядке. Существует также многомерная версия теста Ljung-Box, реализованная в пакете MTS, которую вы можете запустить с помощью функции mq.

8. Делайте прогнозы

Убедившись, что ваша модель правильно указана, вы можете использовать эту predictфункцию так же, как в коде. Вы можете даже построить функции импульсного отклика, чтобы проверить, как переменные реагируют на определенный шок, используя irfфункцию.

9. Оценивайте прогнозы

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


Большое спасибо за этот подробный ответ! Что касается теста Йохансена на коинтеграцию, меняется ли реализация, если включено более двух переменных? Поверьте, я читал, что мультитехинтеграция несет в себе свои подводные камни. Извините, если это лучше подходит для собственного вопроса.
прочитали это

1
Нет, вы можете сделать это с тем же кодом, что и выше, но в этом случае вы можете найти более одного коинтегрирующего вектора. Единственным ограничением такого рода является тест Энгла-Грейнджера, который подходит только для двумерных рядов, но обычно лучше в этом случае.
Реджис А. Эли

1
Эта ссылка может помочь в запуске и интерпретации тестов Johansenn.
Реджис А. Эли

Прекрасная работа! Я отредактировал некоторое форматирование и правописание хотя. Обратите внимание, что неплохо иметь кусочки кода (даже такие маленькие, как имена функций) в обратных галочках `, например predict. Большие фрагменты кода можно отформатировать как код, выделив текст и нажав кнопку «цитаты» в верхней части окна редактора.
Ричард Харди

@RichardHardy, хорошая схема процедуры оценки VAR. Тем не менее, я думаю, что вы, возможно, проигнорировали тот факт, что ОП хочет прогнозировать. Следовательно, он / она, вероятно, хотел бы оценить в уровнях.
Джейкоб Х

9

Я думал, что добавлю в Regis A Ely очень хороший ответ. Его ответ не является неправильным, но использование VAR для прогнозирования отличается от использования VAR для выполнения других операций типа VAR (например, IRF, FEVD, Historical Decomp. И т.д ...). Следовательно, некоторые из шагов, описанных Regis A Ely, в некоторых случаях могут негативно повлиять на ваш прогноз.

Отказ от ответственности:

Когда я имею в виду нестационарные данные, я имею в виду, что ряд содержит стохастический тренд. Если данные имеют временной / сезонный тренд, они должны быть соответствующим образом отфильтрованы.

Первый

Вообще говоря, в неограниченной VAR нет необходимости беспокоиться о ложных отношениях. Паразитная регрессия возникает, когда вы регрессируете нестационарный ряд (Y) в другой нестационарный ряд (X), и оба ряда не коинтегрированы. Однако, если вы регрессируете Y на X, а также запаздывает по Y, то регрессия не будет ложной, поскольку включение запаздывания Y гарантирует, что ошибки будут постоянными. Иными словами, лаги Y улавливают вариацию, которая ранее была ошибочно присвоена X. Поскольку неограниченная VAR - это, по сути, система регрессий ARDL, где каждое уравнение содержит одинаковое количество лагов и регрессоров, должно быть ясно, что ложная регрессия поэтому вряд ли будет проблемой. Иначе говоря, если ваши данные - это все I (1), независимо от того, являются ли они интегрированными, вы можете запустить VAR. VECM необходимы только в том случае, если вы хотите моделировать и определять взаимосвязь между переменными в краткосрочной и долгосрочной перспективе / совместной интеграции. Вопрос теперь в том, следует ли вам использовать VAR по уровням или по первым различиям.

второй

При прогнозировании нет необходимости сначала отличать данные I (1). Вы можете, если хотите, думали, что удивительно много практикующих этого не делают. Помните, когда у нас есть нестационарный ряд, мы все еще можем получить непротиворечивую оценку. Для регрессии с одним лагом зависимой переменной это интуитивно понятно. Если ряды следуют за случайным блужданием (то есть нестационарным), мы знаем, что наилучшая оценка того, где это будет следующим периодом, - это точно, где это был последний период (т.е. бета равен 1). Однако стандартные ошибки оценок, полученные из моделей с нестационарными данными, отличаются, поскольку, строго говоря, дисперсия оценки приближается к бесконечности, когда T приближается к бесконечности. Это, однако, не является проблемой для прогнозирования. Прогнозирование - это условное ожидание, поэтому оно основывается только на оценках параметров вашей модели, а не на стандартных ошибках. Кроме того, интервалы прогнозирования вашего прогноза будут получены либо непосредственно из ваших ошибок, путем ошибок начальной загрузки, либо, если у вас много данных через интервалы эмпирического прогнозирования (мой любимый!), На все эти три подхода не влияют нестационарные данные потому что опять ваши ошибки будут постоянными согласно нашему ложному регрессионному обсуждению выше.

Почему меня это волнует?

Тест ADF имеет низкое энергопотребление, особенно когда серия близка к тому, чтобы быть корневым модулем, но это не так. Сказанный другой тест ADF будет иметь тенденцию ошибочно утверждать, что ряд является нестационарным, когда это фактически не так.

Предположим, что ваш тест ADF ошибочно гарантирует, что серия не является стационарной. Если вы выполните все необходимые преобразования и оцените VECM, ваш прогноз будет неверным, потому что ваша модель неверна. Вот почему люди прогнозируют в уровнях.

Как насчет причинности Грейнджер ???

Вы даже можете проверить GC с VAR в уровнях, когда данные I (1). Я знаю, это звучит безумно. Мы знаем, что вывод не всегда возможен для нестационарных данных. Однако возможно проверить совместные гипотезы, например, GC. Это показано в работах Тоды и Ямамото (1995), в которых использованы Sims, Stock и Watson (1990). Для заявления см. Http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html .

Последняя вещь

Однако, если вы хотите использовать свой VAR для других целей, кроме прогнозирования, будьте осторожны. VAR в уровнях с нестационарными и совместно интегрированными рядами может дать некоторые странные результаты. Например, строго говоря, представление скользящей средней VAR не существует, поскольку матрица параметров не будет обратимой. Несмотря на это, IRF все еще можно получить. Вывод также неосуществим (гипотезы совместного мышления могут быть проверены, как обсуждалось выше).

Также следует беспокоиться о небольших образцах. Все, что я обсуждал, хорошо работает в больших выборках, но в небольших выборках все может получиться странным. Это особенно верно для GC с данными I (1).


1
YTИксTYTзнак равноβ0+β1YT-1+...+βпYT-п+γИксTγ^ОLSприближается к нулю (верно? где доказательство?), проблема постепенно исчезает. Но какой размер образца необходим для этого? Пока не будет предоставлено доказательство, я бы продолжал избегать ложных отношений.
Ричард Харди

1
Относительно Почему я забочусь? Если процесс имеет корень, очень близкий к корню модуля, он ведет себя почти так же, как процесс с корнем модуля. Таким образом, при прогнозировании существует небольшая разница между предположением, что шоки являются постоянными, и утверждением, что они исчезают крайне медленно. Если вы не прогнозируете очень далеко в будущем, результат будет практически таким же. Вот почему я не слишком беспокоюсь о том, что единичный корневой тест имеет низкое энергопотребление для локальных альтернатив.
Ричард Харди

1
Еще одна небольшая заметка, касающаяся первого : когда речь идет о тесте ADF в разделе « Почему меня это волнует? , вы говорите: «Ваш прогноз будет неверным, потому что ваша модель неверна». Ну, это относится и к Первому , не так ли? Прогнозирование с использованием модели, в которой левая сторона отклоняется от правой, действительно характеризуется приведенной выше цитатой.
Ричард Харди

1
@Richardhardy Доказательство моего первого утверждения см. В главе 18 в Гамильтоне, 1994. В частности, в разделе 18.2, Лечения от паразитной регрессии. Стоит отметить, что оценки OLS также эффективны, поскольку они сходятся со скоростью, равной T.
Джейкоб Х

1
@RichardHardy Ваш второй комментарий - это справедливо. Я подумал, что зачем тратить время на предварительное тестирование, а затем фильтровать данные только для того, чтобы потенциально оценить неправильную модель. Для прогнозирования спецификация уровней в целом будет правильной
Jacob H
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.