Я думаю, що ти це правильно зрозумів, але, будуючи модель 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). Якщо всі тести підтверджують, що ваша серія є I (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. Проведіть діагностичні тести
Щоб перевірити, чи правильно вказана ваша модель, ви можете запустити тест послідовного співвіднесення на залишки. У своєму коді ви використовували тест Портманто з serial.test
функцією. Я ніколи не використовував цю функцію, але думаю, що це нормально. Існує також багатоваріантна версія тесту Ljung-Box, реалізована в пакеті MTS, який можна запустити з функцією mq
.
8. Робіть прогнози
Після того, як ви впевнені, що ваша модель добре вказана, ви можете використовувати predict
функцію, як це було зроблено у вашому коді. Ви навіть можете побудувати функції імпульсного реагування, щоб перевірити, як змінні реагують на певний шок за допомогою irf
функції.
9. Оцініть прогнози
Після того, як ви зробили свої прогнози, ви повинні їх оцінити та порівняти з іншими моделями. Деякі методи оцінки точності прогнозів можна знайти тут , але для цього важливо розділити свої серії на навчальний та тестовий набір, як пояснено у посиланні.