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