Цель данной статьи — поделиться результатами сравнительного исследования мощности статистических тестов на единичные корни Дики-Фуллера (ADF) и Квятковского, Филлипса, Шмидта и Шина (KPSS): в случае около-нестационарных временных рядов тест ADF часто не способен отклонить нулевую гипотезу нестационарности. Это означает, что у теста ADF высокий риск ошибки второго рода, то есть вероятность не отклонить ложную нулевую гипотезу.

В данной статье мы посмотрим, насколько «мощны» тесты ADF и KPSS. Сгенерируем случайный процесс $y_t$, у которого нет единичного корня (то есть процесс является стационарным), $\phi < 1$:

$y_{t} = \phi y_{t-1} + \varepsilon_{t},$


и посмотрим, насколько различные статистические тесты распознают данный процесс как стационарный, а также на каких именно $\phi$ будет фейлиться тест ADF.

План эксперимента


Для различных значений $y_0$ мы сгенерируем 1000 процессов $y_t$, $t = 0, \dots, T$, где $T = 500$, и посчитаем количество отвергнутых гипотез.

Тест ADF: Истинной моделью является $y_t = y_{t-1} + \varepsilon_t$, где $\varepsilon_t \sim i.i.d$ с нулевым средним и конечной дисперсией $\sigma^2$. Мы оцениваем модель $y_t = \phi y_{t-1} + \varepsilon_t$. Критические значения для тестовой статистики $S = \frac{\hat{\phi} - 1}{\hat{\sigma}_{\hat{\phi}}}$, где $T = 500$, представлены в таблице ниже.
1% 5% 10%
-2.57 -1.94 -1.62

Тест KPSS: Истинной моделью является $y_t = r_t + \varepsilon_t$, где $r_t = r_{t-1} + u_t$, $u_t \sim i.i.d$ с нулевым средним и конечной дисперсией $\sigma^2 = 0$. Мы оцениваем ту же модель с $\sigma^2 > 0$. Критические значения для тестовой статистики множителей Лагранжа, где $T = 500$, представлены в таблице ниже.
1% 5% 10%
0.74 0.46 0.35

Начальное значение $y_0$ влияет на конечное выборочное распределение и в тесте ADF, и в тесте KPSS. На реальном фондовом рынке начальное значение $y_0$ может варьироваться достаточно широко, например, от 0.00215 до 204 100 (в абсолютных величинах). В данной статье мы проанализируем мощность тестов ADF и KPSS для малых значений $y_0$.

Генерация случайных процессов


Начнем с генерации нестационарных случайных процессов при $y_0 = 0$. Во всех последующих таблицах $T = 500$, $\sigma = 1$, а количество генерируемых случайных процессов равно 1000. Генерировать случайные процессы будем в матлабе.

T = 500;
count = 1000;
epsilon = zeros(T,count);
for set = 1 : count
    epsilon(:,set) = randn(T,1);
end
y = zeros(T,count);
y(1,:) = 0;
for t = 2 : T
    y(t,:) = y(t - 1,:) + epsilon(t,:);
end
figure
plot(y(:,1))
title('Simulated RW Process')

На рисунке ниже представлен 1 из 1000 сгенерированных нестационарных случайных процессов, который следует модели случайного блуждания ($\phi = 1$).

Тестирование на разных уровнях значимости


Затем протестируем каждый из сгенерированных случайных процессов тестами ADF и KPSS на различных уровнях значимости (1%, 5% и 10%).

h = zeros(count,1);
for set = 1 : count
    h(set,1) = adftest(y(:,set),'alpha',0.01);
    h(set,2) = adftest(y(:,set));
    h(set,3) = adftest(y(:,set),'alpha',0.1);
    h(set,4) = kpsstest(y(:,set),'trend',false,'alpha',0.01);
    h(set,5) = kpsstest(y(:,set),'trend',false);
    h(set,6) = kpsstest(y(:,set),'trend',false,'alpha',0.1);
