scipy.stats.

rv_continuous#

класс scipy.stats.rv_continuous(momtype=1, a=None, b=None, xtol=1e-14, badvalue=None, имя=None, длинное имя=None, формы=None, seed=None)[источник]#

Универсальный класс непрерывной случайной величины, предназначенный для наследования.

rv_continuous является базовым классом для создания конкретных классов распределений и экземпляров для непрерывных случайных величин. Не может использоваться напрямую как распределение.

Параметры:
momtypeint, необязательный

Тип расчёта обобщённого момента для использования: 0 для pdf, 1 (по умолчанию) для ppf.

afloat, опционально

Нижняя граница носителя распределения, по умолчанию минус бесконечность.

bfloat, опционально

Верхняя граница носителя распределения, по умолчанию плюс бесконечность.

xtolfloat, опционально

Допуск для вычисления фиксированной точки для общей ppf.

badvaluefloat, опционально

Значение в результирующих массивах, которое указывает на значение, для которого нарушено некоторое ограничение аргумента, по умолчанию np.nan.

имяstr, optional

Имя экземпляра. Эта строка используется для создания стандартного примера для распределений.

длинное имяstr, optional

Эта строка используется как часть первой строки документации, возвращаемой когда подкласс не имеет собственной документации. Примечание: длинное имя существует для обратной совместимости, не используйте для новых подклассов.

формыstr, optional

Форма распределения. Например "m, n" для распределения, которое принимает два целых числа в качестве двух параметров формы для всех его методов. Если не предоставлено, параметры формы будут выведены из сигнатуры приватных методов, _pdf и _cdf экземпляра.

seed{None, int, numpy.random.Generator, numpy.random.RandomState, опционально

Если seed равно None (или np.random), numpy.random.RandomState используется синглтон. Если seed является int, новый RandomState используется экземпляр, инициализированный с seed. Если seed уже является Generator или RandomState экземпляр, тогда этот экземпляр используется.

Атрибуты:
a, bfloat, опционально

Нижняя/верхняя граница поддержки несдвинутого/немасштабированного распределения. Это значение не затрагивается loc и scale параметры. Чтобы вычислить носитель сдвинутого/масштабированного распределения, используйте support метод.

Методы

rvs(*args, **kwds)

Случайные величины заданного типа.

pdf(x, *args, **kwds)

Функция плотности вероятности в точке x для заданной случайной величины.

logpdf(x, *args, **kwds)

Логарифм функции плотности вероятности в x для данного случайного распределения.

cdf(x, *args, **kwds)

Функция кумулятивного распределения заданной случайной величины.

logcdf(x, *args, **kwds)

Логарифм функции кумулятивного распределения в точке x для заданного случайного распределения.

sf(x, *args, **kwds)

Функция выживания (1 - cdf) в точке x заданного случайного распределения.

logsf(x, *args, **kwds)

Логарифм функции выживания данного случайного вектора.

ppf(q, *args, **kwds)

Процентная точка функции (обратная cdf) при q заданного случайного распределения.

isf(q, *args, **kwds)

Обратная функция выживания (обратная к sf) при q заданного случайного распределения.

moment(order, *args, **kwds)

нецентральный момент распределения указанного порядка.

stats(*args, **kwds)

Некоторые статистики заданного случайного вектора.

entropy(*args, **kwds)

Дифференциальная энтропия случайной величины.

expect([func, args, loc, scale, lb, ub, ...])

Вычислить математическое ожидание функции относительно распределения методом численного интегрирования.

median(*args, **kwds)

Медиана распределения.

mean(*args, **kwds)

Среднее распределения.

std(*args, **kwds)

Стандартное отклонение распределения.

var(*args, **kwds)

Дисперсия распределения.

interval(confidence, *args, **kwds)

Доверительный интервал с равными площадями вокруг медианы.

__call__(*args, **kwds)

Зафиксировать распределение для заданных аргументов.

fit(data, *args, **kwds)

Вернуть оценки параметров формы (если применимо), местоположения и масштаба из данных.

fit_loc_scale(data, *args)

Оценить параметры loc и scale из данных, используя 1-й и 2-й моменты.

nnlf(theta, x)

Функция отрицательного логарифма правдоподобия.

support(*args, **kwargs)

Носитель распределения.

Примечания

Публичные методы экземпляра класса распределения (например, pdf, cdf) проверяют свои аргументы и передают валидные аргументы в приватные, вычислительные методы (_pdf, _cdf). Для pdf(x), x является допустимым, если он находится в пределах носителя распределения. Допустимость параметра формы определяется _argcheck метод (который по умолчанию проверяет, что его аргументы строго положительны.)

Создание подклассов

Новые случайные величины могут быть определены путем наследования от rv_continuous класс и переопределение как минимум _pdf или _cdf метод (нормализованный к положению 0 и масштабу 1).

Если проверка положительного аргумента некорректна для вашего RV, то вам также потребуется переопределить _argcheck метод.

Для большинства распределений scipy.stats интервал поддержки не зависит от параметров формы. x нахождение в интервале поддержки эквивалентно self.a <= x <= self.b. Если любая из конечных точек области определения зависит от параметров формы, то i) распределение должно реализовывать _get_support метод; и ii) эти зависимые конечные точки должны быть опущены в вызове распределения к rv_continuous инициализатор.

