Этот пример показывает, как использовать фильтр Ходрик-Прескотта, чтобы анализировать временные ряды.
Фильтр Ходрик-Прескотта разделяет временные ряды на рост и циклические компоненты с
где временные ряды, компонент роста , и циклический компонент для .
Целевая функция для фильтра Ходрик-Прескотта имеет форму
с параметром сглаживания . Проблема программирования должна минимизировать цель по всем .
Концептуальное основание для этой проблемы программирования - то, что первая сумма минимизирует различие между данными и его компонентом роста (который является циклическим компонентом), и вторая сумма минимизирует различие второго порядка компонента роста, который походит на минимизацию второй производной компонента роста.
Обратите внимание на то, что этот фильтр эквивалентен кубическому более сглаженному сплайну.
Используя данные, подобные данным, найденным в Ходрике и Прескотте [1], постройте циклический компонент GNP. Этот результат должен совпасть с результатами в газете. Однако, поскольку данные GNP здесь и в газете оба настроены для сезонных изменений с преобразованием от номинала до действительных значений, различия могут ожидаться из-за различий в источниках для пары корректировок. Обратите внимание на то, что наши данные прибывают из базы данных St. Louis Federal Reserve 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 от Ходрика и Прескотта [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, и выполняем Более полный Дики модульный корневой тест, чтобы оценить нестационарность. Как в статье, мы видим, что, когда lambda увеличивается, увеличение стандартных отклонений, автокорреляции увеличиваются по более долгим задержкам, и модульная корневая гипотеза отклоняется для всех кроме детрендированного случая. Вместе, эти результаты подразумевают, что любой из циклических рядов с конечным сглаживанием является эффективно стационарным.
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] Hodrick, Роберт Дж и Эдвард К. Прескотт. "Послевоенные американские Деловые циклы: Эмпирическое Расследование". Журнал Денег, Кредита и Банковского дела. Издание 29, № 1, 1997, стр 1–16.
[2] Американские Экономические данные Федеральной резервной системы (FRED), Федеральный резервный банк Сент-Луиса, https://fred.stlouisfed.org/
.