scipy.stats.

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 являются скалярами.

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

chisquare

Примечания

Этот тест недействителен, когда наблюдаемые или ожидаемые частоты в каждой категории слишком малы. Типичное правило — все наблюдаемые и ожидаемые частоты должны быть не менее 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 подходящей формы вместо 2D np.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

[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]))