← Назад к вопросам

Как работает Шапиро-Уилка?

2.0 Middle🔥 131 комментариев
#Статистические критерии и тесты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Критерий Шапиро-Уилка для проверки нормальности распределения

Что это такое?

Тест Шапиро-Уилка (Shapiro-Wilk test) — это статистический тест для проверки гипотезы о том, что выборка данных распределена по нормальному (гауссовому) распределению. Это один из самых мощных и надёжных тестов нормальности, особенно для малых выборок (n < 50).

Как он работает?

Тест основан на сравнении эмпирической функции распределения с теоретической функцией нормального распределения:

  1. Сортировка данных — упорядочиваем выборку по возрастанию: x₁ ≤ x₂ ≤ ... ≤ xₙ

  2. Вычисление статистики W — рассчитывается коэффициент корреляции между упорядоченными данными и ожидаемыми значениями при нормальном распределении:

    W = (Σ aᵢ · x₍ₙ₋ᵢ₊₁₎)² / Σ(xᵢ - x̄)²

    где:

    • aᵢ — коэффициенты Шапиро-Уилка (табулированы)
    • x̄ — среднее значение выборки
    • n — размер выборки
  3. Интерпретация p-value — если p-value > 0.05, нулевую гипотезу о нормальности не отклоняем (данные можно считать нормально распределёнными). Если p-value < 0.05, отклоняем (распределение не нормальное).

Пример на Python

import numpy as np
from scipy.stats import shapiro
import matplotlib.pyplot as plt

# Пример 1: Нормально распределённые данные
normal_data = np.random.normal(loc=100, scale=15, size=50)
stat_normal, p_normal = shapiro(normal_data)
print(f"Нормальные данные: statistic={stat_normal:.4f}, p-value={p_normal:.4f}")

# Пример 2: Ненормально распределённые данные
skewed_data = np.random.exponential(scale=2, size=50)
stat_skewed, p_skewed = shapiro(skewed_data)
print(f"Экспоненциальные данные: statistic={stat_skewed:.4f}, p-value={p_skewed:.4f}")

# Визуализация
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].hist(normal_data, bins=15, edgecolor="black", alpha=0.7)
axes[0].set_title(f"Нормальное (p={p_normal:.3f})")
axes[1].hist(skewed_data, bins=15, edgecolor="black", alpha=0.7)
axes[1].set_title(f"Экспоненциальное (p={p_skewed:.3f})")
plt.show()

Особенности и ограничения

Преимущества:

  • Очень чувствителен к отклонениям от нормальности
  • Хорош для малых выборок (5-50 наблюдений)
  • Высокая статистическая мощность

Ограничения:

  • Не рекомендуется для больших выборок (n > 5000) — может отклонить гипотезу на незначимых отклонениях
  • Чувствителен к выбросам
  • Требует точных критических значений

Когда использовать?

  • Проверка предусловий для параметрических тестов (t-тест, ANOVA)
  • Валидация данных перед регрессионным анализом
  • Анализ остатков в линейной регрессии
  • Проверка распределения в статистических исследованиях

Альтернативные тесты

Для больших выборок рекомендуется использовать:

  • Колмогоров-Смирнов тест (Kolmogorov-Smirnov)
  • Тест Андерсона-Дарлинга (Anderson-Darling)
  • Q-Q график (визуальная проверка)

Шапиро-Уилка остаётся стандартом для практического анализа нормальности в исследованиях и бизнес-аналитике.

Как работает Шапиро-Уилка? | PrepBro