Как выполнить тест KPSS в Python

Как выполнить тест KPSS в Python

Тест KPSS можно использовать, чтобы определить, является ли временной ряд стационарным трендом.

В этом тесте используются следующие нулевая и альтернативная гипотезы:

  • H 0 : Временной ряд имеет стационарный тренд.
  • H A : временной ряд не имеет стационарного тренда.

Если p-значение теста меньше некоторого уровня значимости (например, α = 0,05), то мы отклоняем нулевую гипотезу и делаем вывод, что временной ряд не является стационарным по тренду.

В противном случае мы не можем отвергнуть нулевую гипотезу.

В следующих примерах показано, как выполнить тест KPSS в Python.

Пример 1. Тест KPSS на Python (со стационарными данными)

Во-первых, давайте создадим некоторые поддельные данные в Python для работы:

import numpy as np
import matplotlib.pyplot as plt

#make this example reproducible
np.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.

Вот как интерпретировать вывод:

  • Статистика теста KPSS: 0,04776
  • Р-значение: 0,1
  • Параметр задержки усечения: 1
  • Критические значения при 10% , 5% , 2,5% и 1%

Значение р равно 0,1.Поскольку это значение не меньше 0,05, мы не можем отвергнуть нулевую гипотезу теста KPSS.

Это означает, что мы можем предположить, что временной ряд имеет стационарный тренд.

Примечание 1. На самом деле p-значение даже больше 0,1, но наименьшее значение, которое выводит функция kpss(), равно 0,1.

Примечание 2. Мы должны использовать аргумент regression='ct', чтобы указать, что нулевая гипотеза теста состоит в том, что данные являются стационарными по тренду.

Пример 2. Тест KPSS на Python (с нестационарными данными)

Во-первых, давайте создадим некоторые поддельные данные в Python для работы:

import numpy as np
import matplotlib.pyplot as plt

#make this example reproducible
np.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})

Вот как интерпретировать вывод:

  • Статистика теста KPSS: 0,1509
  • Р-значение: 0,0458
  • Параметр задержки усечения: 3
  • Критические значения при 10% , 5% , 2,5% и 1%

Значение р равно 0,0458.Поскольку это значение меньше 0,05, мы отвергаем нулевую гипотезу теста KPSS.

Это означает, что временной ряд не имеет стационарного тренда.

Примечание.Полную документацию по функции kpss() из пакета statsmodels можно найти здесь .

Дополнительные ресурсы

В следующих руководствах представлена дополнительная информация о том, как работать с данными временных рядов в Python:

Как выполнить расширенный тест Дики-Фуллера в Python
Как выполнить тест тренда Манна-Кендалла в Python
Как построить временной ряд в Matplotlib

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.