scipy.stats.

cramervonmises#

scipy.stats.cramervonmises(rvs, функция распределения, args=(), *, ось=0, nan_policy='propagate', keepdims=False)[источник]#

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

Это выполняет тест на соответствие кумулятивной функции распределения (cdf) \(F\) по сравнению с эмпирической функцией распределения \(F_n\) наблюдаемых случайных величин \(X_1, ..., X_n\) которые предполагаются независимыми и одинаково распределёнными ([1]). Нулевая гипотеза состоит в том, что \(X_i\) имеют кумулятивную функцию распределения \(F\).

Параметры:
rvsarray_like

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

функция распределенияstr или callable

Функция кумулятивного распределения \(F\) для проверки наблюдений. Если строка, это должно быть имя распределения в scipy.stats. Если используется вызываемый объект, то он применяется для вычисления функции распределения: cdf(x, *args) -> float.

argsкортеж, необязательный

Параметры распределения. Предполагается, что они известны; см. Примечания.

ось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-значение.

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

kstest, cramervonmises_2samp

Примечания

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

p-значение основано на приближении, заданном уравнением 1.8 в [2]. Важно помнить, что p-значение точно только если проверяется простая гипотеза, т.е. параметры эталонного распределения известны. Если параметры оцениваются по данным (составная гипотеза), вычисленное p-значение ненадежно.

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

Ссылки

[1]

Критерий Крамера-фон Мизеса, Википедия, https://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93von_Mises_criterion

[2]

Csörgő, S. and Faraway, J. (1996). The Exact and Asymptotic Distribution of Cramér-von Mises Statistics. Journal of the Royal Statistical Society, pp. 221-234.

Примеры

Предположим, мы хотим проверить, сгенерированы ли данные 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=500, random_state=rng)
>>> res = stats.cramervonmises(x, 'norm')
>>> res.statistic, res.pvalue
(0.1072085112565724, 0.5508482238203407)

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

Теперь предположим, мы хотим проверить, согласуются ли те же выборки, сдвинутые на 2.1, с тем, что они взяты из нормального распределения со средним 2.

>>> y = x + 2.1
>>> res = stats.cramervonmises(y, 'norm', args=(2,))
>>> res.statistic, res.pvalue
(0.8364446265294695, 0.00596286797008283)

Здесь мы использовали args ключевое слово для указания среднего значения (loc) нормального распределения для проверки данных. Это эквивалентно следующему, в котором мы создаем замороженное нормальное распределение со средним 2.1, затем передаем его cdf метод в качестве аргумента.

>>> frozen_dist = stats.norm(loc=2)
>>> res = stats.cramervonmises(y, frozen_dist.cdf)
>>> res.statistic, res.pvalue
(0.8364446265294695, 0.00596286797008283)

В любом случае мы отвергнем нулевую гипотезу о том, что наблюдаемая выборка взята из нормального распределения со средним 2 (и дисперсией по умолчанию 1), потому что p-значение меньше выбранного уровня значимости.