scipy.stats.contingency.

chi2_contingency#

scipy.stats.contingency.chi2_contingency(observed, коррекция=True, lambda_=None, *, метод=None)[источник]#

Критерий хи-квадрат независимости переменных в таблице сопряженности.

Эта функция вычисляет статистику хи-квадрат и p-значение для проверки гипотезы независимости наблюдаемых частот в таблице сопряженности [1] observed. Ожидаемые частоты вычисляются на основе маргинальных сумм в предположении независимости; см. scipy.stats.contingency.expected_freq. Количество степеней свободы (выражено с использованием функций и атрибутов numpy):

dof = observed.size - sum(observed.shape) + observed.ndim - 1
Параметры:
observedarray_like

Таблица сопряженности. Таблица содержит наблюдаемые частоты (т.е. количество вхождений) в каждой категории. В двумерном случае таблицу часто описывают как «таблицу R x C».

коррекцияbool, необязательно

Если True, и степени свободы равны 1, применить поправку Йейтса на непрерывность. Эффект поправки заключается в корректировке каждого наблюдаемого значения на 0.5 в сторону соответствующего ожидаемого значения.

lambda_float или str, опционально

По умолчанию статистика, вычисляемая в этом тесте, — это статистика хи-квадрат Пирсона [2]. lambda_ позволяет статистику из семейства расходимости мощности Кресси-Рида [3] для использования вместо. См. scipy.stats.power_divergence подробности.

методResamplingMethod, опционально

Определяет метод, используемый для вычисления p-значения. Совместимо только с correction=False, по умолчанию lambda_, и таблицы сопряженности. Если метод является экземпляром PermutationMethod/MonteCarloMethod, p-значение вычисляется с использованием scipy.stats.permutation_test/scipy.stats.monte_carlo_test с предоставленными параметрами конфигурации и другими соответствующими настройками. В противном случае p-значение вычисляется, как описано в примечаниях. Обратите внимание, что если метод является экземпляром MonteCarloMethod, rvs атрибут должен оставаться неуказанным; выборки Монте-Карло всегда извлекаются с использованием rvs метод scipy.stats.random_table.

Добавлено в версии 1.15.0.

Возвращает:
resChi2ContingencyResult

Объект, содержащий атрибуты:

статистикаfloat

Тестовая статистика.

p-значениеfloat

P-значение теста.

dofint

Степени свободы. NaN, если метод не является None.

expected_freqndarray, той же формы, что и observed

Ожидаемые частоты, основанные на маргинальных суммах таблицы.

Примечания

Часто цитируемое правило для валидности этого расчета заключается в том, что тест следует использовать только если наблюдаемые и ожидаемые частоты в каждой ячейке составляют не менее 5.

Это тест на независимость различных категорий популяции. Тест имеет смысл только тогда, когда размерность observed равно двум или более. Применение теста к одномерной таблице всегда будет давать результат ожидаемый равно observed и статистика хи-квадрат, равная 0.

Эта функция не обрабатывает маскированные массивы, потому что вычисление не имеет смысла с пропущенными значениями.

Как scipy.stats.chisquare, эта функция вычисляет статистику хи-квадрат; удобство, которое предоставляет эта функция, заключается в определении ожидаемых частот и степеней свободы по заданной таблице сопряжённости. Если они уже известны, и если поправка Йейтса не требуется, можно использовать scipy.stats.chisquare. То есть, если вызвать:

res = chi2_contingency(obs, correction=False)

тогда верно следующее:

(res.statistic, res.pvalue) == stats.chisquare(obs.ravel(),
                                               f_exp=ex.ravel(),
                                               ddof=obs.size - 1 - dof)

The lambda_ аргумент был добавлен в версии 0.13.0 scipy.

Ссылки

[1]

«Таблица сопряженности», https://en.wikipedia.org/wiki/Contingency_table

[2]

“Критерий хи-квадрат Пирсона”, https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test

[3]

Кресси, Н. и Рид, Т. Р. С., «Мультиномиальные критерии согласия», J. Royal Stat. Soc. Series B, Vol. 46, No. 3 (1984), стр. 440-464.

Примеры

Двусторонний пример (2 x 3):

>>> import numpy as np
>>> from scipy.stats import chi2_contingency
>>> obs = np.array([[10, 10, 20], [20, 20, 20]])
>>> res = chi2_contingency(obs)
>>> res.statistic
2.7777777777777777
>>> res.pvalue
0.24935220877729619
>>> res.dof
2
>>> res.expected_freq
array([[ 12.,  12.,  16.],
       [ 18.,  18.,  24.]])

Выполните тест, используя отношение правдоподобия (т.е. "G-тест") вместо статистики хи-квадрат Пирсона.

>>> res = chi2_contingency(obs, lambda_="log-likelihood")
>>> res.statistic
2.7688587616781319
>>> res.pvalue
0.25046668010954165

Четырёхмерный пример (2 x 2 x 2 x 2):

>>> obs = np.array(
...     [[[[12, 17],
...        [11, 16]],
...       [[11, 12],
...        [15, 16]]],
...      [[[23, 15],
...        [30, 22]],
...       [[14, 17],
...        [15, 16]]]])
>>> res = chi2_contingency(obs)
>>> res.statistic
8.7584514426741897
>>> res.pvalue
0.64417725029295503

Когда сумма элементов в двумерной таблице мала, p-значение, полученное с помощью аппроксимации по умолчанию, может быть неточным. Рассмотрите возможность передачи PermutationMethod или MonteCarloMethod как метод параметр с correction=False.

>>> from scipy.stats import PermutationMethod
>>> obs = np.asarray([[12, 3],
...                   [17, 16]])
>>> res = chi2_contingency(obs, correction=False)
>>> ref = chi2_contingency(obs, correction=False, method=PermutationMethod())
>>> res.pvalue, ref.pvalue
(0.0614122539870913, 0.1074)  # may vary

Для более подробного примера см. Тест хи-квадрат на независимость переменных в таблице сопряженности.