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подходящей формы вместо 2Dnp.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)
Независимо от метода, нулевая гипотеза не будет отвергнута на выбранном уровне значимости в этом примере.