scipy.stats.rv_histogram.

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 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 der Unterstützung der Verteilung entsprechen, z.B. [-inf, inf] im Standardfall, dann ist das Integral der uneingeschränkte Erwartungswert von f(x). Ebenso kann die Funktion f(x) so definiert sein, dass f(x) 0 auß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.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 überprüft. scipy.integrate.quad ist 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=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