Правильно, но для оставшихся методов существуют потенциально медленные значения по умолчанию, однако для скорости и/или точности вы можете переопределить:

_logpdf, _cdf, _logcdf, _ppf, _rvs, _isf, _sf, _logsf

Метод по умолчанию _rvs основывается на обратной функции распределения, _ppf, применённое к равномерной случайной величине. Для эффективной генерации случайных величин используется либо значение по умолчанию _ppf нужно переопределить (например, если обратная функция распределения может быть выражена в явной форме) или метод выборки нужно реализовать в пользовательском _rvs метод.

Если возможно, следует переопределить _isf, _sf или _logsf. Основная причина — улучшение численной точности: например, функция выживания _sf вычисляется как 1 - _cdf что может привести к потере точности, если _cdf(x) близок к единице.

Методы, которые могут быть переопределены подклассами

_rvs
_pdf
_cdf
_sf
_ppf
_isf
_stats
_munp
_entropy
_argcheck
_get_support

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

Примечание о shapes: подклассам не нужно явно их указывать. В этом случае, формы будет автоматически выведена из сигнатур переопределенных методов (pdf, cdf и т.д.). Если по какой-то причине вы предпочитаете избегать использования интроспекции, вы можете указать shapes явно в качестве аргумента конструктора экземпляра.

Замороженные распределения

Обычно вы должны предоставить параметры формы (и, опционально, параметры местоположения и масштаба) при каждом вызове метода распределения.

Альтернативно, объект может быть вызван (как функция) для фиксации параметров формы, местоположения и масштаба, возвращая «замороженный» объект непрерывной случайной величины:

rv = generic(, loc=0, scale=1)

rv_frozen объект с теми же методами, но с фиксированной заданной формой, местоположением и масштабом

Статистика

Статистики вычисляются с использованием численного интегрирования по умолчанию. Для скорости вы можете переопределить это с помощью _stats:

  • принимают параметры формы и возвращают mu, mu2, g1, g2

  • Если вы не можете вычислить один из них, верните его как None

  • Также может быть определен с помощью аргумента ключевого слова moments, который представляет собой строку, состоящую из символов “m”, “v”, “s” и/или “k”. Только компоненты, указанные в строке, должны вычисляться и возвращаться в порядке “m”, “v”, “s” или “k”, с отсутствующими значениями, возвращаемыми как None.

В качестве альтернативы вы можете переопределить _munpВозвращает оценки Марица-Джарретта стандартной ошибки выбранных экспериментальных квантилей данных. n и параметры формы и возвращает n-й нецентральный момент распределения.

Глубокое копирование / Сериализация

Если распределение или замороженное распределение глубоко копируется (пиклируется/распиклируется, и т.д.), любой базовый генератор случайных чисел копируется вместе с ним. Следствием является то, что если распределение полагается на синглтон RandomState перед копированием, оно будет полагаться на копию этого случайного состояния после копирования, и np.random.seed больше не будет управлять состоянием.

Примеры

Чтобы создать новое распределение Гаусса, мы сделаем следующее:

>>> from scipy.stats import rv_continuous
>>> class gaussian_gen(rv_continuous):
...     "Gaussian distribution"
...     def _pdf(self, x):
...         return np.exp(-x**2 / 2.) / np.sqrt(2.0 * np.pi)
>>> gaussian = gaussian_gen(name='gaussian')

scipy.stats распределения являются экземпляры, поэтому здесь мы создаем подкласс rv_continuous и создать экземпляр. Теперь у нас есть полностью функциональное распределение со всеми соответствующими методами, автоматически сгенерированными фреймворком.

Обратите внимание, что выше мы определили стандартное нормальное распределение с нулевым средним и единичной дисперсией. Сдвиг и масштабирование распределения можно выполнить с помощью loc и scale #19341 gaussian.pdf(x, loc, scale) по сути вычисляет y = (x - loc) / scale и gaussian._pdf(y) / scale.