end

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

В тесте KPSS нулевая гипотеза утверждает, что временной ряд является стационарным, альтернативная гипотеза утверждает наличие нестационарности. Простыми словами, если тест ADF отвечает 1 (true), значит, процесс стационарный. Если тест KPSS отвечает 1 (true), значит, процесс нестационарный.

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

nnz(h(:,1))
nnz(h(:,2))
nnz(h(:,3))
nnz(~h(:,4))
nnz(~h(:,5))
nnz(~h(:,6))

Эксперимент для стационарных процессов


Теперь сгенерируем и протестируем стационарные случайные процессы с теми же начальными условиями, что и нестационарные процессы, сгенерированные и протестированные выше. Начнём с $\phi = 0.1$.

phi = 0.1;
z = zeros(T,count);
z(1,:) = 0;
for t = 2 : T
    z(t,:) = phi * z(t - 1,:) + epsilon(t,:);
end
figure
plot(z(:,1))
title('Simulated AR(1) Process')

На рисунке ниже представлен 1 из 1000 сгенерированных стационарных случайных процессов, который следует авторегрессионной модели первого порядка ($\phi < 1$).

Протестируем каждый из сгенерированных случайных процессов тестами ADF и KPSS на различных уровнях значимости (1%, 5% и 10%).

zh = zeros(count,1);
for set = 1 : count
    zh(set,1) = adftest(z(:,set),'alpha',0.01);
    zh(set,2) = adftest(z(:,set));
    zh(set,3) = adftest(z(:,set),'alpha',0.1);
    zh(set,4) = kpsstest(z(:,set),'trend',false,'alpha',0.01);
    zh(set,5) = kpsstest(z(:,set),'trend',false);
    zh(set,6) = kpsstest(z(:,set),'trend',false,'alpha',0.1);
end

Затем посчитаем количество рядов, которые были выявлены как стационарные тем или иным тестом.

nnz(zh(:,1))
nnz(zh(:,2))
nnz(zh(:,3))
nnz(~zh(:,4))
nnz(~zh(:,5))
nnz(~zh(:,6))

Продолжим тестирование для других значений $\phi$.

Результаты эксперимента


В таблице ниже показано, сколько раз процесс был выявлен как стационарный для различных тестов и различных значений $\phi$. Для $\phi = 1$ количество найденных стационарных процессов соответствует тому, что мы ожидали. Для около-нестационарных процессов $0.9 < \phi < 1$ мы получаем много ложно-положительных ответов от теста ADF. Для $\phi \leq 0.9$ мы можем получить ложно-отрицательный ответ от теста KPSS.
Тест ADF Тест KPSS
$\phi$ 1% 5% 10% 1% 5% 10%
0.1 1000 1000 1000 981 924 868
0.2 1000 1000 1000 961 885 812
0.3 1000 1000 1000 938 834 731
0.4 1000 1000 1000 893 758 642
0.5 1000 1000 1000 831 665 512
0.6 1000 1000 1000 733 516 353
0.7 1000 1000 1000 586 339 186
0.8 1000 1000 1000 349 145 66
0.9 1000 1000 1000 68 17 4
0.95 988 1000 1000 2 0 0
0.975 501 886 981 1 0 0
0.99 79 330 536 1 0 0
0.995 34 155 288 0 0 0
1 8 46 95 0 0 0
1.01 1 4 5 0 0 0

Выводы


Как мы видели, тест Дики-Фуллера не способен различить нестационарные и около-нестационарные временные ряды. Это объясняет, почему не выполняется свойство симметричности отношения коинтеграции примерно для 3% пар.

Мной были проанализированы остатки 8 несимметричных пар на Московской бирже за 2019 год: $\phi$ колебалась от 0.9593 до 0.9716, то есть временной ряд остатков был около-нестационарным.

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

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

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

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

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

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

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

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