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)\]logcdfberechnet 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).logcdfakzeptiert 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
NotImplementedErrorausgelöst.
- Rückgabe:
- outarray
Die log-CDF, ausgewertet an den bereitgestellten Argumenten.
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
cdfhäufig einen Wert von0zurü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.logcdfgibt jedoch oft ein endliches Ergebnis (nicht-inf) für einen viel größeren Bereich zurück. Ebenso kannlogcdfein strikt negatives Ergebnis für Argumente liefern, für diecdf1.0zurü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 < xist, 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