exponenta event banner

Корневые тесты блока

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

В этом примере показано, как проверить одномерные модели временных рядов на стационарность. В ней показано, как моделировать данные из четырех типов моделей: трендовой стационарной, разностной стационарной, стационарной (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 является трендом стационарным. Это правильное решение, однако тест Дики-Фуллера не подходит для гетероскедастического ряда.

Используйте тест Augmented Dickey-Fuller для серии 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 и дисперсией start2. Есть ли тренд в модели, нулевая гипотеза - H0: start2 = 0 (ряд - тренд стационарный) и альтернативная гипотеза - H1: start2 > 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

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

Используйте тест коэффициента дисперсии для четырех серий, чтобы оценить, являются ли серии случайными шагами. Нулевая гипотеза 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. Это несоответствие может быть связано со случайным начальным числом.

Кроме того, можно оценить стационарность с помощью 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 серия - гетероскедастическая случайная прогулка.

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

[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.

См. также

| | |

Связанные темы