scipy.stats.Normal.

logcdf#

Normal.logcdf(x, y=None, /, *, method=None)[Quellcode]#

Logarithmus der kumulativen Verteilungsfunktion

Die kumulative Verteilungsfunktion ("CDF") mit der Bezeichnung \(F(x)\) ist die Wahrscheinlichkeit, dass die Zufallsvariable \(X\) einen Wert kleiner oder gleich \(x\) annimmt

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

Eine Variante dieser Funktion mit zwei Argumenten ist ebenfalls definiert als die Wahrscheinlichkeit, dass die Zufallsvariable \(X\) einen Wert zwischen \(x\) und \(y\) annimmt.

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

logcdf berechnet den Logarithmus der kumulativen Verteilungsfunktion ("log-CDF"), \(\log(F(x))\)/\(\log(F(x, y))\), kann aber numerisch günstiger sein als die naive Implementierung (Berechnung der CDF und anschließende Logarithmierung).

logcdf akzeptiert x für \(x\) und y für \(y\).

Parameter:
x, yarray_like

Die Argumente der log-CDF. x ist erforderlich; y ist optional.

method{None, ‘formula’, ‘logexp’, ‘complement’, ‘quadrature’, ‘subtraction’}

Die Strategie zur Auswertung der log-CDF. Standardmäßig (None) wählt die einargumentige Form der Funktion aus den folgenden Optionen, in Reihenfolge ihrer Priorität.

  • 'formula': Verwendung einer Formel für die log-CDF selbst

  • 'logexp': Auswertung der CDF und anschließende Logarithmierung

  • 'complement': Auswertung der log-CCDF und anschließende logarithmische Komplementierung (siehe Anmerkungen)

  • 'quadrature': numerische log-Integration der log-PDF (oder im diskreten Fall log-Summierung der log-PMF)

Anstelle von 'complement' akzeptiert die zweiarmentige Form

  • 'subtraction': Berechnung der log-CDF für jedes Argument und anschließende logarithmische Differenzbildung (siehe Anmerkungen)

Nicht alle method-Optionen sind für alle Verteilungen verfügbar. Wenn die ausgewählte method nicht verfügbar ist, wird ein NotImplementedError ausgelöst.

Rückgabe:
outarray

Die log-CDF, ausgewertet an den bereitgestellten Argumenten.

Siehe auch

cdf
logccdf

Hinweise

Angenommen, eine kontinuierliche Wahrscheinlichkeitsverteilung hat den Träger \([l, r]\). Die log-CDF ergibt für \(x ≤ l\) ihren Minimalwert von \(\log(0) = -\infty\) und für \(x ≥ r\) ihren Maximalwert von \(\log(1) = 0\). Eine analoge Aussage kann für diskrete Verteilungen getroffen werden, aber die Ungleichheit, die den Minimalwert regelt, ist strikt.

Bei Verteilungen mit unendlichem Träger gibt die cdf häufig einen Wert von 0 zurück, wenn das Argument theoretisch innerhalb des Trägers liegt; dies kann geschehen, weil der tatsächliche Wert der CDF zu klein ist, um durch den gewählten Datentyp dargestellt zu werden. logcdf gibt jedoch oft ein endliches Ergebnis (nicht -inf) für einen viel größeren Bereich zurück. Ebenso kann logcdf ein strikt negatives Ergebnis für Argumente liefern, für die cdf 1.0 zurückgeben würde. Folglich kann es vorteilhafter sein, mit den Logarithmen von Wahrscheinlichkeiten zu arbeiten, um Unterlauf und verwandte Einschränkungen von Gleitkommazahlen zu vermeiden.

Der "logarithmische Komplement" einer Zahl \(z\) ist mathematisch äquivalent zu \(\log(1-\exp(z))\), wird aber so berechnet, dass Genauigkeitsverlust vermieden wird, wenn \(\exp(z)\) nahe bei \(0\) oder \(1\) liegt. Ebenso wird der Begriff "logarithmische Differenz" von \(w\) und \(z\) hier verwendet, um \(\log(\exp(w)-\exp(z))\) zu bedeuten.

Wenn y < x ist, ist die CDF negativ, und daher ist die log-CCDF komplex mit dem Imaginärteil \(\pi\). Zur Konsistenz hat das Ergebnis dieser Funktion immer einen komplexen Datentyp, wenn y angegeben wird, unabhängig vom Wert des Imaginärteils.

Referenzen

[1]

Kumulative Verteilungsfunktion, Wikipedia, https://en.wikipedia.org/wiki/Cumulative_distribution_function

Beispiele

Instanziieren Sie eine Verteilung mit den gewünschten Parametern

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

Auswertung der log-CDF am gewünschten Argument

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