В этом примере показано, как использовать фильтр Ходрика-Прескотта для разложения временного ряда.
Фильтр Ходрика-Прескотта разделяет временной ряд на растущие и циклические компоненты с помощью
+ ct
где - временной ряд, - компонент роста , ct - циклический компонент для , T.
Целевая функция для фильтра Ходрика-Прескотта имеет вид
gt-gt-1)) 2
с параметром сглаживания . Проблема программирования заключается в минимизации цели по всем .
Концептуальная основа этой проблемы программирования состоит в том, что первая сумма минимизирует разницу между данными и его компонентом роста (который является циклической составляющей), а вторая сумма минимизирует разницу второго порядка компонента роста, которая аналогична минимизации второй производной компонента роста.
Обратите внимание, что этот фильтр эквивалентен кубическому сплайну, более гладкому.
Используя данные, аналогичные данным Ходрика и Прескотта [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

Синяя линия представляет собой циклический компонент с параметром сглаживания 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/.