scipy.stats.rv_continuous.

expect#

rv_continuous.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 Verteilung dist ist definiert als

        ub
E[f(x)] = Integral(f(x) * dist.pdf(x)),
        lb

wobei ub und lb Argumente sind und x die dist.pdf(x) Verteilung hat. Wenn die Grenzen lb und ub dem Träger der Verteilung entsprechen, z. B. [-inf, inf] im Standardfall, dann ist das Integral der uneingeschränkte Erwartungswert von f(x). Außerdem kann die Funktion f(x) so definiert sein, dass f(x) außerhalb eines endlichen Intervalls 0 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 entgegen. 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, ubscalar, optional

Untere und obere Grenze für die Integration. Standardmäßig wird der Träger der Verteilung verwendet.

conditionalbool, optional

Wenn True, wird das Integral um die bedingte Wahrscheinlichkeit des Integrationsintervalls korrigiert. Der Rückgabewert ist der Erwartungswert der Funktion, bedingt darauf, dass sie sich im gegebenen Intervall befindet. Standardwert ist 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.quad geerbt. Weder diese Funktion noch scipy.integrate.quad können überprüfen, ob das Integral existiert oder endlich ist. Zum Beispiel gibt cauchy(0).mean() np.nan zurück und cauchy(0).expect() gibt 0.0 zurück.

Ebenso wird die Genauigkeit der Ergebnisse nicht von der Funktion verifiziert. scipy.integrate.quad ist in der Regel 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 dient der Bequemlichkeit; für kritische Anwendungen sollten die 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 an

>>> 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 geringfügige Abweichung von 1 ist auf numerische Integration zurückzuführen.

Der Integrand kann als komplexwertige Funktion behandelt werden, indem complex_func=True an scipy.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