Использование фильтра Ходрика-Прескотта для воспроизведения их исходного результата

В этом примере показано, как использовать фильтр Ходрика-Прескотта для разложения временных рядов.

Фильтр Ходрика-Прескотта разделяет временные ряды на ростовые и циклические компоненты с

yt=gt+ct

где yt - временные ряды, gt является компонентом роста yt, и ct - циклический компонент yt для t=1,...,T.

Целевая функция для фильтра Ходрика-Прескотта имеет вид

t=1Tct2+λt=2T-1((gt+1-gt)-(gt-gt-1))2

с параметром сглаживания λ. Задача программирования состоит в том, чтобы минимизировать цель во всем g1,...,gT.

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

Обратите внимание, что этот фильтр эквивалентен кубическому сплайну более плавным.

Использование фильтра Ходрика-Прескотта для анализа цикличности ВНП

Используя данные, аналогичные данным, найденным в Ходрике и Прескотте [1], постройте график циклического компонента GNP. Этот результат должен совпадать с результатами в документе. Однако, поскольку данные GNP здесь и в статье скорректированы на сезонные изменения с преобразованием из номинальных в реальные значения, различия могут быть ожидаемы из-за различий в источниках для пары корректировок. Обратите внимание, что наши данные поступают из базы FRED Федерального резерва Сент-Луиса [2], которая была загружена с Datafeed Toolbox™.

load Data_GNP

startdate = 1950;	% Date range is from 1947.0 to 2005.5 (quarterly)
enddate = 1979.25;	% Change these two lines to try alternative periods

startindex = find(dates == startdate);
endindex = find(dates == enddate);

gnpdates = dates(startindex:endindex);
gnpraw = log(DataTable.GNPR(startindex:endindex));

Запускаем фильтр для разных параметров сглаживания λ = 400, 1600, 6400 и . Бесконечный параметр сглаживания просто умаляет данные.

[gnptrend4, gnpcycle4] = hpfilter(gnpraw,400);
[gnptrend16, gnpcycle16] = hpfilter(gnpraw,1600);
[gnptrend64, gnpcycle64] = hpfilter(gnpraw,6400);
[gnptrendinf, gnpcycleinf] = hpfilter(gnpraw,Inf);

Построение графика циклического ВНП и его взаимосвязи с долгосрочным трендом

Следующий код генерирует фигуру 1 от Hodrick and Prescott [1].

plot(gnpdates,gnpcycle16,'b');
hold all
plot(gnpdates,gnpcycleinf - gnpcycle16,'r');
title('\bfFigure 1 from Hodrick and Prescott');
ylabel('\bfGNP Growth');
legend('Cyclical GNP','Difference');
hold off

Figure contains an axes. The axes with title \bfFigure 1 from Hodrick and Prescott contains 2 objects of type line. These objects represent Cyclical GNP, Difference.

Синяя линия является циклическим компонентом с параметром сглаживания 1600, и красная линия является различием относительно детрендированного циклического компонента. Различие достаточно плавна, чтобы предположить, что выбор параметра сглаживания подходит.

Статистические тесты на циклическом ВНП

Теперь мы восстановим таблицу 1 от Ходрика и Прескотта [1]. С помощью циклических компонентов мы вычисляем стандартные отклонения, автокорреляции для лагов с 1 по 10 и выполняем тест корня модуля Дикки-Фуллера, чтобы оценить нестационарность. Как и в статье, мы видим, что когда лямбда увеличивается, стандартные отклонения увеличиваются, автокорреляции увеличиваются на более длинных лагах, и модуль корня отклоняется для всех, кроме детрендированного случая. Вместе эти результаты подразумевают, что любой из циклических рядов с конечным сглаживанием эффективно является стационарным.

gnpacf4 = autocorr(gnpcycle4,'NumLags',10);
gnpacf16 = autocorr(gnpcycle16,'NumLags',10);
gnpacf64 = autocorr(gnpcycle64,'NumLags',10);
gnpacfinf = autocorr(gnpcycleinf,'NumLags',10);

[H4, ~, gnptest4] = adftest(gnpcycle4,'Model','ard');
[H16, ~, gnptest16] = adftest(gnpcycle16,'Model','ard');
[H64, ~, gnptest64] = adftest(gnpcycle64,'Model','ard');
[Hinf, ~, gnptestinf] = adftest(gnpcycleinf,'Model','ard');

displayResults(gnpcycle4,gnpcycle16,gnpcycle64,gnpcycleinf,...
    gnpacf4,gnpacf16,gnpacf64,gnpacfinf,...
    gnptest4,gnptest16,gnptest64,gnptestinf,...
    H4,H16,H64,Hinf);
Table 1 from Hodrick and Prescott Reference
              Smoothing Parameter
                     400        1600        6400    Infinity
  Std. Dev.         1.52        1.75        2.06        3.11
  Autocorrelations
           1        0.74        0.78        0.82        0.92
           2        0.38        0.47        0.57        0.81
           3        0.05        0.17        0.33        0.70
           4       -0.21       -0.07        0.12        0.59
           5       -0.36       -0.24       -0.03        0.50
           6       -0.39       -0.30       -0.10        0.44
           7       -0.35       -0.31       -0.13        0.39
           8       -0.28       -0.29       -0.15        0.35
           9       -0.22       -0.26       -0.15        0.31
          10       -0.19       -0.25       -0.17        0.26
  Unit Root        -4.35       -4.13       -3.79       -2.28
  Reject H0            1           1           1           0

Локальная функция

function displayResults(gnpcycle4,gnpcycle16,gnpcycle64,gnpcycleinf,...
    gnpacf4,gnpacf16,gnpacf64,gnpacfinf,...
    gnptest4,gnptest16,gnptest64,gnptestinf,...
    H4,H16,H64,Hinf)
% DISPLAYRESULTS Display cyclical GNP test results in tabular form
    fprintf(1,'Table 1 from Hodrick and Prescott Reference\n');
    fprintf(1,'  %10s  %s\n',' ','Smoothing Parameter');
    fprintf(1,'  %10s  %10s  %10s  %10s  %10s\n',' ','400','1600','6400','Infinity');
    fprintf(1,'  %-10s  %10.2f  %10.2f  %10.2f  %10.2f\n','Std. Dev.', ...
	100*std(gnpcycle4),100*std(gnpcycle16),100*std(gnpcycle64),100*std(gnpcycleinf));
    fprintf(1,'  Autocorrelations\n');
    for i=2:11
	fprintf(1,'  %10g  %10.2f  %10.2f  %10.2f  %10.2f\n',(i-1), ...
		gnpacf4(i),gnpacf16(i),gnpacf64(i),gnpacfinf(i))
    end
    fprintf(1,'  %-10s  %10.2f  %10.2f  %10.2f  %10.2f\n','Unit Root', ...
	gnptest4,gnptest16,gnptest64,gnptestinf);
    fprintf(1,'  %-10s  %10d  %10d  %10d  %10d\n','Reject H0',H4,H16,H64,Hinf);
end

Ссылки

[1] Ходрик, Роберт Дж и Эдвард К. Прескотт. Послевоенные бизнес-циклы США: эмпирическое расследование. Журнал денег, кредита и банковского дела. Том 29, № 1, 1997, стр. 1-16.

[2] Федеральные резервные экономические данные США (FRED), Федеральный резервный банк Сент-Луиса, https://fred.stlouisfed.org/.

См. также

Похожие темы