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