Как выполнить тест kpss на python
Тест KPSS можно использовать для определения того, имеет ли временной ряд стационарный тренд.
В этом тесте используются следующие нулевая и альтернативная гипотезы:
- H 0 : Временной ряд имеет стационарный тренд.
- Х А : Временной ряд не имеет стационарного тренда.
Если значение p теста ниже определенного уровня значимости (например, α = 0,05), то мы отвергаем нулевую гипотезу и делаем вывод, что временной ряд не имеет стационарной тенденции.
В противном случае мы не сможем отвергнуть нулевую гипотезу.
В следующих примерах показано, как выполнить тест KPSS в Python.
Пример 1: тест KPSS на Python (со стационарными данными)
Во-первых, давайте создадим несколько поддельных данных в Python для работы:
import numpy as np
import matplotlib. pyplot as plt
#make this example reproducible
n.p. random . seed ( 1 )
#create time series data
data = np. random . normal (size= 100 )
#create line plot of time series data
plt. plot (data)
Мы можем использовать функцию kpss() из пакета statsmodels для выполнения теста KPSS на данных этого временного ряда:
import statsmodels. api as sm
#perform KPSS test
sm. tsa . stattools . kpss (data, regression=' ct ')
(0.0477617848370993,
0.1,
1,
{'10%': 0.119, '5%': 0.146, '2.5%': 0.176, '1%': 0.216})
InterpolationWarning: The test statistic is outside of the range of p-values available
in the look-up table. The actual p-value is greater than the p-value returned.
Вот как интерпретировать результат:
- Статистика теста КПСС: 0,04776.
- Значение p: 0,1
- Параметр смещения усечения: 1
- Критические значения на 10% , 5% , 2,5% и 1%.
Значение p составляет 0,1 . Поскольку это значение не меньше 0,05, мы не можем отвергнуть нулевую гипотезу теста KPSS.
Это означает, что мы можем предположить, что временной ряд имеет стационарный тренд.
Примечание 1. Значение p на самом деле все еще больше 0,1, но наименьшее значение, которое может выдать функция kpss(), равно 0,1.
Примечание 2. Вы должны использовать аргумент reгрессия=’ct’ , чтобы указать, что нулевая гипотеза теста заключается в том, что данные имеют стационарный тренд.
Пример 2: тест KPSS на Python (с нестационарными данными)
Во-первых, давайте создадим несколько поддельных данных в Python для работы:
import numpy as np
import matplotlib. pyplot as plt
#make this example reproducible
n.p. random . seed ( 1 )
#create time series data
data =np. array ([0, 3, 4, 3, 6, 7, 5, 8, 15, 13, 19, 12, 29, 15, 45, 23, 67, 45])
#create line plot of time series data
plt. plot (data)
Опять же, мы можем использовать функцию kpss() из пакета statsmodels для выполнения теста KPSS на данных этого временного ряда:
import statsmodels. api as sm
#perform KPSS test
sm. tsa . stattools . kpss (data, regression=' ct ')
(0.15096358910843685,
0.04586367574296928,
3,
{'10%': 0.119, '5%': 0.146, '2.5%': 0.176, '1%': 0.216})
Вот как интерпретировать результат:
- Статистика теста КПСС: 0,1509.
- Значение p: 0,0458
- Параметр смещения усечения: 3
- Критические значения на 10% , 5% , 2,5% и 1%.
Значение p составляет 0,0458 . Поскольку это значение меньше 0,05, мы отвергаем нулевую гипотезу теста KPSS.
Это означает, что временной ряд не является стационарным.
Примечание . Полную документацию по функции kpss() из пакета statsmodels вы можете найти здесь .
Дополнительные ресурсы
Следующие руководства предоставляют дополнительную информацию о том, как работать с данными временных рядов в Python:
Как выполнить расширенный тест Дикки-Фуллера в Python
Как выполнить тест тренда Манна-Кендалла в Python
Как построить временной ряд в Matplotlib