scipy.stats.mstats.

chisquare#

scipy.stats.mstats.chisquare(f_obs, f_exp=None, ddof=0, ось=0, *, sum_check=True, nan_policy='propagate', keepdims=False)[источник]#

Выполнить критерий хи-квадрат Пирсона.

Критерий хи-квадрат Пирсона [1] является тестом согласия для мультиномиального распределения с заданными вероятностями; то есть он оценивает нулевую гипотезу о том, что наблюдаемые частоты (количества) получены независимой выборкой из N наблюдения из категориального распределения с заданными ожидаемыми частотами.

Параметры:
f_obsarray_like

Наблюдаемые частоты в каждой категории.

f_exparray_like, необязательный

Ожидаемые частоты в каждой категории. По умолчанию предполагается, что категории равновероятны.

ddofint, необязательный

«Дельта степеней свободы»: поправка к степеням свободы для p-значения. P-значение вычисляется с использованием хи-квадрат распределения с k - 1 - ddof степени свободы, где k равно количеству категорий. Значение по умолчанию для ddof равен 0.

осьint или None, по умолчанию: 0

Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если None, вход будет сведён в одномерный массив перед вычислением статистики.

sum_checkbool, необязательно

Выполнять ли проверку, что sum(f_obs) - sum(f_exp) == 0. Если True, (по умолчанию) вызывает ошибку, когда относительная разница превышает квадратный корень точности типа данных. См. Примечания для обоснования и возможных исключений.

nan_policy{‘propagate’, ‘omit’, ‘raise’}

Определяет, как обрабатывать входные значения NaN.

  • propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.

  • omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.

  • raise: если присутствует NaN, то ValueError будет вызвано исключение.

keepdimsbool, по умолчанию: False

Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.

Возвращает:
res: Power_divergenceResult

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

статистикаfloat или ndarray

Статистика критерия хи-квадрат. Значение является float, если ось является None или f_obs и f_exp являются одномерными.

p-значениеfloat или ndarray

p-значение теста. Значение является float, если ddof и атрибут результата статистика являются скалярами.

Смотрите также

scipy.stats.power_divergence
scipy.stats.fisher_exact

Точный тест Фишера для таблицы сопряжённости 2x2.

scipy.stats.barnard_exact

Безусловный точный тест. Альтернатива тесту хи-квадрат для малых размеров выборки.

Критерий хи-квадрат

Расширенный пример

Примечания

Этот тест недействителен, когда наблюдаемые или ожидаемые частоты в каждой категории слишком малы. Типичное правило — все наблюдаемые и ожидаемые частоты должны быть не менее 5. Согласно [2], рекомендуется, чтобы общее количество наблюдений было больше 13, в противном случае следует использовать точные тесты (такие как точный тест Барнарда), поскольку они не дают избыточного отклонения.

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

Для критерия хи-квадрат Пирсона общие наблюдаемые и ожидаемые частоты должны совпадать, чтобы p-значение точно отражало вероятность наблюдения такого экстремального значения статистики при нулевой гипотезе. Эта функция может использоваться для выполнения других статистических тестов, которые не требуют равенства общих частот. Например, для проверки нулевой гипотезы, что f_obs[i] распределена по Пуассону с математическим ожиданием f_exp[i], установите ddof=-1 и sum_check=False. Этот тест следует из того факта, что случайная величина Пуассона со средним и дисперсией f_exp[i] приблизительно нормальна с тем же средним и дисперсией; статистика хи-квадрат стандартизирует, возводит в квадрат и суммирует наблюдения; и сумма n квадраты стандартных нормальных переменных следуют распределению хи-квадрат с n степени свободы.

Начиная с SciPy 1.9, np.matrix входные данные (не рекомендуется для нового кода) преобразуются в np.ndarray перед выполнением вычисления. В этом случае результатом будет скаляр или np.ndarray подходящей формы вместо 2D np.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр или np.ndarray вместо маскированного массива с mask=False.

chisquare имеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окружения SCIPY_ARRAY_API=1 и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).

Библиотека

CPU

GPU

NumPy

н/д

CuPy

н/д

PyTorch

JAX

⚠️ нет JIT

⚠️ нет JIT

Dask

⚠️ вычисляет граф

н/д

См. Поддержка стандарта array API для получения дополнительной информации.

Ссылки

[1]

«Критерий хи-квадрат Пирсона». Википедия. https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test

[2]

Пирсон, Карл. «О критерии, что данная система отклонений от вероятного в случае коррелированной системы переменных такова, что её можно разумно предположить возникшей из случайной выборки», Философский журнал. Серия 5. 50 (1900), стр. 157-175.

Примеры

Когда только обязательные f_obs аргумент задан, предполагается, что ожидаемые частоты равномерны и заданы средним значением наблюдаемых частот:

>>> import numpy as np
>>> from scipy.stats import chisquare
>>> chisquare([16, 18, 16, 14, 12, 12])
Power_divergenceResult(statistic=2.0, pvalue=0.84914503608460956)

Необязательный f_exp аргумент задает ожидаемые частоты.

>>> chisquare([16, 18, 16, 14, 12, 12], f_exp=[16, 16, 16, 16, 16, 8])
Power_divergenceResult(statistic=3.5, pvalue=0.62338762774958223)

Когда f_obs является 2-D, по умолчанию тест применяется к каждому столбцу.

>>> obs = np.array([[16, 18, 16, 14, 12, 12], [32, 24, 16, 28, 20, 24]]).T
>>> obs.shape
(6, 2)
>>> chisquare(obs)
Power_divergenceResult(statistic=array([2.        , 6.66666667]), pvalue=array([0.84914504, 0.24663415]))

Установив axis=None, тест применяется ко всем данным в массиве, что эквивалентно применению теста к сглаженному массиву.

>>> chisquare(obs, axis=None)
Power_divergenceResult(statistic=23.31034482758621, pvalue=0.015975692534127565)
>>> chisquare(obs.ravel())
Power_divergenceResult(statistic=23.310344827586206, pvalue=0.01597569253412758)

ddof это изменение, которое нужно внести в количество степеней свободы по умолчанию.

>>> chisquare([16, 18, 16, 14, 12, 12], ddof=1)
Power_divergenceResult(statistic=2.0, pvalue=0.7357588823428847)

Расчёт p-значений выполняется путём трансляции статистики хи-квадрат с ddof.

>>> chisquare([16, 18, 16, 14, 12, 12], ddof=[0, 1, 2])
Power_divergenceResult(statistic=2.0, pvalue=array([0.84914504, 0.73575888, 0.5724067 ]))

f_obs и f_exp также транслируются. В следующем, f_obs имеет форму (6,) и f_exp имеет форму (2, 6), поэтому результат широковещания f_obs и f_exp имеет форму (2, 6). Для вычисления желаемых статистик хи-квадрат мы используем axis=1:

>>> chisquare([16, 18, 16, 14, 12, 12],
...           f_exp=[[16, 16, 16, 16, 16, 8], [8, 20, 20, 16, 12, 12]],
...           axis=1)
Power_divergenceResult(statistic=array([3.5 , 9.25]), pvalue=array([0.62338763, 0.09949846]))

Для более подробного примера см. Критерий хи-квадрат.