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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *