Модульные корневые тесты

Тестируйте моделируемые данные для корня модуля

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

Симулируйте четыре временных рядов.

T = 1e3;       % Sample size
t = (1:T)';    % Time multiple

rng(142857);   % For reproducibility

y1 = randn(T,1) + .2*t; % Trend stationary

Mdl2 = arima('D',1,'Constant',0.2,'Variance',1);
y2 = simulate(Mdl2,T,'Y0',0); % Difference stationary

Mdl3 = arima('AR',0.99,'Constant',0.2,'Variance',1);
y3 = simulate(Mdl3,T,'Y0',0); % AR(1)

Mdl4 = arima('D',1,'Constant',0.2,'Variance',1);
sigma = (sin(t/200) + 1.5)/2; % Std deviation
e = randn(T,1).*sigma;        % Innovations
y4 = filter(Mdl4,e,'Y0',0);   % Heteroscedastic

Постройте график первых 100 точек в каждой серии.

y = [y1 y2 y3 y4];
figure;
plot1 = plot(y(1:100,:));
plot1(1).LineWidth = 2;
plot1(3).LineStyle = ':';
plot1(3).LineWidth = 2;
plot1(4).LineStyle = ':';
plot1(4).LineWidth = 2;
title '{\bf First 100 Periods of Each Series}';
legend('Trend Stationary','Difference Stationary','AR(1)',...
   'Heteroscedastic','location','northwest');

Figure contains an axes. The axes with title {\bf First 100 Periods of Each Series} contains 4 objects of type line. These objects represent Trend Stationary, Difference Stationary, AR(1), Heteroscedastic.

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

Постройте график всего набора данных.

plot2 = plot(y);
plot2(1).LineWidth = 2;
plot2(3).LineStyle = ':';
plot2(3).LineWidth = 2;
plot2(4).LineStyle = ':';
plot2(4).LineWidth = 2;
title '{\bf Each Entire Series}';
legend('Trend Stationary','Difference Stationary','AR(1)',...
   'Heteroscedastic','location','northwest');

Figure contains an axes. The axes with title {\bf Each Entire Series} contains 4 objects of type line. These objects represent Trend Stationary, Difference Stationary, AR(1), Heteroscedastic.

Различия между сериями здесь яснее:

  • Тренд стационарного ряда имеет небольшое отклонение от среднего тренда.

  • Различия стационарный и гетероскедастический ряды имеют постоянные отклонения от линии тренда.

  • Серия AR (1) демонстрирует длительное стационарное поведение; остальные растут линейно.

  • Сходными кажутся различия стационарный и гетероскедастический ряды. Однако, что гетероскедастический ряд имеет гораздо более локальную изменчивость около периода 300 и гораздо менее близкий период 900. Отклонение модели максимально, когда sin(t/200)=1, в момент времени 100π314. Отклонение модели минимально, когда sin(t/200)=-1, в момент времени 300π942. Поэтому визуальная изменчивость соответствует модели.

Используйте тест Augmented Dicky-Fuller на трех растущих сериях (y1, y2, и y4), чтобы оценить, имеет ли серия модуля корень. Поскольку серия растет, уточняйте, что есть тренд. В этом случае нулевая гипотеза является H0:yt=yt-1+c+b1Δyt-1+b2Δyt-2+εt и альтернативная гипотеза H1:yt=ayt-1+c+δt+b1Δyt-1+b2Δyt-2+εt. Установите количество лагов равным 2 в демонстрационных целях.

hY1 = adftest(y1, 'model','ts', 'lags',2)
hY1 = logical
   1

hY2 = adftest(y2, 'model','ts', 'lags',2)
hY2 = logical
   0

hY4 = adftest(y4, 'model','ts', 'lags',2)
hY4 = logical
   0

  • hY1 = 1 указывает на наличие достаточных доказательств, позволяющих предположить, что y1 является трендом стационарным. Это правильное решение, потому что y1 - тренд стационарный по конструкции.

  • hY2 = 0 указывает, что недостаточно доказательств, чтобы предположить, что y2 является трендом стационарным. Это правильное решение с тех пор, как y2 - различие стационарная по конструкции.

  • hY4 = 0 указывает, что недостаточно доказательств, чтобы предположить, что y4 является трендом стационарным. Это правильное решение, однако тест Дикки-Фуллера не подходит для гетероскедастической серии.

