Тест Колмогорова-Смирнова используется для проверки того, происходит ли выборка из определенного распределения.
Чтобы выполнить тест Колмогорова-Смирнова в Python, мы можем использовать scipy.stats.kstest() для теста с одной выборкой или scipy.stats.ks_2samp() для теста с двумя выборками.
В этом руководстве показан пример использования каждой функции на практике.
Пример 1: Одновыборочный критерий Колмогорова-Смирнова
Предположим, у нас есть следующие образцы данных:
from numpy.random import seed
from numpy.random import poisson
#set seed (e.g. make this example reproducible)
seed(0)
#generate dataset of 100 values that follow a Poisson distribution with mean=5
data = poisson(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 (e.g. 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