Как выполнить тест колмогорова-смирнова в 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