Используйте тест Дополненного Дикки-Фуллера на серии AR (1) (y3), чтобы оценить, имеет ли серия модуля корень. Поскольку серия не растет, укажите, что серия является авторегрессивной с термином дрейфа. В этом случае нулевая гипотеза является H0:yt=yt-1+b1Δyt-1+b2Δyt-2+εt и альтернативная гипотеза H1:yt=ayt-1+b1Δyt-1+b2Δyt-2+εt. Установите количество лагов равным 2 в демонстрационных целях.

hY3 = adftest(y3, 'model','ard', 'lags',2)
hY3 = logical
   1

hY3 = 1 указывает, что существует достаточно доказательств, чтобы предположить, что y3 - стационарный, авторегрессивный процесс с дрейфующим термином. Это правильное решение, потому что y3 является авторегрессивным процессом с дрейфующим сроком по конструкции.

Используйте тест KPSS, чтобы оценить, являются ли серии модуля корневыми нестационарными. Укажите, что есть тренд в растущей серии (y1, y2, и y4). Тест KPSS принимает следующую модель:

yy=ct+δt+ut

ct=ct-1+εt,

где ut является стационарным процессом и εt является независимым и идентично распределенным процессом со средним 0 и отклонением σ2. Существует ли тренд в модели, нулевая гипотеза H0:σ2=0 (ряд является трендом стационарным) и альтернативная гипотеза H1:σ2>0 (не тренд стационарный). Установите количество лагов равным 2 в демонстрационных целях.

hY1 = kpsstest(y1, 'lags',2, 'trend',true)
hY1 = logical
   0

hY2 = kpsstest(y2, 'lags',2, 'trend',true)
hY2 = logical
   1

hY3 = kpsstest(y3, 'lags',2)
hY3 = logical
   1

hY4 = kpsstest(y4, 'lags',2, 'trend',true)
hY4 = logical
   1

Все это тесты приводят к правильному решению.

Используйте тест коэффициента отклонения для al четырех серий, чтобы оценить, являются ли серии случайными ходами. Нулевая гипотеза H0: Var(Δyt) является постоянным, и альтернативная гипотеза является H1: Var(Δyt) не является постоянным. Укажите, что нововведения являются независимыми и идентично распределены для всех, кроме y1. Тестирование y4 оба пути.

hY1 = vratiotest(y1) 
hY1 = logical
   1

hY2 = vratiotest(y2,'IID',true)
hY2 = logical
   0

hY3 = vratiotest(y3,'IID',true)
hY3 = logical
   0

hY4NotIID = vratiotest(y4)
hY4NotIID = logical
   0

hY4IID = vratiotest(y4, 'IID',true)
hY4IID = logical
   0

Все тесты приводят к правильным решениям, кроме hY4_2 = 0. Этот тест не отвергает гипотезу о том, что гетероскедастический процесс является случайной прогулкой по IID. Это несоответствие может быть связано со случайным seed.

Также можно оценить стационарность с помощью pptest

Тестирование данных временных рядов для корня модуля

Этот пример показов, как протестировать одномерные временные ряды для корня модуля. Он использует данные о заработной плате (1900-1970 годы) в обрабатывающей промышленности. Серия находится в наборе данных Нельсона-Плоссера.

Загрузка данных Нельсона-Плоссера. Извлечение данных о номинальной заработной плате.

load Data_NelsonPlosser
wages = DataTable.WN;

Обрезка NaN значения из ряда и соответствующие даты (этот шаг необязателен, потому что тест игнорирует NaN значения).

wDates = dates(isfinite(wages));
wages = wages(isfinite(wages));

Постройте график данных для поиска трендов.

plot(wDates,wages)
title('Wages')

Figure contains an axes. The axes with title Wages contains an object of type line.

График предполагает экспоненциальный рост.

Преобразуйте данные с помощью функции log, чтобы линеаризировать ряд.

logWages = log(wages);
plot(wDates,logWages)
title('Log Wages')

