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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.