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

Все модели выглядят нестационарными и ведут себя аналогично. Поэтому вам может быть трудно различить, какие серии происходят от какой модели, просто глядя на их начальные сегменты.
Постройте график всего набора данных.
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');

Различия между сериями здесь яснее:
Стационарный ряд трендов имеет небольшое отклонение от своего среднего тренда.
Разность стационарных и гетероскедастических рядов имеет постоянные отклонения от линии тренда.
Серия AR (1) демонстрирует длительное стационарное поведение; остальные растут линейно.
Различие стационарных и гетероскедастических рядов выглядит сходным. Однако, что гетероскедастический ряд имеет гораздо большую локальную изменчивость вблизи периода 300 и гораздо меньше вблизи периода 900. Дисперсия модели максимальна, когда = 1, в 100π≈314. Дисперсия модели минимальна, ) = -1, в 300π≈942. Поэтому видимая изменчивость соответствует модели.
Используйте тест Augmented Dicky-Fuller для трех растущих серий (y1, y2, и y4), чтобы оценить, имеет ли серия корень единицы. Поскольку серии растут, уточните, что тенденция есть. При этом нулевая гипотеза b2Δyt-2 + α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), чтобы оценить, имеет ли серия корень единицы. Поскольку серия не растет, уточните, что серия авторегрессируется с дрейфовым термином. При этом нулевой гипотезой является b2Δyt-2 + αt и альтернативной 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 используется следующая модель:
δt + ut
αt,
где - стационарный процесс, - независимый и одинаково распределенный процесс со средним значением 0 и дисперсией . Есть ли тренд в модели, нулевая гипотеза - = 0 (ряд - тренд стационарный) и альтернативная гипотеза 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
Все тесты приводят к правильному решению.
Используйте тест коэффициента дисперсии для четырех серий, чтобы оценить, являются ли серии случайными шагами. Нулевая гипотеза ) постоянна, а альтернативная гипотеза H1: Δ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')
Сюжет предполагает экспоненциальный рост.
Преобразуйте данные с помощью функции log для линеаризации ряда.
logWages = log(wages);
plot(wDates,logWages)
title('Log Wages')
Сюжет предполагает, что временные ряды имеют линейный тренд.
Проверьте нулевую гипотезу об отсутствии единичного корня (тренд стационарный) против альтернативной гипотезы о том, что ряд является единичным корневым процессом с трендом (различие стационарный). Набор '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

Наличность имеет небольшую изменчивость и, как представляется, имеет долгосрочные тенденции. Фондовая серия имеет значительную изменчивость, и никакой определённой тенденции, хотя она, по-видимому, увеличивается к концу.
Проверьте, соответствует ли серия акций случайной прогулке.
[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.
adftest | kpsstest | pptest | vratiotest