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
Для более подробного примера см. Тест хи-квадрат на независимость переменных в таблице сопряженности.