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

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

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

[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

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

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

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

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

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте