exponenta event banner

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

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

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

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], постройте график циклической составляющей ВНП. Этот результат должен совпадать с результатами в статье. Однако, поскольку данные ВНП здесь и в документе скорректированы с учетом сезонных колебаний с преобразованием из номинальных значений в реальные, можно ожидать различий из-за различий в источниках для пары корректировок. Обратите внимание, что наши данные получены из базы данных FRED Федеральной резервной системы Сент-Луиса [2], которая была загружена с Toolbox™ Datafeed.

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 от Ходрика и Прескотта [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/.

См. также

Связанные темы