Используя фильтр Ходрик-Прескотта, чтобы воспроизвести их исходный результат

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

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

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.

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

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

Использование фильтра Ходрик-Прескотта, чтобы анализировать цикличность GNP

Используя данные, похожие на данные, найденные в Ходрике и Прескотте [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);

Постройте циклический GNP и его отношение с долгосрочным трендом

Следующий код генерирует рисунок 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 object. The axes object with title F i g u r e blank 1 blank f r o m blank H o d r i c k blank a n d blank P r e s c o t t contains 2 objects of type line. These objects represent Cyclical GNP, Difference.

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

Статистические тесты на циклическом GNP

Мы теперь восстановим Таблицу 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/.

Смотрите также

Похожие темы