Критерий Пирсона (хи-квадрат): формула, степени свободы и пример расчёта

Критерий Пирсона (хи-квадрат) показывает, случайно ли фактические частоты отличаются от ожидаемых.

Разобрали формулу и степени свободы, посчитали вручную два примера, кубик и A/B-тест, и повторили расчёт в Excel и Python, где p расходится из-за поправки Йетса.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3090 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3744 экспертных мнения Подписаться на Телеграм-канал
Обложка: Критерий Пирсона (хи-квадрат): формула, степени свободы и пример расчёта

Критерий Пирсона, он же критерий хи-квадрат (χ²), проверяет, случайно ли наблюдаемые частоты отличаются от ожидаемых. Для каждой категории берёте разницу между фактом и ожиданием, возводите в квадрат, делите на ожидание и всё складываете. Сумму сравниваете с критическим значением для своего числа степеней свободы или смотрите на p-значение: если p меньше 0,05, расхождение считают неслучайным.

Не путайте его с коэффициентом корреляции Пирсона. Корреляция меряет связь двух числовых величин, например роста и веса, и про неё у нас есть отдельный разбор корреляции. Хи-квадрат работает с категориями и их количеством: грани кубика, «купил» и «не купил», варианты ответа в анкете.

CheckroiCheckroiПодборка курсов по статистике42 курса • 20 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Две задачи, которые решает критерий хи-квадрат

Рой-аналитик сравнивает частоты на двух досках

Карл Пирсон описал критерий в статье 1900 года в журнале Philosophical Magazine. Сейчас им решают две разные задачи. Формула у них одна, а ожидаемые частоты и степени свободы считаются по-разному.

Задача Какой вопрос Откуда ожидаемые частоты Степени свободы
Критерий согласия Соответствуют ли данные заданному распределению Из теоретических вероятностей: n × pi k − 1 − m
Критерий независимости Связаны ли два категориальных признака Из итогов таблицы сопряжённости: итог строки × итог столбца / n (r − 1) × (c − 1)

Здесь k означает число категорий, m показывает, сколько параметров распределения вы оценили по той же выборке, а r и c равны числу строк и столбцов таблицы.

Задача на согласие: честный ли кубик, подчиняются ли данные нормальному закону. Задача на независимость: зависит ли покупка от версии лендинга в A/B-тесте, по-разному ли отвечают на анкету мужчины и женщины. Обе встречаются в работе статистика и аналитика, а учат им на курсах по анализу данных.

Формула критерия Пирсона и степени свободы

χ² = Σ (O − E)² / E

O — наблюдаемая (фактическая) частота в ячейке
E — ожидаемая частота в той же ячейке

Чем больше χ², тем сильнее данные расходятся с нулевой гипотезой. Ноль получается, только когда факт совпадает с ожиданием в каждой ячейке.

Степени свободы показывают, сколько ячеек могут меняться свободно при заданных итогах. Для критерия согласия это число категорий минус единица минус число параметров, оценённых по выборке. Проверяете нормальность и берёте среднее и стандартное отклонение из тех же данных? Вычитайте ещё два. Так же считает справочник NIST по инженерной статистике.

Для таблицы сопряжённости правило проще: (строки − 1) × (столбцы − 1). Его же приводит справка Microsoft по функции ХИ2.ТЕСТ.

Критические значения для уровней значимости 0,05 и 0,01 мы посчитали функцией chi2.ppf из SciPy:

Степени свободы α = 0,05 α = 0,01
1 3,84 6,63
2 5,99 9,21
3 7,81 11,34
4 9,49 13,28
5 11,07 15,09
6 12,59 16,81
7 14,07 18,48
8 15,51 20,09
9 16,92 21,67
10 18,31 23,21

Если ваш χ² больше числа из таблицы, нулевую гипотезу отвергают.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Как посчитать критерий Пирсона вручную

Игральный кубик, тетрадь с таблицей частот и карандаш на столе

