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

Протестируйте моделируемые данные на модульный корень

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

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

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');

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

Постройте целый набор данных.

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');

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

  • Тренд стационарный ряд имеет мало отклонения от своего среднего тренда.

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

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

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

Используйте Увеличенный Более полный Дикки тест на трех растущих рядах (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 является стационарным трендом. Это - правильное решение, однако, Более полный Дики тест не подходит для heteroscedastic ряда.

Используйте Увеличенный Более полный Дики тест на серии 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. Этот тест не отклоняет гипотезу, что heteroscedastic процесс является случайным обходом 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')

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

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

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

Данные, кажется, имеют линейный тренд.

Протестируйте нулевую гипотезу, что нет никакого модульного корня (стационарный тренд) против альтернативной гипотезы, что ряд является модульным корневым процессом с трендом (стационарное различие). Установите 'lags',[7:2:11], как предложено в Квиатковском и др., 1992.

[h,pValue] = kpsstest(logWages,'lags',[7:2:11])
h = 1x3 logical array

   0   0   0

pValue = 1×3

    0.1000    0.1000    0.1000

kpsstest не удается отклонить гипотезу, что ряд заработной платы является стационарным трендом. Если бы результат был бы [1 1 1], два вывода представили бы убедительные свидетельства модульного корня. Остается неясным, имеют ли данные модульный корень. Это - типичный результат тестов на многих макроэкономических рядах.

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

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

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

[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 является heteroscedastic случайным обходом.

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

[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] Квиатковский, D., П. К. Б. Филлипс, П. Шмидт и И. Шин. “Тестируя Нулевую гипотезу Стационарности против Альтернативы для Модульного Корня”. Журнал Эконометрики. Издание 54, 1992, стр 159–178.

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

| | |

Похожие темы