Figure contains an axes. The axes with title Log Wages contains an object of type line.

График предполагает, что временные ряды имеют линейный тренд.

Протестируйте нулевую гипотезу об отсутствии модуля корня (тренд стационарный) против альтернативной гипотезы о том, что ряд является модулем корневым процессом с трендом (различие стационарный). Задайте 'Lags',7:2:11, как предложено в Kwiatkowski et al., 1992.

[h1,pValue1] = kpsstest(logWages,'Lags',7:2:11)
h1 = 1x3 logical array

   0   0   0

pValue1 = 1×3

    0.1000    0.1000    0.1000

kpsstest не может отклонить нулевую гипотезу о том, что серия зарплат тренда является стационарной.

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

[h2,pValue2] = adftest(logWages,'Model','ts')
h2 = logical
   0

pValue2 = 0.8327

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

Поскольку результаты двух тестов противоречивы, неясно, что серия зарплат имеет модуль корень. Это типичный результат тестов на многих макроэкономических рядах.

kpsstest имеет ограниченный набор вычисленных критических значений. Когда он вычисляет тестовую статистику, которая находится вне этой области значений, тест сообщает значение p в соответствующей конечной точке. Итак, в данном случае pValue отражает ближайшее табличное значение. Когда тестовая статистика лежит внутри диапазона табличных значений, kpsstest линейно интерполирует p-значение.

Тестируйте данные запаса для случайной прогулки

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

Загрузите данные.

load CAPMuniverse

Извлеките две серии для тестирования. Первый столбец данных - это ежедневный возврат технологического запаса. Последний (14-й) столбец - дневной возврат наличности (дневной курс денежного рынка).

tech1 = Data(:,1); 
money = Data(:,14);

Возвраты являются журналами коэффициентов значений в конце дня по значениям в начале дня.

Преобразуйте данные в цены (значения) вместо возвратов. vratiotest принимает цены как входы, в отличие от возвратов.

tech1 = cumsum(tech1);
money = cumsum(money);

Постройте график данных, чтобы увидеть, являются ли они стационарными.

subplot(2,1,1)
plot(Dates,tech1);
title('Log(relative stock value)')
datetick('x')
hold on
subplot(2,1,2);
plot(Dates,money)
title('Log(accumulated cash)')
datetick('x')
hold off

Figure contains 2 axes. Axes 1 with title Log(relative stock value) contains an object of type line. Axes 2 with title Log(accumulated cash) contains an object of type line.

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

Проверьте, соответствует ли серия запасов случайной ходьбе.

[h,pValue,stat,cValue,ratio] = vratiotest(tech1)
h = logical
   0

pValue = 0.1646
stat = -1.3899
cValue = 1.9600
ratio = 0.9436

vratiotest не отвергает гипотезу о том, что случайная прогулка является разумной моделью для ряда запасов.

Проверьте, является ли i.i.d. случайная прогулка является разумной моделью для серии запасов.

[h,pValue,stat,cValue,ratio] = vratiotest(tech1,'IID',true)
h = logical
   1

pValue = 0.0304
stat = -2.1642
cValue = 1.9600
ratio = 0.9436

vratiotest отвергает гипотезу о том, что i.i.d. случайная прогулка является разумной моделью для tech1 запас серии на уровне 5%. Таким образом, vratiotest указывает, что наиболее подходящая модель tech1 series - гетероскедастическая случайная прогулка.

Проверьте, соответствует ли серия денежных средств случайной прогулке.

[h,pValue,stat,cValue,ratio] = vratiotest(money)
h = logical
   1

pValue = 4.6093e-145
stat = 25.6466
cValue = 1.9600
ratio = 2.0006

vratiotest решительно отвергает гипотезу о том, что случайная прогулка является разумной моделью для денежного ряда (pValue = 4.6093e-145). Удаление тренда из серии не влияет на полученную статистику.

Ссылки

[1] Квятковский, Д., П. К. Б. Филлипс, П. Шмидт и Я. Шин. «Проверка нулевой гипотезы стационарности против альтернативы единичного корня». Журнал эконометрики. Том 54, 1992, стр. 159-178.

См. также

| | |

Похожие темы