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-значение.
Смотрите также
Примечания
Добавлено в версии 1.6.0.
p-значение основано на приближении, заданном уравнением 1.8 в [2]. Важно помнить, что p-значение точно только если проверяется простая гипотеза, т.е. параметры эталонного распределения известны. Если параметры оцениваются по данным (составная гипотеза), вычисленное p-значение ненадежно.
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.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-значение меньше выбранного уровня значимости.