Методика прогнозування 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, я не міг би відрізняти змінну). Я не думав про коінтеграцію та сезонність, але мав враження, що вищевказаний метод допоможе піклуватися про будь-яку тенденцію змінних.
youjustreadthis

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

@youjustreadthis Я включив відповідь нижче. Я настійно рекомендую розглянути деякі її наслідки
Яків H

Відповіді:


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). Якщо всі тести підтверджують, що ваша серія є 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. Оцініть прогнози

Після того, як ви зробили свої прогнози, ви повинні їх оцінити та порівняти з іншими моделями. Деякі методи оцінки точності прогнозів можна знайти тут , але для цього важливо розділити свої серії на навчальний та тестовий набір, як пояснено у посиланні.


Дуже дякую за цю детальну відповідь! Що стосується тесту Йохансена на коінтеграцію, чи змінюється реалізація, якщо включено більше двох змінних? Повірте, я читав, що багатоміграційна інтеграція несе в собі власні підводні камені. Вибачте, якщо це краще підходить для власного питання.
youjustreadthis

1
Ні, ви можете зробити це з тим же кодом, що і вище, але ви можете знайти в цьому випадку більше одного коінтегруючого вектора. Єдине обмеження подібного роду - це тест Енгл-Грейнджера, який підходить лише для біваріантних серій, але зазвичай краще в цьому випадку.
Regis A. Ely

1
Це посилання може допомогти запустити та інтерпретувати тести johansenn.
Regis A. Ely

Чудова робота! Хоча я відредагував деякі форматування та написання. Зауважте, що приємно мати шматочки коду (навіть такі маленькі, як імена функцій) у задній частині ', наприклад predict. Більші фрагменти коду можна відформатувати у вигляді коду, вибравши текст і натиснувши кнопку «цитати» у верхній частині вікна редактора.
Річард Харді

@ RichardHardy, приємний контур процедури оцінки VAR. Однак я думаю, що ви, можливо, проігнорували той факт, що ОП хоче прогнозувати. Отже, він / вона, швидше за все, захоче оцінити в рівнях.
Яків Н

10

Я думав, що додам до Regis A Ely дуже приємну відповідь. Його відповідь не є помилковою, але використання VAR для прогнозування відрізняється від використання VAR для виконання інших речей типу VAR (наприклад, IRF, FEVD, Historical Decomp. Тощо.). Отже, деякі кроки, викладені Regis A Ely, негативно вплинуть на ваш прогноз у деяких випадках.

Відмова від відповідальності:

Коли я маю на увазі нестаціонарні дані, я маю на увазі, що серія містить стохастичну тенденцію. Якщо дані мають часовий / сезонний тренд, їх необхідно відповідним чином відфільтрувати.

Спочатку

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

Друге

При прогнозуванні не потрібно спочатку давати різницю I (1). Ви можете, якщо хочете, подумали, що дивно багато практикуючих не роблять. Пам'ятайте, коли у нас є нестаціонарні серії, ми все одно можемо отримати послідовний оцінювач. Для регресії з одним відставанням залежної змінної це інтуїтивно. Якщо серія слідує за випадковим кроком (тобто нестаціонарним), ми знаємо, що найкраща оцінка того, де він буде наступним періодом, є саме в тому випадку, коли це був останній період (тобто бета - 1). Типова помилка оцінок, отриманих на моделях з нестаціонарними даними, однак відрізняється тим, що строго кажучи, дисперсія оцінки підходить до нескінченності, оскільки Т наближається до нескінченності. Це, однак, не є проблемою для прогнозування. Прогнозування є по суті умовним очікуванням і тому покладається лише на оцінки параметрів вашої моделі, а не на стандартні помилки. Крім того, інтервали прогнозування вашого прогнозу будуть отримані безпосередньо з ваших помилок, шляхом помилок завантаження, або якщо у вас є багато даних через емпіричні інтервали прогнозування (мій улюблений!), Всі три ці підходи не впливають на нестаціонарні дані тому що знову ж таки ваші помилки будуть стаціонарними згідно з нашою помилковою дискусією про регресію вище.

