Как выполнить тест шапиро-уилка на python
Тест Шапиро-Уилка – это тест на нормальность. Он используется для определения того, имеет ли выборка нормальное распределение .
Чтобы выполнить тест Шапиро-Уилка в Python, мы можем использовать функцию scipy.stats.shapiro() , которая использует следующий синтаксис:
scipy.stats.shapiro(x)
Золото:
- x: таблица образцов данных.
Эта функция возвращает тестовую статистику и соответствующее значение p.
Если значение p ниже определенного уровня значимости, то у нас есть достаточно доказательств, чтобы сказать, что данные выборки не соответствуют нормальному распределению.
В этом руководстве показаны некоторые примеры использования этой функции на практике.
Пример 1. Тест Шапиро-Уилка на нормально распределенных данных
Предположим, у нас есть следующие примеры данных:
from numpy.random import seed from numpy.random import randn #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 random values that follow a standard normal distribution data = randn(100)
Следующий код показывает, как выполнить тест Шапиро-Уилка на этой выборке из 100 значений данных, чтобы определить, происходят ли они из нормального распределения:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9926937818527222, pvalue=0.8689165711402893)
Из результата мы видим, что статистика теста равна 0,9927 , а соответствующее значение p — 0,8689 .
Поскольку значение p не меньше 0,05, мы не можем отвергнуть нулевую гипотезу. У нас нет достаточных доказательств, чтобы сказать, что выборочные данные не имеют нормального распределения.
Этот результат не должен вызывать удивления, поскольку мы сгенерировали выборочные данные с помощью функции randn() , которая генерирует случайные значения, соответствующие стандартному нормальному распределению.
Пример 2. Тест Шапиро-Уилка на данных с ненормально распределенным распределением.
Теперь предположим, что у нас есть следующие образцы данных:
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 shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9581913948059082, pvalue=0.002994443289935589)
Из результата мы видим, что статистика теста равна 0,9582 , а соответствующее значение p — 0,00299 .
Поскольку значение p меньше 0,05, мы отвергаем нулевую гипотезу. У нас есть достаточно доказательств, чтобы сказать, что данные выборки не имеют нормального распределения.
Этот результат также не должен вызывать удивления, поскольку мы сгенерировали выборочные данные с помощью функции Poisson() , которая генерирует случайные значения, соответствующие распределению Пуассона .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие тесты на нормальность в различных статистических программах:
Как выполнить тест Шапиро-Уилка в R
Как выполнить тест Андерсона-Дарлинга на Python
Как выполнить тест Колмогорова-Смирнова в Python