Как выполнить тест колмогорова-смирнова в python


Критерий Колмогорова-Смирнова используется для проверки того, происходит ли выборка из определенного распределения.

Чтобы выполнить тест Колмогорова-Смирнова в Python, мы можем использовать scipy.stats.kstest() для теста с одной выборкой или scipy.stats.ks_2samp() для теста с двумя выборками.

В этом руководстве показан пример использования каждой функции на практике.

Пример 1: Тестовая выборка Колмогорова-Смирнова

Предположим, у нас есть следующие примеры данных:

 from numpy.random import seed
from numpy.random import fish

#set seed (eg make this example reproducible)
seed(0)

#generate dataset of 100 values that follows a Poisson distribution with mean=5
data = fish(5, 100)

Следующий код показывает, как выполнить тест Колмогорова-Смирнова на этой выборке из 100 значений данных, чтобы определить, происходят ли они из нормального распределения:

 from scipy.stats import kstest

#perform Kolmogorov-Smirnov test
kstest(data, ' norm ')

KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)

Из результата мы видим, что статистика теста равна 0,9072 , а соответствующее значение p — 1,0908e-103 . Поскольку значение p меньше 0,05, мы отвергаем нулевую гипотезу. У нас есть достаточно доказательств, чтобы сказать, что данные выборки не имеют нормального распределения.

Этот результат также не должен вызывать удивления, поскольку мы сгенерировали выборочные данные с помощью функции Poisson() , которая генерирует случайные значения, соответствующие распределению Пуассона .

Пример 2: Двухвыборочный критерий Колмогорова-Смирнова

Допустим, у нас есть следующие два примера набора данных:

 from numpy.random import seed
from numpy.random import randn
from numpy.random import lognormal

#set seed (eg make this example reproducible)
seed(0)

#generate two datasets
data1 = randn(100)
data2 = lognormal(3, 1, 100)

Следующий код показывает, как выполнить тест Колмогорова-Смирнова на этих двух выборках, чтобы определить, происходят ли они из одного и того же распределения:

 from scipy.stats import ks_2samp

#perform Kolmogorov-Smirnov test
ks_2samp(data1, data2)

KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)

Из результата мы видим, что статистика теста равна 0,99 , а соответствующее значение p — 4,4175e-57 . Поскольку значение p меньше 0,05, мы отвергаем нулевую гипотезу. У нас есть достаточно доказательств, чтобы сказать, что два выборочных набора данных не относятся к одному и тому же распределению.

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

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

Как выполнить тест Шапиро-Уилка на Python
Как выполнить тест Андерсона-Дарлинга на Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *