Я думаю, вы поняли это правильно, но при построении модели 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. Оценивайте прогнозы
После того, как вы сделали свои прогнозы, вы должны оценить их и сравнить с другими моделями. Некоторые методы оценки точности прогнозов можно найти здесь , но для этого крайне важно разделить свои серии на обучающие и тестовые наборы, как описано в ссылке.