Чому мені все одно?

Тест ADF має низьку потужність, особливо коли серія близька до одиничного кореня, але це не так. Сказав ще один тест АПД, як правило, помилково стверджує, що серія є нестаціонарною, коли насправді її немає.

Припустимо, що ваш тест ADF помилково запевняє, що серія нестаціонарна. Якщо ви зробите всі необхідні перетворення та оціните VECM, ваш прогноз буде неправильним, оскільки ваша модель неправильна. Ось чому люди прогнозують у рівнях.

А як щодо причинності Грейнджера ???

Ви навіть можете перевірити GC з VAR на рівнях, коли дані I (1). Я знаю, це звучить шалено. Ми знаємо, що висновок, як правило, неможливий з нестаціонарними даними. Однак можливо перевірити спільні гіпотези, наприклад, ГК. Це показано в Тоді і Ямамото (1995), який спирається на Сімса, Сток і Ватсона (1990). Про програму див . На веб-сторінці http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html .

Останнє

Якщо ви хочете використовувати свій VAR для речей, крім прогнозування, будьте обережні. VAR в рівнях з нестаціонарними та спільно інтегрованими серіями може дати певні дивні результати. Наприклад, строго кажучи, представлення ковзної середньої величини VAR не існує, оскільки матриця параметрів не буде оберненою. Незважаючи на цей факт, IRF все ще можна отримати. Висновок також неможливий (гіпотези думки про спільність можна перевірити, як обговорювалося вище).

Також турбуйтеся про невеликі зразки. Все, що я обговорював, працює добре у великих зразках, але в невеликих зразках все може стати нерозумним. Особливо це стосується GC з даними I (1).


1
ytxtyt=β0+β1yt1++βpytp+γxtγ^OLSнаближається до нуля (чи є це? де є доказ?), проблема поступово зникає. Але наскільки великий зразок для цього потрібен? Поки не буде надано доказ, я б продовжував уникати помилкових стосунків.
Річард Харді

1
Що стосується Чому мені все одно? , якщо процес має корінь, який дуже близький до одиничного кореня, він поводиться майже так само, як процес з одиничним коренем. Таким чином, при прогнозуванні існує невелика різниця між припущенням, що потрясіння постійні, і тим, що вони зникають надзвичайно повільно. Якщо ви не прогнозуєте дуже далеко в майбутнє, результат буде практично однаковим. Ось чому я не надто переживаю за тест одиничного кореня, який має низьку потужність для локальних альтернатив.
Річард Харді

1
Ще одна невелика примітка, що стосується Першого : коли ви говорите про тест ADF в " Чому мені все одно?" , ви кажете, що "ваш прогноз буде неправильним, тому що ваша модель неправильна". Ну, це стосується і Першого , чи не так? Прогнозування за допомогою моделі, в якій ліва частина розходяться від правої сторони справді характеризується вищенаведеною цитатою.
Річард Харді

1
@ Richardhardy Для підтвердження мого першого твердження див. Главу 18 у Гамільтоні 1994. Зокрема, розділ 18.2, Ліки від помилкової регресії. Варто зазначити, що оцінювачі OLS також ефективні, оскільки вони зближуються зі швидкістю sqrt T.
Яків H

2
@erdogancevher посилання Джайлса обговорює набагато більше, ніж попередні упередження, зокрема читайте статті Тоди та Ямамото, які прямо підтверджують, що GC є можливим в рамках VI CI. Далі, я думаю, що ви пропустили точку про проблему з попереднім тестом. Проблема з тестом на одиничний корінь полягає в тому, що всі вони мають низьку потужність у відношенні кореневого кореневого процесу. Сказав інший спосіб, коли у вас є корінь близько одиниці, ваш тест, ймовірно, знайде одиничний корінь. Це призведе до того, що ви зробите купу непотрібної фільтрації даних, яка в декілька разів вплине на ваші результати. Тому краще, IMO використовувати VAR
Яків H
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.