scipy.stats.

cramervonmises_2samp#

scipy.stats.cramervonmises_2samp(x, y, метод='auto', *, ось=0, nan_policy='propagate', keepdims=False)[источник]#

Выполнить двухвыборочный тест Крамера-фон Мизеса на соответствие.

Это двухвыборочная версия критерия Крамера-фон Мизеса ([1]): для двух независимых выборок \(X_1, ..., X_n\) и \(Y_1, ..., Y_m\), нулевая гипотеза состоит в том, что выборки происходят из одного и того же (неуказанного) непрерывного распределения.

Параметры:
xarray_like

Одномерный массив наблюдаемых значений случайных величин \(X_i\). Должен содержать как минимум два наблюдения.

yarray_like

Одномерный массив наблюдаемых значений случайных величин \(Y_i\). Должен содержать как минимум два наблюдения.

метод{‘auto’, ‘asymptotic’, ‘exact’}, опционально

Метод, используемый для вычисления p-значения, см. подробности в примечаниях. По умолчанию 'auto'.

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

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

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

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

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

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

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

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

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

Возвращает:
resобъект с атрибутами
статистикаfloat

Статистика Крамера-фон Мизеса.

p-значениеfloat

p-значение.

Примечания

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

Статистика вычисляется согласно уравнению 9 в [2]. Расчёт p-значения зависит от ключевого слова метод:

  • asymptotic: p-значение аппроксимируется с использованием предельного распределения тестовой статистики.

  • exact: Точное p-значение вычисляется путем перечисления всех возможных комбинаций тестовой статистики, см. [2].

Если method='auto', точный подход используется, если оба образца содержат 20 или менее наблюдений, в противном случае используется асимптотическое распределение.

Если базовое распределение не является непрерывным, p-значение, вероятно, будет консервативным (Раздел 6.2 в [3]). При ранжировании данных для вычисления статистики теста используются средние ранги, если есть связи.

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

Ссылки

[2] (1,2)

Андерсон, Т.В. (1962). О распределении двухвыборочного критерия Крамера-фон Мизеса. Анналы математической статистики, стр. 1148-1159.

[3]

Conover, W.J., Practical Nonparametric Statistics, 1971.

Примеры

Предположим, мы хотим проверить, являются ли две выборки, сгенерированные scipy.stats.norm.rvs имеют одинаковое распределение. Мы выбираем уровень значимости alpha=0.05.

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> x = stats.norm.rvs(size=100, random_state=rng)
>>> y = stats.norm.rvs(size=70, random_state=rng)
>>> res = stats.cramervonmises_2samp(x, y)
>>> res.statistic, res.pvalue
(0.29376470588235293, 0.1412873014573014)

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

Для небольших размеров выборки можно вычислить точные p-значения:

>>> x = stats.norm.rvs(size=7, random_state=rng)
>>> y = stats.t.rvs(df=2, size=6, random_state=rng)
>>> res = stats.cramervonmises_2samp(x, y, method='exact')
>>> res.statistic, res.pvalue
(0.197802197802198, 0.31643356643356646)

P-значение на основе асимптотического распределения является хорошим приближением, даже если размер выборки мал.

>>> res = stats.cramervonmises_2samp(x, y, method='asymptotic')
>>> res.statistic, res.pvalue
(0.197802197802198, 0.2966041181527128)

Независимо от метода, нулевая гипотеза не будет отвергнута на выбранном уровне значимости в этом примере.