Возьмём кубик, который бросили 120 раз. Если он честный, каждая грань должна выпасть примерно 20 раз. Такие броски легко смоделировать самому модулем random в Python и посмотреть, как χ² ведёт себя на честных данных.

  1. Сформулируйте гипотезы. H0: кубик честный, все грани равновероятны. H1: какие-то грани выпадают чаще других.
  2. Выберите уровень значимости до расчёта. Чаще всего берут α = 0,05.
  3. Посчитайте ожидаемые частоты: 120 / 6 = 20 для каждой грани.
  4. Для каждой грани посчитайте (O − E)² / E и сложите результаты.
  5. Найдите степени свободы: 6 − 1 = 5.
  6. Сравните сумму с критическим значением из таблицы выше.
Грань Выпало (O) Ожидали (E) (O − E)² / E
1 25 20 1,25
2 17 20 0,45
3 15 20 1,25
4 23 20 0,45
5 24 20 0,80
6 16 20 0,80
Итого 120 120 5,00

Получилось χ² = 5,0. Критическое значение для пяти степеней свободы и α = 0,05 равно 11,07. Пять меньше 11,07, значит, оснований считать кубик нечестным нет. Точное p-значение здесь 0,416.

Обратите внимание на формулировку. Тест не доказал, что кубик честный. Он только не нашёл расхождения, которое трудно списать на случай, а небольшой перекос на 120 бросках вполне может пропустить. С корреляцией история та же: нулевой коэффициент не доказывает, что связи нет, об этом подробнее в разборе корреляции.

Пример с таблицей сопряжённости: A/B-тест лендинга

Рой сосредоточенно сравнивает две версии лендинга на мониторах

Две версии лендинга получили по 1 000 посетителей. На версии А купили 120 человек, на версии Б 150. Разница в три процентных пункта настоящая или случайная?

Купили Не купили Итого
Лендинг А 120 880 1 000
Лендинг Б 150 850 1 000
Итого 270 1 730 2 000

Ожидаемая частота ячейки = итог строки × итог столбца / общий итог. Для «купили» на лендинге А это 1 000 × 270 / 2 000 = 135. Так же получаются остальные три ячейки: 865, 135 и 865.

χ² = (120 − 135)²/135 + (880 − 865)²/865 + (150 − 135)²/135 + (850 − 865)²/865
   = 1,667 + 0,260 + 1,667 + 0,260 = 3,85

Степень свободы одна: (2 − 1) × (2 − 1). Критическое значение 3,84, наш χ² = 3,85 чуть больше, p = 0,0496. Формально различие значимо.

Но для таблиц 2 × 2 часто применяют поправку Йетса на непрерывность: каждое наблюдаемое значение сдвигают на 0,5 к ожидаемому. С ней χ² = 3,60, p = 0,058, и вывод меняется на противоположный.

По такому пограничному результату мы бы не объявляли победу лендинга Б: честнее продолжить тест и набрать ещё посетителей. Как не обмануться на результатах, мы подробно разобрали в статье про A/B-тестирование.

Как рассчитать критерий Пирсона в Excel

В Excel для хи-квадрата есть три функции, и важно не перепутать, что каждая возвращает.

Функция Что возвращает Пример для кубика
ХИ2.ТЕСТ(фактический_интервал;ожидаемый_интервал) p-значение, а не сам χ² =ХИ2.ТЕСТ(B2:G2;B3:G3) → 0,416
ХИ2.ОБР.ПХ(вероятность;степени_свободы) критическое значение =ХИ2.ОБР.ПХ(0,05;5) → 11,07
ХИ2.РАСП.ПХ(x;степени_свободы) p-значение для готового χ² =ХИ2.РАСП.ПХ(5;5) → 0,416

Порядок действий для кубика:

  1. В строку 1 впишите номера граней, в строку 2 фактические частоты, ячейки B2:G2.
  2. В B3 введите ожидаемую частоту =СУММ($B$2:$G$2)/6 и протяните формулу до G3.
  3. В свободную ячейку введите =ХИ2.ТЕСТ(B2:G2;B3:G3), получится около 0,416.
  4. Если нужен сам χ², посчитайте его формулой =СУММПРОИЗВ((B2:G2-B3:G3)^2/B3:G3), выйдет 5.

