expect#
- rv_histogram.expect(func=None, args=(), loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds)[Quelle]#
Berechnet den Erwartungswert einer Funktion bezüglich der Verteilung durch numerische Integration.
Der Erwartungswert einer Funktion
f(x)bezüglich einer Verteilungdistist definiert alsub E[f(x)] = Integral(f(x) * dist.pdf(x)), lb
wobei
ubundlbArgumente sind undxdiedist.pdf(x)Verteilung hat. Wenn die Grenzenlbundubder Unterstützung der Verteilung entsprechen, z.B.[-inf, inf]im Standardfall, dann ist das Integral der uneingeschränkte Erwartungswert vonf(x). Ebenso kann die Funktionf(x)so definiert sein, dassf(x)0außerhalb eines endlichen Intervalls ist, in welchem Fall der Erwartungswert innerhalb des endlichen Bereichs[lb, ub]berechnet wird.- Parameter:
- funccallable, optional
Funktion, für die das Integral berechnet wird. Nimmt nur ein Argument. Der Standardwert ist die Identitätsabbildung f(x) = x.
- argstuple, optional
Formparameter der Verteilung.
- locfloat, optional
Lokationsparameter (Standardwert=0).
- scalefloat, optional
Skalenparameter (Standardwert=1).
- lb, ubskalar, optional
Untere und obere Grenze für die Integration. Standardmäßig auf die Unterstützung der Verteilung gesetzt.
- conditionalbool, optional
Wenn True, wird das Integral um die bedingte Wahrscheinlichkeit des Integrationsintervalls korrigiert. Der Rückgabewert ist der Erwartungswert der Funktion, bedingt darauf, im gegebenen Intervall zu liegen. Standardmäßig False.
- Zusätzliche Schlüsselwortargumente werden an die Integrationsroutine übergeben.
- Rückgabe:
- expectfloat
Der berechnete Erwartungswert.
Hinweise
Das Integrationsverhalten dieser Funktion wird von
scipy.integrate.quadgeerbt. Weder diese Funktion nochscipy.integrate.quadkönnen überprüfen, ob das Integral existiert oder endlich ist. Zum Beispiel gibtcauchy(0).mean()np.nanzurück undcauchy(0).expect()gibt0.0zurück.Ebenso wird die Genauigkeit der Ergebnisse nicht von der Funktion überprüft.
scipy.integrate.quadist typischerweise zuverlässig für numerisch günstige Integrale, aber es gibt keine Garantie, dass sie für alle möglichen Intervalle und Integranden zu einem korrekten Wert konvergiert. Diese Funktion wird der Bequemlichkeit halber bereitgestellt; für kritische Anwendungen sollten Ergebnisse mit anderen Integrationsmethoden überprüft werden.Die Funktion ist nicht vektorisiert.
Beispiele
Um die Auswirkung der Integrationsgrenzen zu verstehen, betrachten Sie
>>> from scipy.stats import expon >>> expon(1).expect(lambda x: 1, lb=0.0, ub=2.0) 0.6321205588285578
Dies ist nahe bei
>>> expon(1).cdf(2.0) - expon(1).cdf(0.0) 0.6321205588285577
Wenn
conditional=True>>> expon(1).expect(lambda x: 1, lb=0.0, ub=2.0, conditional=True) 1.0000000000000002
Die leichte Abweichung von 1 ist auf die numerische Integration zurückzuführen.
Der Integrand kann als komplexwertige Funktion behandelt werden, indem
complex_func=Trueanscipy.integrate.quadübergeben wird.>>> import numpy as np >>> from scipy.stats import vonmises >>> res = vonmises(loc=2, kappa=1).expect(lambda x: np.exp(1j*x), ... complex_func=True) >>> res (-0.18576377217422957+0.40590124735052263j)
>>> np.angle(res) # location of the (circular) distribution 2.0