scipy.stats.Binomial.

logcdf#

Биномиальное.logcdf(x, y=None, /, *, метод=None)[источник]#

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

Функция распределения ("CDF"), обозначаемая \(F(x)\), это вероятность того, что случайная величина \(X\) будет принимать значение меньшее или равное \(x\):

\[F(x) = P(X ≤ x)\]

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

\[F(x, y) = P(x ≤ X ≤ y)\]

logcdf вычисляет логарифм функции распределения («log-CDF»), \(\log(F(x))\)/\(\log(F(x, y))\), но это может быть численно более предпочтительно по сравнению с наивной реализацией (вычислением CDF и взятием логарифма).

logcdf принимает x для \(x\) и y для \(y\).

Параметры:
x, yarray_like

Аргументы логарифма функции распределения. x требуется; y является необязательным.

метод{None, ‘formula’, ‘logexp’, ‘complement’, ‘quadrature’, ‘subtraction’}

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

  • 'formula': использование формулы для самой log-CDF

  • 'logexp': вычислить CDF и взять логарифм

  • 'complement': вычисление log-CCDF и взятие логарифмического дополнения (см. примечания)

  • 'quadrature': численно логарифмически интегрировать лог-PDF (или, в дискретном случае, логарифмически суммировать лог-PMF)

Вместо 'complement', форма с двумя аргументами принимает:

  • 'subtraction': вычислить логарифм CDF для каждого аргумента и взять логарифмическую разность (см. Примечания)

Не все метод опции доступны для всех распределений. Если выбранная метод недоступен, NotImplementedError будет вызвано исключение.

Возвращает:
выходмассив

Логарифм CDF, вычисленный в заданном аргументе(ах).

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

cdf
logccdf

Примечания

Предположим, непрерывное распределение вероятностей имеет носитель \([l, r]\). Логарифм функции распределения достигает своего минимального значения \(\log(0) = -\infty\) для \(x ≤ l\) и его максимальное значение \(\log(1) = 0\) для \(x ≥ r\). Аналогичное утверждение можно сделать для дискретных распределений, но неравенство, определяющее минимальное значение, является строгим.

Для распределений с бесконечным носителем часто бывает, что cdf возвращать значение 0 когда аргумент теоретически находится в пределах поддержки; это может произойти, потому что истинное значение CDF слишком мало для представления выбранным типом данных. logcdf, однако, часто возвращает конечное (не -inf) результат на гораздо большей области. Аналогично, logcdf может дать строго отрицательный результат с аргументами, для которых cdf вернёт 1.0. Следовательно, может быть предпочтительнее работать с логарифмами вероятностей, чтобы избежать потери точности и связанных ограничений чисел с плавающей запятой.

«Логарифмическое дополнение» числа \(z\) математически эквивалентно \(\log(1-\exp(z))\), но он вычисляется, чтобы избежать потери точности, когда \(\exp(z)\) почти \(0\) или \(1\). Аналогично, термин "логарифмическая разность" \(w\) и \(z\) используется здесь в значении \(\log(\exp(w)-\exp(z))\).

Если y < x, CDF отрицательна, и поэтому log-CCDF является комплексным с мнимой частью \(\pi\). Для единообразия, результат этой функции всегда имеет комплексный тип данных когда y предоставляется, независимо от значения мнимой части.

Ссылки

[1]

Функция кумулятивного распределения, Википедия, https://en.wikipedia.org/wiki/Cumulative_distribution_function

Примеры

любым из целых чисел в полуоткрытом диапазоне

>>> import numpy as np
>>> from scipy import stats
>>> X = stats.Uniform(a=-0.5, b=0.5)

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

>>> X.logcdf(0.25)
-0.287682072451781
>>> np.allclose(X.logcdf(0.), np.log(X.cdf(0.)))
True