В этом примере показано, как протестировать одномерные модели временных рядов на стационарность. Это показывает, как симулировать данные из четырех типов моделей: стационарный тренд, различие, стационарное, стационарное (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. Отклонение модели максимально когда , во время . Отклонение модели минимально когда , во время . Поэтому визуальная изменчивость совпадает с моделью.
Используйте Увеличенный Более полный Дикки тест на трех растущих рядах (y1
, y2
, и y4
) оценить, имеют ли ряды модульный корень. Поскольку ряды выращивают, указывают, что существует тренд. В этом случае нулевая гипотеза и альтернативная гипотеза . Определите номер задержек к 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
) оценить, имеет ли ряд модульный корень. Поскольку ряд не растет, укажите, что ряд авторегрессивен со сроком дрейфа. В этом случае нулевая гипотеза и альтернативная гипотеза . Определите номер задержек к 2 в демонстрационных целях.
hY3 = adftest(y3, 'model','ard', 'lags',2)
hY3 = logical
1
hY3 = 1
указывает, что существует достаточно доказательства, чтобы предложить тот y3
стационарный, авторегрессивный процесс со сроком дрейфа. Это - правильное решение потому что y3
авторегрессивный процесс со сроком дрейфа конструкцией.
Используйте тест KPSS, чтобы оценить, являются ли ряды модульным неустановившимся корнем. Укажите, что существует тренд в растущем ряду (y1
, y2
, и y4
). Тест KPSS принимает следующую модель:
где стационарный процесс и независимый и тождественно распределенный процесс со средним значением 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 четыре ряда, чтобы оценить, являются ли ряды случайными обходами. Нулевая гипотеза : является постоянным, и альтернативная гипотеза : не является постоянным. Укажите, что инновации независимы и тождественно распределенные для всех кроме 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.
adftest
| kpsstest
| pptest
| vratiotest