Две ловушки. Ожидаемые частоты Excel сам не считает, для таблицы сопряжённости их надо вывести формулой «итог строки × итог столбца / общий итог». А в формуле из справки по ХИ2.ТЕСТ нет поправки Йетса, поэтому для A/B-примера функция покажет вариант без поправки.

Перед расчётом полезно посмотреть на данные глазами. Постройте гистограмму в Excel, и сильный перекос станет виден ещё до всяких формул.

Критерий Пирсона в Python: chisquare и chi2_contingency

В Python хи-квадрат считают библиотекой SciPy. Поставьте её командой pip install scipy, лучше в виртуальном окружении.

Критерий согласия считает функция scipy.stats.chisquare:

from scipy.stats import chisquare

observed = [25, 17, 15, 23, 24, 16]   # сколько раз выпала каждая грань
expected = [20, 20, 20, 20, 20, 20]   # честный кубик: 120 / 6

stat, p = chisquare(observed, expected)
print(f"хи-квадрат = {stat:.2f}, p = {p:.3f}")
хи-квадрат = 5.00, p = 0.416

Если ожидаемые частоты не передать, функция считает категории равновероятными, для кубика результат будет тем же. Оценивали параметры распределения по выборке? Укажите их число в аргументе ddof, и степеней свободы станет k − 1 − ddof.

Для таблицы сопряжённости есть scipy.stats.chi2_contingency. Ожидаемые частоты и степени свободы она находит сама:

from scipy.stats import chi2_contingency

#          купили  не купили
table = [[120,    880],    # лендинг А
         [150,    850]]    # лендинг Б

res = chi2_contingency(table)
print(f"хи-квадрат = {res.statistic:.2f}, p = {res.pvalue:.3f}, df = {res.dof}")
print("ожидаемые частоты:")
print(res.expected_freq)

res_raw = chi2_contingency(table, correction=False)
print(f"без поправки Йетса: хи-квадрат = {res_raw.statistic:.2f}, p = {res_raw.pvalue:.3f}")
хи-квадрат = 3.60, p = 0.058, df = 1
ожидаемые частоты:
[[135. 865.]
 [135. 865.]]
без поправки Йетса: хи-квадрат = 3.85, p = 0.050

По умолчанию функция применяет поправку Йетса, когда степень свободы одна, так написано в документации SciPy. Поэтому Python и Excel на одной таблице 2 × 2 дают разные p, и ошибки здесь нет ни у того, ни у другого.

Силу связи покажет функция scipy.stats.contingency.association. Она умеет считать V Крамера и коэффициент сопряжённости Пирсона:

from scipy.stats.contingency import association

table = [[120, 880],
         [150, 850]]

print(f"V Крамера = {association(table, method='cramer'):.3f}")
print(f"коэффициент сопряжённости Пирсона = {association(table, method='pearson'):.3f}")
V Крамера = 0.044
коэффициент сопряжённости Пирсона = 0.044

Оба коэффициента лежат между 0 и 1. Значение 0,044 близко к нулю, связь слабая. Если хотите считать такие вещи уверенно, начните с основ языка:

