Тест Шапиро-Уилка является тестом на нормальность. Он используется для определения того, соответствует ли выборка нормальному распределению .
Чтобы выполнить тест Шапиро-Уилка в Python, мы можем использовать функцию scipy.stats.shapiro() , которая имеет следующий синтаксис:
scipy.stats.shapiro(x)
куда:
- x: массив демонстрационных данных.
Эта функция возвращает тестовую статистику и соответствующее p-значение.
Если p-значение ниже определенного уровня значимости, то у нас есть достаточно доказательств, чтобы сказать, что данные выборки не получены из нормального распределения.
В этом руководстве показано несколько примеров использования этой функции на практике.
Пример 1. Тест Шапиро-Уилка для нормально распределенных данных
Предположим, у нас есть следующие образцы данных:
from numpy.random import seed
from numpy.random import randn
#set seed (e.g. 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 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 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