power_divergence#
- scipy.stats.power_divergence(f_obs, f_exp=None, ddof=0, ось=0, lambda_=None, *, nan_policy='propagate', keepdims=False)[источник]#
Статистика расхождения мощности Кресси-Рида и критерий согласия.
Эта функция проверяет нулевую гипотезу о том, что категориальные данные имеют заданные частоты, используя статистику расхождения мощности Кресси-Рида.
- Параметры:
- f_obsarray_like
Наблюдаемые частоты в каждой категории.
- f_exparray_like, необязательный
Ожидаемые частоты в каждой категории. По умолчанию предполагается, что категории равновероятны.
- ddofint, необязательный
«Дельта степеней свободы»: поправка к степеням свободы для p-значения. P-значение вычисляется с использованием хи-квадрат распределения с
k - 1 - ddofстепени свободы, где k это количество наблюдаемых частот. Значение по умолчанию для ddof равен 0.- осьint или None, по умолчанию: 0
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- lambda_float или str, опционально
Степень в статистике расхождения мощности Кресси-Рида. По умолчанию 1. Для удобства, lambda_ может быть присвоена одна из следующих строк, и в этом случае используется соответствующее числовое значение:
"pearson"(значение 1)Статистика хи-квадрат Пирсона. В этом случае функция эквивалентна
chisquare.
"log-likelihood"(значение 0)Логарифм отношения правдоподобия. Также известен как G-тест [3].
"freeman-tukey"(значение -1/2)Статистика Фримана-Тьюки.
"mod-log-likelihood"(значение -1)Модифицированное отношение правдоподобия.
"neyman"(значение -2)Статистика Неймана.
"cressie-read"(значение 2/3)Степень, рекомендованная в [5].
- 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 и возвращаемое значение
statявляются скалярами.
Смотрите также
Примечания
Этот тест недействителен, когда наблюдаемые или ожидаемые частоты в каждой категории слишком малы. Типичное правило — все наблюдаемые и ожидаемые частоты должны быть не менее 5.
Кроме того, сумма наблюдаемых и ожидаемых частот должна быть одинаковой для корректности теста;
power_divergenceвызывает ошибку, если суммы не совпадают в пределах относительного допускаeps**0.5, гдеepsэто точность входного типа данных.Когда lambda_ меньше нуля, формула для статистики включает деление на f_obs, поэтому может быть сгенерировано предупреждение или ошибка, если любое значение в f_obs равен 0.
Аналогично, предупреждение или ошибка могут быть сгенерированы, если любое значение в f_exp равно нулю, когда lambda_ >= 0.
Степени свободы по умолчанию, k-1, предназначены для случая, когда параметры распределения не оцениваются. Если p параметров оцениваются эффективным методом максимального правдоподобия, то правильные степени свободы — k-1-p. Если параметры оцениваются другим способом, то степени свободы могут быть между k-1-p и k-1. Однако также возможно, что асимптотическое распределение не является хи-квадрат, и в этом случае этот тест не подходит.
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.power_divergenceимеет экспериментальную поддержку совместимых с 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]Lowry, Richard. «Concepts and Applications of Inferential Statistics». Глава 8. https://web.archive.org/web/20171015035606/http://faculty.vassar.edu/lowry/ch8pt1.html
[2]“Критерий хи-квадрат”, https://en.wikipedia.org/wiki/Chi-squared_test
[3]“G-тест”, https://en.wikipedia.org/wiki/G-test
[4]Sokal, R. R. и Rohlf, F. J. "Biometry: the principles and practice of statistics in biological research", New York: Freeman (1981)
[5]Кресси, Н. и Рид, Т. Р. С., «Мультиномиальные критерии согласия», J. Royal Stat. Soc. Series B, Vol. 46, No. 3 (1984), стр. 440-464.
Примеры
(См.
chisquareдля дополнительных примеров.)Когда только f_obs если задано, предполагается, что ожидаемые частоты равномерны и заданы средним значением наблюдаемых частот. Здесь мы выполняем G-тест (т.е. используем статистику отношения правдоподобия):
>>> import numpy as np >>> from scipy.stats import power_divergence >>> power_divergence([16, 18, 16, 14, 12, 12], lambda_='log-likelihood') (2.006573162632538, 0.84823476779463769)
Ожидаемые частоты могут быть заданы с помощью f_exp аргумент:
>>> power_divergence([16, 18, 16, 14, 12, 12], ... f_exp=[16, 16, 16, 16, 16, 8], ... lambda_='log-likelihood') (3.3281031458963746, 0.6495419288047497)
Когда f_obs является 2-D, по умолчанию тест применяется к каждому столбцу.
>>> obs = np.array([[16, 18, 16, 14, 12, 12], [32, 24, 16, 28, 20, 24]]).T >>> obs.shape (6, 2) >>> power_divergence(obs, lambda_="log-likelihood") (array([ 2.00657316, 6.77634498]), array([ 0.84823477, 0.23781225]))
Установив
axis=None, тест применяется ко всем данным в массиве, что эквивалентно применению теста к сглаженному массиву.>>> power_divergence(obs, axis=None) (23.31034482758621, 0.015975692534127565) >>> power_divergence(obs.ravel()) (23.31034482758621, 0.015975692534127565)
ddof это изменение, которое нужно внести в количество степеней свободы по умолчанию.
>>> power_divergence([16, 18, 16, 14, 12, 12], ddof=1) (2.0, 0.73575888234288467)
Расчёт p-значений выполняется путём трансляции тестовой статистики с ddof.
>>> power_divergence([16, 18, 16, 14, 12, 12], ddof=[0,1,2]) (2.0, 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:>>> power_divergence([16, 18, 16, 14, 12, 12], ... f_exp=[[16, 16, 16, 16, 16, 8], ... [8, 20, 20, 16, 12, 12]], ... axis=1) (array([ 3.5 , 9.25]), array([ 0.62338763, 0.09949846]))