CheckroiCheckroiПодборка курсов по Python568 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→ Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки и когда критерий не подходит

  • Мало наблюдений в ячейках. В документации SciPy типичным правилом названы наблюдаемые и ожидаемые частоты не меньше 5 в каждой категории. В справке Microsoft осторожнее: «некоторые специалисты по статистике» считают, что ожидаемая частота должна быть от 5. Решение: объединить редкие категории, а для таблицы 2 × 2 взять точный критерий Фишера, в SciPy это fisher_exact.
  • Проценты вместо количеств. χ² зависит от объёма выборки, поэтому доли и проценты в формуле дают неверную статистику. Решение: подставлять только абсолютные частоты.
  • Одно наблюдение попадает в несколько ячеек. Критерий рассчитан на независимые наблюдения: один человек занимает одну ячейку. Если в анкете можно отметить несколько вариантов, обычный хи-квадрат к ней не подходит.
  • Значимость путают с силой связи. В A/B-примере V Крамера 0,044, связь слабая даже при p около 0,05. На выборке в сотни тысяч человек значимым становится и крошечное расхождение.
  • Не вычли оценённые параметры. Проверяя нормальность со средним и разбросом из той же выборки, отнимайте ещё две степени свободы. Иначе степеней свободы окажется больше, критическое значение выйдет завышенным, и расхождение с нормальным законом вы будете пропускать.
  • Подогнали интервалы под ответ. Для непрерывных данных χ² зависит от того, как вы разбили значения на интервалы, это прямо отмечает NIST. Решение: выбрать интервалы до расчёта и больше их не трогать.

Где освоить статистику системно

Хи-квадрат лишь один из критериев, которые нужны аналитику. Рядом с ним стоят t-тест, дисперсионный анализ и регрессия, и без системы легко взять не тот метод. Если думаете о профессии, посмотрите план, как стать статистиком. Сравнить программы можно в каталоге курсов по статистике, пять из них ниже:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Статистика и A/B-тестирование
Перейти на сайт курса
БруноямБруноям24 900 ₽1658 ₽/мес.2 месяцаОбзор курса
Теория вероятностей и математическая статистика
Перейти на сайт курса
GeekBrainsGeekBrains15 000 ₽417 ₽/мес.1 месяцОбзор курса
Основы практической статистики
Перейти на сайт курса
НетологияНетология4800 ₽ - 14 днейОбзор курса
Экономика и статистика
Перейти на сайт курса
МИТУ — Московский Институт Технологий и УправленияМИТУ45 000 ₽6250 ₽/мес.54 месяцаОбзор курса
Профессиональная переподготовка «Медицинская статистика»
Перейти на сайт курса
Единый центр обучения (ЕЦО)ЕЦО21 500 ₽3916 ₽/мес.288 часовОбзор курса

Больше программ — в полном каталоге курсов по статистике

Часто задаваемые вопросы

Чем критерий Пирсона отличается от коэффициента корреляции Пирсона?

Критерий хи-квадрат работает с частотами категорий и проверяет, случайно ли факт отличается от ожидания. Коэффициент корреляции меряет линейную связь двух числовых величин и лежит в пределах от −1 до 1. Общая у них только фамилия автора, Карла Пирсона.

Как найти число степеней свободы для критерия Пирсона?

Для критерия согласия возьмите число категорий, вычтите единицу и число параметров, оценённых по выборке. Для таблицы сопряжённости считайте (строки − 1) × (столбцы − 1), у таблицы 2 × 2 степень свободы одна.

Какой должна быть ожидаемая частота в ячейке?

Типичное правило из документации SciPy: наблюдаемые и ожидаемые частоты не меньше 5 в каждой категории. Если ячейки меньше, объедините редкие категории, а для таблицы 2 × 2 возьмите точный критерий Фишера.

Почему Excel и Python дают разное p для одной таблицы 2 × 2?

Функция chi2_contingency из SciPy по умолчанию применяет поправку Йетса, когда степень свободы одна. В формуле из справки по ХИ2.ТЕСТ поправки нет. Чтобы результаты совпали, передайте в Python аргумент correction=False.

Можно ли считать критерий Пирсона по процентам?

Нет. Значение χ² зависит от объёма выборки, поэтому в формулу подставляют только абсолютные частоты, то есть число наблюдений в каждой ячейке.

Что делать, если p-значение получилось около 0,05?

Не объявлять победителя по одной цифре. В примере с лендингами поправка Йетса меняет вывод на противоположный, поэтому вариант расчёта стоит выбрать до теста, а при пограничном результате набрать больше данных.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!