Этот пример иллюстрирует использование векторной модели коррекции ошибок (VEC) в качестве линейной альтернативы макроэкономической модели Smets-Wouters Dynamic Stochastic General Equilibrium (DSGE), и применяет многие методы Smets-Wouters к описанию экономики Соединенных Штатов.
Кроме того, в примере описываются многие из более ярких функций анализа нескольких временных рядов, обнаруженных в Econometrics Toolbox™, включая оценку, симуляцию Монте-Карло, фильтрацию, прогнозирование и функциональность импульсной характеристики. Пример также иллюстрирует, как определить ранг коинтеграции с помощью набора тестов коинтеграции Йохансена, а также наложение ограничений на параметр во время оценки.
Модель Сметса-Ваутерса ([11], [12], [13]) является нелинейной системой уравнений в виде модели DSGE. Модели DSGE пытаются объяснить совокупное экономическое поведение, такое как рост, бизнес-циклы и эффекты денежно-кредитной и фискальной политики, используя макроэкономические модели, вытекающие из микроэкономических принципов.
Модели DSGE являются динамическими; они изучают, как экономика изменяется с течением времени. Модели DSGE также являются стохастическими; они учитывают эффекты случайных потрясений, включая технологические изменения и колебания цен.
Поскольку модели DSGE начинаются с микроэкономических принципов ограниченного принятия решений, а не полагаются на исторические корреляции, их труднее решить и проанализировать. Однако, поскольку они также основаны на настройках экономических агентов, модели DSGE предлагают естественный базовый показатель для оценки эффектов изменений политики.
Напротив, традиционные макроэконометрические модели прогнозирования оценивают отношения между переменными в различных секторах экономики с помощью исторических данных и, как правило, легче реализовывать, анализировать и интерпретировать.
В этом примере реализуется традиционная модель линейного прогнозирования. Цель состоит не в том, чтобы воспроизвести результаты исходной модели Smets-Wouters DSGE, и не в том, чтобы интерпретировать ее результаты. Скорее этот пример иллюстрирует, как можно использовать функции Econometrics Toolbox для поддержки рабочего процесса, аналогичного процессу Smets и Wouters [13], используя одни и те же макроэкономические данные временных рядов.
Этот пример использует модель коинтегрированного вектора авторегрессии (VAR), также известную как вектор модель коррекции ошибок (VEC), обе из которых поддерживаются различными функциями в Econometrics Toolbox. Эта описательная макроэкономическая модель является хорошей начальной точкой для изучения влияния различных потрясений на экономику Соединенных Штатов, особенно в период финансового кризиса 2008 года. Этот пример использует тесты коинтеграции Йохансена и иллюстрирует функции оценки, симуляции, фильтрации и прогнозирования VAR и VEC многомерных временных рядов, моделей в Econometrics Toolbox. В стиле Smets и Wouters этот пример моделирует ту же самую 7 серию ответов: выход (ВВП), цены (дефлятор ВВП), заработная плата, часы работы, процентные ставки (Федеральные фонды), потребление и инвестиции.
Кроме того, чтобы выделить манипуляции и управление ежеквартальными экономическими данными временных рядов, этот пример использует timetable
и datetime
типы данных.
Файл Data_USEconVECModel.mat
содержит соответствующий экономический ряд, хранящийся в двух расписаниях: FRED
и CBO
. FRED
содержит выборку, к которой подходит модель, и находится в Федеральной резервной экономической базе данных (FRED) [14] для периодов 1957: Q1 (31-Mar-1957) - 2016: Q4 (31 декабря 2016). CBO
исходит из Бюджетного управления Конгресса (CBO) [1] и содержит 10-летние экономические прогнозы для подмножества серии FRED. CBO
находится в прогнозном горизонте; этот пример использует наблюдения в нем для условного прогнозирования и симуляции сверх последних данных FRED.
Используемая серия ответов:
FRED Series Description ------------ ---------------------------------------------------------------------------- GDP Gross Domestic Product (USD billions, Quarterly) GDPDEF Gross Domestic Product Implicit Price Deflator (Index 2009 = 100, Quarterly) COE Paid Compensation of Employees (USD billions, Quarterly) HOANBS Nonfarm Business Sector Hours of All Persons (Index 2009 = 100, Quarterly) FEDFUNDS Effective Federal Funds Rate (Annualized, Percent, Monthly) PCEC Personal Consumption Expenditures (USD billions, Quarterly) GPDI Gross Private Domestic Investment (USD billions, Quarterly)
load Data_USEconVECModel
Если у вас есть лицензия Datafeed Toolbox™, то можно загрузить, синхронизировать и объединить последние экономические данные непосредственно из FRED, чтобы лучше изучить более комплексный рабочий процесс. Чтобы загрузить самые последние данные непосредственно из FRED, пользователи Datafeed Toolbox могут запустить следующую команду:
FRED = Example_USEconData;
FRED возвращает все данные в начале каждого периода. За исключением федеральных фондов, FRED возвращает ежеквартальные, сезонно скорректированные серии в начале каждого квартала. В начале каждого месяца ежемесячно отчитываются федеральные фонды. Поскольку неявный дефлятор цен ВВП находится в модели, этот пример использует номинальные ряды на всем протяжении.
Для согласованности с Smets и Wouters этот пример синхронизирует данные FRED с ежеквартальной периодичностью с помощью соглашения об отчетности в конце квартала.
Например, FRED сообщает 2012:Q1 ВВП от 01-Jan-2012 и 2012:M3 федеральных фондах от 01-Mar-2012. При синхронизации с общей периодичностью в конце квартала обе серии связаны с 31-Mar-2012, последним днем первого квартала 2012 года. В течение любого данного года YYYY, данные для Q1, Q2, Q3 и Q4 соответствуют 31 марта YYYY, 30 июня YYYY, 30 сентября YYYY, и 31 декабря YYYY, соответственно.
Учитывая необработанные данные FRED, преобразуйте ряд как в Smets и Wouters [13], в котором процентная ставка (FEDFUNDS
) не изменяется, в то время как оставшиеся ряды, которые демонстрируют экспоненциальный рост, выражаются в 100 раз больше логарифма соответствующего сообщаемого значения. Для простоты сохраните те же имена рядов как для необработанных, так и для преобразованных данных.
Data = FRED; % Assign dates and raw data Data.GDP = 100*log(FRED.GDP); % GDP (output) Data.GDPDEF = 100*log(FRED.GDPDEF); % GDP implicit price deflator Data.COE = 100*log(FRED.COE); % Compensation of employees (wages) Data.HOANBS = 100*log(FRED.HOANBS); % Hours of all persons (hours) Data.PCEC = 100*log(FRED.PCEC); % Personal consumption expenditures (consumption) Data.GPDI = 100*log(FRED.GPDI); % Gross private domestic investment (investment)
Чтобы изучить данные в модели, постройте график каждой серии и наложите затененные полосы для определения периодов экономического спада, определенных Национальным бюро экономических исследований (NBER) [9]. The recessionplot
графики функций спада, и этот пример включает спады в графических результатах, где это уместно. recessionplot
произвольно устанавливает середину месяца в качестве начальной или конечной даты спада.
figure subplot(2,2,1) plot(Data.Time, [Data.GDP, Data.GDPDEF]) recessionplot title('GDP & Price Deflator') ylabel('Logarithm (x100)') h = legend('GDP','GDPDEF','Location','Best'); h.Box = 'off'; subplot(2,2,2); plot(Data.Time, [Data.PCEC Data.GPDI]) recessionplot title('Consumption & Investment') ylabel('Logarithm (x100)') h = legend('PCEC','GPDI','Location','Best'); h.Box = 'off'; subplot(2,2,3) plot(Data.Time, [Data.COE Data.HOANBS]) recessionplot title('Wages & Hours') ylabel('Logarithm (x100)') h = legend('COE','HOANBS','Location','Best'); h.Box = 'off'; subplot(2,2,4) plot(Data.Time, Data.FEDFUNDS) recessionplot title('Federal Funds') ylabel('Percent')
Спецификация соответствующей модели VEC может включать личный опыт и знакомство с данными, специальные анализы, промышленные лучшие практики, нормативные мандаты и статистическую строгость. Кроме того, спецификация модели может быть применена к метрикам в выборке, таким как информационные критерии AIC/BIC и выходная эффективность прогноза. Хотя многие исследователи часто включают элементы всех этих метрик итеративным способом, сделать это здесь не возможности примера.
Учитывая, что Smets и Wouters [13] подчеркивают несборочную эффективность прогноза, этот пример не оценивает измерения качества подгонки в выборке. Однако Econometrics Toolbox поддерживает такие оценки (например, см aicbic
).
Чтобы понять подход спецификации в этом примере, полезно наблюдать, что оценка модели VEC выполняется в два этапа:
Оцените коинтегрирующие отношения. Это часто упоминается как шаг Йохансена. Для нестационарных временных рядов коинтегрирующий ранг (r) - количество независимых линейных комбинаций, для которых является стационарным, и может быть свободно интерпретировано как количество долгосрочных равновесных отношений в. Другими словами, хотя серия компонентов в может быть индивидуально нестационарной, различные линейные комбинации из них являются стационарными. Количество стационарных независимых линейных комбинаций является рангом коинтеграции, а соответствующие стационарные линейные комбинации являются соотношениями коинтеграции.
Оцените модель VAR в различиях, используя коинтегрирующие отношения первого шага в качестве предикторов. Поскольку включение предикторов добавляет регрессионный компонент в модель VAR, это часто упоминается как шаг VARX.
Рабочий процесс для определения соответствующей модели VEC или коинтегрированной VAR:
Определите длину задержки (P
) модели. Независимо от того, предпочитаете ли вы форму VEC (P-1) в различиях или форму VAR (P) в уровнях, P представляет количество откликов presample, необходимых для инициализации модели.
Определите коинтегрирующий ранг (r
).
Определите модель коинтеграции, которая лучше всего захватывает детерминированные условия данных.
В совокупности эта последовательность определяет отношения коинтеграции и соответствует первому шагу двухэтапного подхода оценки.
Наложите дополнительную структуру на параметры модели VARX:
Оцените неограниченную модель VARX, которая будет служить базовой моделью.
Определите и наложите подходящие ограничения на параметры модели VARX, включая константу, коэффициенты регрессии и авторегрессивные коэффициенты.
Сначала задайте длину задержки (P
) модели VEC (P-1). Этот пример использует простой подход и принимает руководство Johansen [4], стр. 4, и Juselius [5], стр. 72. Предположим, что P
= 2 лага достаточны для описания динамических взаимодействий между различными рядами.
Преимущество низкого порядка задержки - простота модели. В частности, каждая дополнительная задержка модели VEC без ограничений требует оценки дополнительных параметров 7 * 7 = 49, поэтому низкий порядок задержки уменьшает эффекты избыточной параметризации.
Оценка коинтеграционных отношений
Особенно важным шагом является определение ранга коинтеграции всех рядов одновременно, и для этого требуется модель коинтеграции. Поскольку данные четко показывают временные тренды, исследуйте возможность того, что данные могут быть описаны с помощью любой из двух параметрических форм Йохансена, которые включают линейные временные тренды.
Более общей из этих двух форм является модель Йохансена H *, в которой компонент полной константы появляется как внутри (), так и снаружи () коинтегрирующих отношений, в то время как временной тренд () ограничен коинтегрирующими отношениями:
Поскольку компонент константы появляется внутри и вне коинтегрирующих отношений, общая константа () неограниченна, и модель H * становится:
Важно заметить, что модель VEC выражена в различиях, и поэтому неограниченная константа () представляет линейные тренды на соответствующих уровнях.
Вторая модель является моделью H1 Йохансена, в которой модельная константа также неограниченна, но коинтегрирующие отношения не содержат временного тренда:
Модель H1 подчеркивает неограниченный характер константы:
Обратите внимание, что модель H1 является ограниченной параметризацией модели H *, поскольку модель H1 накладывает дополнительное r
ограничения параметров модели H * без ограничений. В частности, модели H1 исключают временные тренды в коинтегрирующих отношениях, ограничивая = 0. Эта ситуация, которая может возникнуть, когда коинтегрирующие отношения дрейфуют по общему линейному тренду и наклон тренда одинаков для ряда с линейным трендом.
В обеих моделях ответы следующие
с инновациями
Для определения коинтегрирующего ранга (r
), используйте функцию тестирования гипотез Йохансена jcitest
, который реализует тест трассировки Йохансена по умолчанию.
jcitest
возвращает логический индикатор принятия решений (h
) в каких h
= 1 (true) указывает на отказ от значения null ранга коинтеграции (r
) в пользу альтернативы и h
= 0 (false) указывает на отказ отклонить значение null. Последующие выходы являются p-значением, тестовой статистикой, критическим значением и максимальными оценками правдоподобия параметров модели VEC для каждого проверенного коинтегрирующего ранга. По умолчанию MATLAB ® отображает результаты тестирования в табличной форме.
P = 2; % The number of VEC(P-1) model lags Y = Data.Variables; % Extract all data from the timetable for convenience [h,pValue,stat,cValue,mleHstar] = jcitest(Y, 'lags', P-1, 'Model', 'H*'); [h,pValue,stat,cValue,mleH1] = jcitest(Y, 'lags', P-1, 'Model', 'H1');
************************ Results Summary (Test 1) Data: Y Effective sample size: 238 Model: H* Lags: 1 Statistic: trace Significance level: 0.05 r h stat cValue pValue eigVal ---------------------------------------- 0 1 266.1410 150.5530 0.0010 0.3470 1 1 164.7259 117.7103 0.0010 0.2217 2 1 105.0660 88.8042 0.0028 0.1665 3 0 61.7326 63.8766 0.0748 0.1323 4 0 27.9494 42.9154 0.6336 0.0446 5 0 17.0919 25.8723 0.4470 0.0379 6 0 7.9062 12.5174 0.2927 0.0327 ************************ Results Summary (Test 1) Data: Y Effective sample size: 238 Model: H1 Lags: 1 Statistic: trace Significance level: 0.05 r h stat cValue pValue eigVal ---------------------------------------- 0 1 261.9245 125.6176 0.0010 0.3460 1 1 160.8737 95.7541 0.0010 0.2212 2 1 101.3621 69.8187 0.0010 0.1661 3 1 58.1247 47.8564 0.0045 0.1323 4 0 24.3440 29.7976 0.1866 0.0446 5 0 13.4866 15.4948 0.0982 0.0340 6 1 5.2631 3.8415 0.0219 0.0219
Результаты теста H * показывают, что тест не отклоняется r
= 3 ранг на уровне 5% значимости, но не на уровне 10%, при котором r
= 4 не удалось бы отклонить (см. p-значения в столбце 5). Для сравнения, тест H1 сильно не может быть отклонен r
= 4 коинтеграционный ранг на уровне 5%. Поэтому оно выглядит как будто r
= 4 коинтегрирующих отношений разумно.
Использование r
= 4 как коинтегрирующий ранг, определите, какая из двух моделей лучше описывает данные с помощью двух основанных на вероятностном соотношении подходов к проверке.
Первый подход выполняет тест коэффициента правдоподобия, используя lratiotest
функция, в которой модель H * является неограниченной моделью, а модель H1 является ограниченной моделью с r
ограничения. Получившаяся тестовая статистика протекает асимптотически, см. [8] стр. 342.
Как использовать lratiotest
, извлеките значения логарифмической правдоподобности из предполагаемых моделей H * и H1, возвращенных jcitest
для коинтегрирующего ранга r
= 4, и затем выполните тест отношения правдоподобия.
r = 4; % Cointegrating rank uLogL = mleHstar.r4.rLL; % Loglikelihood of the unrestricted H* model for r = 4 rLogL = mleH1.r4.rLL; % Loglikelihood of the restricted H1 model for r = 4 [h,pValue,stat,cValue] = lratiotest(uLogL, rLogL, r)
h = logical 0 pValue = 0.9618 stat = 0.6111 cValue = 9.4877
Тест не может отклонить модель ограниченного H1.
Второй подход также выполняет тест коэффициента правдоподобия, но проверяет пространство, охватываемое векторами в коинтегрирующих отношениях, используя jcontest
функция. Следующий тест определяет, можно ли наложить нулевое ограничение (ограничение исключения) на коэффициент тренда модели H *. В частности, тест исключает временный тренд в коинтегрирующих отношениях и накладывает ограничение на всю экономическую систему. В сущности, он определяет, лежит ли ограниченный вектор коинтеграции в пространстве стационарности, охватываемом матрицей коинтеграции, см. [6] стр. 175-178.
Модель H * ограничивает линейный временной тренд коинтегрирующими отношениями, и можно оценить его, добавив дополнительную строку к матрице коинтеграции. Это более очевидно при переписывании модели H * как:
Теперь отформатируйте матрицу ограничений (R
) таким, что
и проведите тест, используя jcontest
.
R = [zeros(1,size(Y,2)) 1]'; % Constraint matrix [h,pValue,stat,cValue] = jcontest(Y,r,'BCon',R,'Model','H*','Lags',P-1)
h = logical 0 pValue = 0.9618 stat = 0.6111 cValue = 9.4877
The jcontest
и lratiotest
результаты идентичны, то есть решения не могут отклонить модель ограниченного H1.
Сводные данные, результаты теста гипотезы предполагают, что ранг коинтеграции равен 4, и модель имеет H1 параметрическую форму Йохансена. Оценка коинтегрирующих отношений завершена.
Оцените модель VARX в различиях
Можно выразить модель VEC (1) как модель VARX (1) в различиях, в которых коинтегрирующие отношения являются предикторами, а матрица корректировки () является соответствующим коэффициентом регрессии:
Чтобы определить ограничения на параметры модели VARX, важно понять, что параметры коинтеграции Йохансена (), оцененные на первом шаге, сходятся со скоростью, пропорциональной размеру выборки. Поэтому использование коинтегрирующих отношений, полученных на первом этапе, в качестве предикторов на втором этапе не влияет на распределение параметров VARX второго этапа. Напротив, параметры VARX второго шага асимптотически нормально распределены и сходятся с обычной скоростью, и поэтому можно интерпретировать их статистику обычным способом.
Когда вы работаете с ежеквартальными экономическими данными, вы должны быть обеспокоены избыточной параметризацией модели относительно размера выборки, доступной для оценки. Это часть обоснования работы с низкой длиной отставания.
Оцените базовую модель с помощью estimate
функция. Верните стандартные ошибки оценок параметров, чтобы вы могли вычислить статистику t и использовать их, чтобы дополнительно ограничить предварительно оцененную базовую модель VEC (1).
[Mdl,se] = estimate(vecm(size(Y,2),r,P-1), Y, 'Model', 'H1');
Поскольку ошибки расчета параметра VARX асимптотически нормально распределены, можно смягчить эффект избыточной параметризации и улучшить ненужное прогнозирование эффективности исключив (установив на нуль) все параметры VARX, которые имеют статистическую величину t, которая меньше 2 в абсолютном значении.
Создайте модель VEC той же параметрической формы, что и базовая модель Mdl
, но накладывают ограничения исключения на параметры VARX второго шага, которые включают константу (), краткосрочную матрицу () и матрицу корректировки (). Некоторые ссылки ссылаются на ограничения исключения как на ограничения подмножества, которые являются частным случаем типа индивидуальных ограничений, поддерживаемых моделями VEC и VAR.
toFit = vecm(Mdl.NumSeries, Mdl.Rank, Mdl.P - 1); toFit.Constant(abs(Mdl.Constant ./ se.Constant) < 2) = 0; toFit.ShortRun{1}(abs(Mdl.ShortRun{1} ./ se.ShortRun{1}) < 2) = 0; toFit.Adjustment(abs(Mdl.Adjustment ./ se.Adjustment) < 2) = 0;
Подгонка модели ограниченного H1, а затем построение графика коинтегрирующих отношений конечной модели для ссылки.
Fit = estimate(toFit, Y, 'Model', 'H1'); B = [Fit.Cointegration ; Fit.CointegrationConstant' ; Fit.CointegrationTrend']; figure plot(Data.Time, [Y ones(size(Y,1),1) (-(Fit.P - 1):(size(Y,1) - Fit.P))'] * B) recessionplot title('Cointegrating Relations')
График предполагает, что коинтегрирующие отношения являются приблизительно стационарными, хотя периоды волатильности и резких изменений кажутся кластерными вокруг экономических спадов.
Когда экономические условия изменяются, особенно в ответ на политику решение, можно оценить чувствительность системы с помощью анализа импульсной характеристики.
Вычислите функцию импульсной характеристики (IRF) номинального ВВП до шока с одним стандартом для каждой экономической переменной с помощью armairf
функция. По умолчанию armairf
отображает ортогональную импульсную характеристику, в которой остаточная ковариационная матрица ортогональна своей факторизацией Холесского. The armairf
функция также поддерживает обобщенную импульсную характеристику Pesaran и Shin [10], но для номинального ВВП результаты аналогичны по профилю.
The armairf
функция возвращает IRF в трехмерном массиве. Каждая страница (третья размерность) захватывает ответ определенной переменной в пределах заданного прогнозируемого горизонта на шок с одним стандартным отклонением для всех переменных в системе. В частности, элемент t, j, k является ответом переменной k в момент t в прогнозном горизонте на инновационный шок к переменному j в момент 0. Столбцы и страницы соответствуют переменным отклика в данных, и t = 0, 1,... fh
, где fh
- прогнозируемая длина горизонта.
Преобразуйте подобранную модель VEC в ее коинтегрированное представление VAR с помощью varm
функция преобразования. Затем вычислите IRF за 40 кварталов (10 лет).
horizon = 40; VAR = varm(Fit); IRF = armairf(VAR.AR, {}, 'InnovCov', VAR.Covariance, 'NumObs', horizon); h = figure; iSeries = 1; % Column 1 is associated with GDP series for i = 1:Mdl.NumSeries subplot(Mdl.NumSeries,1,i) plot(IRF(:,i,iSeries)) title("GDP Impulse Response to " + Data.Properties.VariableNames(i)) end screen = get(h,'Parent'); set(h,'Position',[h.Position(1) screen.MonitorPositions(4)*0.1 h.Position(3) screen.MonitorPositions(4)*0.8]);
Хотя предыдущие графики отображают импульсную характеристику в течение 10 лет, каждый ответ на самом деле приближается к установившемуся асимптотическому уровню, указывающему на единичный корень и предполагающему, что потрясения являются постоянными и оказывают постоянные эффекты на номинальный ВВП.
Чтобы проверить точность модели, итерационно вычислите ненужные прогнозы. Выполните эксперимент, аналогичный эксперименту, предложенному Smets and Wouters [13], стр. 21-22:
Оцените модель VEC за начальный 20-летний период дискретизации 1957:Q1 - 1976:Q4
Прогнозируйте данные на 1, 2, 3 и 4 квартала в будущем.
Переоцените модель за период 1957:Q1- 1977:Q1, добавив данные следующего квартала к выборке, тем самым увеличив размер выборки, доступной для оценки.
Повторите шаги 2 и 3, накопив временные ряды прогнозов до конца выборки.
Y = Data; % Work directly with the timetable T0 = datetime(1976,12,31); % Initialize forecast origin (31-Dec-1976 = (1976,12,31) triplet) T = T0; horizon = 4; % Forecast horizon in quarters (4 = 1 year) numForecasts = numel(Y.Time(timerange(T,Y.Time(end),'closed'))) - horizon; yForecast = nan(numForecasts, horizon, Mdl.NumSeries); for t = 1:numForecasts % % Get the end-of-quarter dates for the current forecast origin. % quarterlyDates = timerange(Y.Time(1), T, 'closed'); % % Estimate the VEC model. % Fit = estimate(toFit, Y{quarterlyDates,:}, 'Model', 'H1'); % % Forecast the model at each quarter out to the forecast horizon. % % Store the forecasts for the current origin (T) as a 3-D array in which % the 1st page stores all forecasts for the 1st series (GDP), the 2nd page % stores all forecasts for the 2nd series (GDPDEF), and so forth. This % storage convention facilitates the access of data from the timetable % of forecasts created below. % yForecast(t,:,:) = forecast(Fit, horizon, Y{quarterlyDates,:}); % % Update the forecast origin to include the data of the next quarter. % T = dateshift(T, 'end', 'quarter', 'next'); end
Вычислите прогнозные даты источника, общие для всех прогнозов в прогнозном горизонте, и конкретные квартальные даты, к которым применяется каждый из прогнозов. Затем составьте расписание, общие метки времени которого (вдоль каждой строки) являются датами каждого квартального источника прогноза. При каждом источнике прогноза храните прогнозы каждой из 7 серий 1, 2, 3 и 4 кварталов в будущем, а также ежеквартальные даты, на которые применяется каждый прогноз. Расписание форматировано таким образом, чтобы облегчить доступ к прогнозам данного экономического ряда.
originDates = dateshift(T0, 'end', 'quarter', (0:(numForecasts-1))'); forecastDates = NaT(numForecasts,horizon); for i = 1:horizon forecastDates(:,i) = dateshift(originDates, 'end', 'quarter', i); end Forecast = timetable(forecastDates,'RowTimes',originDates, 'VariableNames', {'Times'}); for i = 1:size(Y,2) Forecast.(Y.Properties.VariableNames{i}) = yForecast(:,:,i); end
Используя только что полученные итерационные прогнозы, оцените прогнозную точность реального ВВП (номинальный ВВП за вычетом дефлятора цен ВВП) путем построения его прогнозов и истинных отчетных значений на прогнозном горизонте (4 квартала вперед). Также постройте график соответствующих ошибок прогноза.
forecastRealGDP = Forecast.GDP(:,4) - Forecast.GDPDEF(:,4); realGDP = Y(Forecast.Times(:,4),:).GDP - Y(Forecast.Times(:,4),:).GDPDEF; figure subplot(2,1,1) plot(Forecast.Times(:,4), forecastRealGDP, 'r') hold on plot(Forecast.Times(:,4), realGDP, 'b') title('Real GDP vs. Forecast: 4-Quarters-Ahead') ylabel('USD Billion') recessionplot h = legend('Forecast','Actual','Location','Best'); h.Box = 'off'; subplot(2,1,2) plot(Forecast.Times(:,4), forecastRealGDP - realGDP) title('Real GDP Forecast Error: 4-Quarters-Ahead') ylabel('USD Billion') recessionplot
Графики показывают, что во время и вскоре после периодов экономического спада прогнозы ВВП, как правило, переоценивают истинный ВВП. В частности, наблюдать большие положительные ошибки после финансового кризиса 2008 года и в первой половине 2009 года.
Для ссылки, хотя графики не показывают прогнозные ошибки модели VARX без ограничений исключения, накладываемых на постоянные, краткосрочные и корректирующие параметры, ограниченные результаты на графиках представляют приблизительно 25-процентное сокращение среднеквадратичной ошибки (RMSE) реальных прогнозов ВВП.
Более подробно изучить прогнозы в связи с финансовым кризисом 2008 года. В частности, исследуйте прогнозную эффективность непосредственно перед кризисом, когда экономика переходит в рецессию, а затем снова после кризиса, когда последует восстановление. Для полноты проверьте поведение прогноза с помощью самых последних данных.
В стиле Smets and Wouters [13] используйте 12-квартальный (3-летний) прогнозный горизонт. В попытке включить прогнозы более чем одной серии, изучить реальный ВВП.
Оценка и прогноз реального ВВП на 12 кварталов в будущем с использованием данных к концу 2007 года, непосредственно перед ипотечным кризисом.
horizon = 12; % 12 quarters = 3 years (Table 3 of Smets and Wouters <docid:econ_ug#mw_338db74a-1baa-4a34-88a3-849284bf115a>) T = datetime(2007,12,31); % Forecast origin just prior to the crisis (31-Dec-2007 = (2007,12,31) triplet) Fit = estimate(toFit, Y{timerange(Y.Time(1),T,'closed'),:}, 'Model', 'H1'); [yForecast, yMSE] = forecast(Fit, horizon, Y{timerange(Y.Time(1),T,'closed'),:}); sigma = zeros(horizon,1); % Forecast standard errors for i = 1:horizon sigma(i) = sqrt(yMSE{i}(1,1) - 2*yMSE{i}(1,2) + yMSE{i}(2,2)); end forecastDates = dateshift(T, 'end', 'quarter', 1:horizon); figure plot(forecastDates, (yForecast(:,1) - yForecast(:,2)) + sigma, '-.r') hold on plot(forecastDates, yForecast(:,1) - yForecast(:,2), 'r') plot(forecastDates, (yForecast(:,1) - yForecast(:,2)) - sigma, '-.r') plot(forecastDates, Y(forecastDates,:).GDP - Y(forecastDates,:).GDPDEF, 'b') title("Real GDP vs. 12-Q Forecast: Origin = " + string(T)) ylabel('USD Billion') recessionplot h = legend('Forecast +1\sigma', 'Forecast', 'Forecast -1\sigma', 'Actual', 'Location', 'Best'); h.Box = 'off';
Предполагаемая модель не предвидит драматического экономического спада. Учитывая величины кризиса, отказ охватить масштабы рецессии, возможно, несколько неудивительна.
Оценка и прогнозирование реального ВВП на 12 кварталов в будущем с использованием данных до середины 2009 года, что как раз после ипотечного кризиса.
T = datetime(2009,6,30); % Forecast origin just after the crisis (30-Jun-2009 = (2009,6,30) triplet) Fit = estimate(toFit, Y{timerange(Y.Time(1),T,'closed'),:}, 'Model', 'H1'); [yForecast, yMSE] = forecast(Fit, horizon, Y{timerange(Y.Time(1),T,'closed'),:}); sigma = zeros(horizon,1); % Forecast standard errors for i = 1:horizon sigma(i) = sqrt(yMSE{i}(1,1) - 2*yMSE{i}(1,2) + yMSE{i}(2,2)); end forecastDates = dateshift(T, 'end', 'quarter', 1:horizon); figure plot(forecastDates, (yForecast(:,1) - yForecast(:,2)) + sigma, '-.r') hold on plot(forecastDates, yForecast(:,1) - yForecast(:,2), 'r') plot(forecastDates, (yForecast(:,1) - yForecast(:,2)) - sigma, '-.r') plot(forecastDates, Y(forecastDates,:).GDP - Y(forecastDates,:).GDPDEF, 'b') title("Real GDP vs. 12-Q Forecast: Origin = " + string(T)) ylabel('USD Billion') h = legend('Forecast +1\sigma', 'Forecast', 'Forecast -1\sigma', 'Actual', 'Location', 'Best'); h.Box = 'off';
После включения в оценку данных о рецессии прогнозы реального ВВП достаточно хорошо согласуются с истинными значениями. Хотя за пределами прогнозируемого на 2 года горизонта прогнозы по-прежнему представляют собой чрезмерно радужное восстановление экономики.
И наконец, включить последние имеющиеся посткризисные данные.
T = dateshift(Data.Time(end), 'end', 'quarter', -horizon); Fit = estimate(toFit, Y{timerange(Y.Time(1),T,'closed'),:}, 'Model', 'H1'); [yForecast, yMSE] = forecast(Fit, horizon, Y{timerange(Y.Time(1),T,'closed'),:}); sigma = zeros(horizon,1); % Forecast standard errors for i = 1:horizon sigma(i) = sqrt(yMSE{i}(1,1) - 2*yMSE{i}(1,2) + yMSE{i}(2,2)); end forecastDates = dateshift(T, 'end', 'quarter', 1:horizon); figure plot(forecastDates, (yForecast(:,1) - yForecast(:,2)) + sigma, '-.r') hold on plot(forecastDates, yForecast(:,1) - yForecast(:,2), 'r') plot(forecastDates, (yForecast(:,1) - yForecast(:,2)) - sigma, '-.r') plot(forecastDates, Y(forecastDates,:).GDP - Y(forecastDates,:).GDPDEF, 'b') title("Real GDP vs. 12-Q Forecast: Origin = " + string(T)) ylabel('USD Billion') h = legend('Forecast +1\sigma', 'Forecast', 'Forecast -1\sigma', 'Actual', 'Location', 'Best'); h.Box = 'off';
Теперь, когда восстановление набрало определенный импульс и стабилизировалось, трехлетние прогнозы более тесно согласуются с истинными значениями.
Чтобы изучить стабильность и чувствительность анализа, сравните результаты оценки, полученные из двух разных подвыборок.
Следуйте подходу, изложенному Smets and Wouters [13], стр. 28-29, путем проведения анализа чувствительности «что если», называемого контрфактуальным экспериментом. Исследуйте реакцию модели, подогнанной к данным за один период, на шоки, полученные из модели, установленной над другим.
В частности, Сметс и Ваутерс определяют период, заканчивающийся на 1979:Q2 с назначением Пола Волкера председателем Совета управляющих Федеральной резервной системы, как большую инфляцию, и что начиная 1984:Q1 как Великую Умеренность. Разрыв между Великой инфляцией и Великой умеренностью, по-видимому, является переходным периодом и включает две рецессии в начале 80-х годов.
Оцените модель VEC за период с 1957:Q1 по 1979:Q2, а затем снова от 1984:Q1 до последнего квартала, для которого доступны данные. Хотя та же оценка модели предварительной оценки, выполненная для полной выборки выше, может быть повторена для каждой подвыборки, для простоты сохраните ту же модель VEC и ограничения подмножества, используемые ранее.
T1 = datetime(1979,6,30); % Last quarter of Great Inflation (30-Jun-1979 = (1979,6,30) triplet) Y1 = Y(timerange(Y.Time(1),T1,'closed'),:); % Great Inflation data [Fit1,~,~,E1] = estimate(toFit, Y1.Variables, 'Model', 'H1'); T2 = datetime(1984,3,31); % First quarter of Great Moderation (31-Mar-1984 = (1984,3,31) triplet) Y2 = Y(timerange(T2,Y.Time(end),'closed'),:); % Great Moderation data Fit2 = estimate(toFit, Y2.Variables, 'Model', 'H1');
Пропустите выведенные невязки, полученные из первой подвыборки (Большая инфляция), через модель, полученную из самой последней подвыборки (Большая Модерация), используя filter
функция.
Чтобы лучше сравнить фильтрованные ответы, полученные ниже, с подобранными результатами Большой Модерации, полученными выше, инициализируйте фильтр, используя первые P-наблюдения подвыборки Большой Модерации. Другими словами, хотя невязки, выведенные из фильтра Большой Инфляции через подобранную модель, полученную из Большой Модерации, вы инициализируете фильтр с помощью данных начала Великой Модерации.
YY = filter(Fit2, E1, 'Y0', Y2{1:Fit2.P,:}, 'Scale', false); Y2 = Y2((Fit2.P + 1):(size(E1,1) + Fit2.P),:); % Extract relevant data for convenient comparison YY = array2timetable(YY, 'RowTimes', Y2.Time, 'VariableNames', Y.Properties.VariableNames);
Сравните реальные данные по ВВП, представленные во время Великой модерации, с данными, полученными путем фильтрации потрясений от Великой Инфляции через модель, подобранную Великой модерации.
figure plot(YY.Time, Y2.GDP - Y2.GDPDEF, 'b') hold on plot(YY.Time, YY.GDP - YY.GDPDEF, 'r') title('Real GDP Sub-Sample Comparison') ylabel('USD Billion') recessionplot h = legend('Reported Great Moderation Data', 'Filtered Great Inflation Residuals', 'Location', 'Best'); h.Box = 'off';
График предполагает, что отфильтрованные результаты более изменчивы, чем сообщенные данные Большой Модерации, наблюдения, отмеченные Smets и Wouters [13], стр. 30.
Только что выполненная фильтрация фильтрует невязки, полученные из Великой Инфляции, через модель, подобранную для Великой Модерации, но представляет собой только одну альтернативу в рамках более широкой исторической среды моделирования, фильтрации и прогнозирования.
Для примера, хотя анализ этой точки касался главным образом ВВП, интересно отметить, что анализ также обеспечивает достаточно точное представление других рядов, за исключением, возможно, краткосрочных процентных ставок (FEDFUNDS).
В рамках модели Smets-Wouters процентные ставки являются единственной серией, не скорректированной. Более того, Smets и Wouters включают данные только до конца 2004 года, до ипотечного кризиса. В конце 2004 года краткосрочные процентные ставки уже были на низком уровне, но фактически приблизились к нулю в конце 2008 года, когда последовал финансовый кризис и начался спад. Хотя экономика восстановилась, процентные ставки оставались на исторически низких уровнях в течение нескольких лет.
Учитывая, что модели VAR и VEC являются линейными приближениями истинного, но неизвестного вектора процесса, зависимость которого захватывается многообразным Гауссовым распределением, неудивительно столкнуться с отрицательными процентными ставками. Фактически, хотя ставки FEDFUNDS никогда не были отрицательными, другие краткосрочные процентные счета, особенно в Европе, как известно, обеспечивают отрицательные выражения.
Условный анализ тесно связан с стресс- проверку. В частности, значения подмножества переменных задаются заранее, часто подвергаются неблагоприятным условиям или экстремальным значениям, в попытке оценить эффекты на оставшиеся переменные в периоды экономического кризиса.
Одним из подходов к моделированию экономических временных рядов при наличии почти нулевых процентных ставок является выполнение условного прогноза и симуляции с использованием модели, подобранной к Великой Модерации, для сбора последних данных.
В частности, анализ включает 10-летние экономические прогнозы, полученные из Бюджетного управления Конгресса (CBO) [1], которое публикует ежеквартальные прогнозы для следующего подмножества серии FRED:
CBO Series Description ------------ ----------------------------------------------------------------- GDP Gross Domestic Product (USD billions) GDPDEF Gross Domestic Product Implicit Price Deflator (Index 2009 = 100) COE Paid Compensation of Employees (USD billions) TB3M 3-Month Treasury Bill Rate (Annualized, Percent)
Хотя 3-Month ставки T-Bill и FEDFUNDS не идентичны, в последние годы они практически неразличимы. Таким образом, можно использовать 3-Month ставку T-Bill в качестве прокси для ставки FEDFUNDS.
Чтобы получить условные прогнозы, создайте расписание, в котором прогнозы CBO фиксируют будущую эволюцию известных данных, на которых обусловлены неизвестные прогнозы. При форматировании расписания NaN
значения указывают на неизвестные (отсутствующие) прогнозы, обусловленные известной (отсутствующей) информацией.
Что касается серии FRED, все серии CBO, кроме краткосрочной процентной ставки, преобразуются. Преобразуйте ряд и храните их в новом расписании (YF
), который захватывает подмножество ряда, известное заранее и служит данными, на которых вы вычисляете оставшиеся прогнозы.
YF = CBO; % Assign the dates and raw data YF.GDP = 100*log(CBO.GDP); % GDP (output) YF.GDPDEF = 100*log(CBO.GDPDEF); % GDP implicit prices deflator YF.COE = 100*log(CBO.COE); % Compensation of employees (wages)
Исследуйте последние 4 ежеквартальных прогноза CBO и заметьте, что часы, работавшие (HOANBS), потребление (PCEC) и инвестиции (GPDI), отсутствуют (NaNs), потому что CBO не издает прогнозы для этих рядов, в то время как ВВП, дефлятор ВВП (GDPDEF), компенсация (COE) и FEDFUNDS содержит прогнозы CBO.
YF(end-3:end,:)
ans = 4x7 timetable Time GDP GDPDEF COE HOANBS FEDFUNDS PCEC GPDI ___________ ______ ______ ______ ______ ________ ____ ____ 31-Mar-2027 1023.5 492.1 963.14 NaN 2.8 NaN NaN 30-Jun-2027 1024.4 492.6 964.07 NaN 2.8 NaN NaN 30-Sep-2027 1025.4 493.09 964.99 NaN 2.8 NaN NaN 31-Dec-2027 1026.3 493.59 965.89 NaN 2.8 NaN NaN
Сравните прогнозы реального ВВП, выведенные из прогнозов CBO, с прогнозами, полученными из условных прогнозов модели VEC. Для условного прогнозирования номинального ВВП установите прогнозы CBO номинального ВВП в NaN, чтобы указать на отсутствие информации относительно номинального ВВП. Отображение последних 4 квартальных проекций.
YF.GDP(:) = NaN; YF(end-3:end,:)
ans = 4x7 timetable Time GDP GDPDEF COE HOANBS FEDFUNDS PCEC GPDI ___________ ___ ______ ______ ______ ________ ____ ____ 31-Mar-2027 NaN 492.1 963.14 NaN 2.8 NaN NaN 30-Jun-2027 NaN 492.6 964.07 NaN 2.8 NaN NaN 30-Sep-2027 NaN 493.09 964.99 NaN 2.8 NaN NaN 31-Dec-2027 NaN 493.59 965.89 NaN 2.8 NaN NaN
Извлеките ежеквартальные прогнозы CBO после даты последних данных FRED и прогнозируйте неизвестные ряды в зависимости от прогнозов.
The forecast
функция преобразует модель VEC в эквивалентное ей представление пространства состояний и выводит отсутствующие прогнозы с помощью фильтра Калмана. Отсутствующие значения становятся фильтрованными состояниями, вычисленными как минимальное среднее ожидание квадратной ошибки (MMSE).
forecastQuarters = timerange(Y.Time(end),CBO.Time(end),'openleft'); YF = YF(forecastQuarters,:); yForecast = forecast(Fit2, size(YF,1), Y.Variables, 'YF', YF.Variables); yForecast = array2timetable(yForecast, 'RowTimes', YF.Time, 'VariableNames', Y.Properties.VariableNames);
Просмотрите результаты, чтобы увидеть, что отсутствующие серии ВВП, HOANBS, PCEC и GPDI заполнены их условными прогнозами, в то время как серии GDPDEF, COE и FEDFUNDS, используемые для обусловленности, неизменны.
yForecast(end-3:end,:)
ans = 4x7 timetable Time GDP GDPDEF COE HOANBS FEDFUNDS PCEC GPDI ___________ ______ ______ ______ ______ ________ ______ ______ 31-Mar-2027 1024.1 492.1 963.14 488.27 2.8 987.67 837.48 30-Jun-2027 1025 492.6 964.07 488.69 2.8 988.6 838.42 30-Sep-2027 1025.9 493.09 964.99 489.05 2.8 989.5 838.98 31-Dec-2027 1026.7 493.59 965.89 489.4 2.8 990.38 839.51
Сравнение реального ВВП, полученного из условных прогнозов, с прогнозами CBO. Заметьте, что они тесно согласны.
figure plot(YF.Time, 100*log(CBO(forecastQuarters,:).GDP) - YF.GDPDEF, 'b') hold on plot(YF.Time, yForecast.GDP - yForecast.GDPDEF, 'r') title('Real GDP Projection vs. Conditional Forecast') ylabel('USD Billions') h = legend('CBO Real GDP Projection', 'Real GDP Conditional Forecast', 'Location', 'Best'); h.Box = 'off';
Условный анализ не ограничивается только прогнозированием, и распространяется также на симуляцию. Учитывая шаблон NaNs и не-NaNs, найденных в YF
можно вписать неизвестные значения путем выборки из условного, многомерного Гауссова распределения.
Симулируйте 1000 условных путей расчета с simulate
функция.
rng default YY = simulate(Fit2, size(YF,1), 'Y0', Y.Variables, 'YF', YF.Variables, 'NumPaths', 1000);
Постройте график, например, первых 10 выборочных путей реального ВВП.
figure for i = 1:10 plot(YF.Time, YY(:,1,i) - YY(:,2,i)) hold on end title('Real GDP Sample Paths') ylabel('USD Billion')
График предполагает, что распределение реального ВВП существенно варьируется как функция времени, и поэтому другой интересующей метрикой является распределение реального ВВП.
Постройте график функции эмпирической плотности вероятностей (PDF) реального ВВП 5 лет (20 кварталов) в будущее.
YY = permute(squeeze(YY(20,:,:)), [2 1]); figure histogram(YY(:,1) - YY(:,2), 'Normalization', 'pdf') xlabel('Real GDP (USD Billion)') title('5-Year-Ahead Density of Real GDP')
[1] Бюджетное управление Конгресса, бюджетные и экономические данные, 10-Year экономические прогнозы, https://www.cbo.gov/about/products/budget-economic-data#4
.
[2] Del Negro, M., Schorfheide, F., Smets, F. and Wouters, R. «On the Fit of New Keynesian Models». Журнал деловой и экономической статистики. Том 25, № 2, 2007, с. 123-162.
[3] Гамильтон, Джеймс Д. Анализ временных рядов. Princeton, NJ: Princeton University Press, 1994.
[4] Йохансен, С. Основанный на вероятностях вывод в коинтегрированных векторных авторегрессивных моделях. Oxford: Oxford University Press, 1995.
[5] Juselius, K. Cointegrated VAR Model. Oxford: Oxford University Press, 2006.
[6] Кимболл, М. «Количественная аналитика базовой неомонетаристской модели». Журнал денег, кредита и банковского дела, часть 2: ликвидность, денежно-кредитная политика и финансовое посредничество. Том 27, № 4, 1995, стр. 1241-1277.
[7] Lütkepohl, Helmut, and Markus Krätzig, редактора. Эконометрика прикладных временных рядов. 1-я ред. Cambridge University Press, 2004. https://doi.org/10.1017/CBO9780511606885.
[8] Люткепол, Гельмут. Новое введение в анализ нескольких временных рядов. Нью-Йорк, Нью-Йорк: Springer-Verlag, 2007.
[9] Национальное бюро экономических исследований (НБЭР), Расширение и сокращения бизнес-цикла, https://www.nber.org/cycles/cyclesmain.html
.
[10] Pesaran, H. H., and Y. Shin. Обобщенный анализ импульсной характеристики в линейных многомерных моделях. Экономические буквы. Том 58, 1998, стр. 17-29.
[11] Smets, F. and Wouters, R. «An Estimatic Stochastic Dynamic General Equilibrium Model of the Euro Area». Европейский центральный банк, серия рабочих документов. № 171, 2002.
[12] Smets, F. and Wouters, R. «Comparing Shocks and Frictions in US and Euro Area Bayesian DSGE Approach». Европейский центральный банк, серия рабочих документов. № 391, 2004.
[13] Smets, F. and Wouters, R. «Shocks and Frictions in US Business Cycles: A Bayesian DSGE Approach». Европейский центральный банк, серия рабочих документов. № 722, 2007.
[14] Федеральные резервные экономические данные США (FRED), Федеральный резервный банк Сент-Луиса, https://fred.stlouisfed.org/
.