power_divergence#
- scipy.stats.power_divergence(f_obs, f_exp=None, ddof=0, axis=0, lambda_=None, *, nan_policy='propagate', keepdims=False)[Quellcode]#
Cressie-Read Power-Divergenz-Statistik und Goodness-of-Fit-Test.
Diese Funktion testet die Nullhypothese, dass die kategorialen Daten die gegebenen Häufigkeiten aufweisen, unter Verwendung der Cressie-Read Power-Divergenz-Statistik.
- Parameter:
- f_obsarray_like
Beobachtete Häufigkeiten in jeder Kategorie.
- f_exparray_like, optional
Erwartete Häufigkeiten in jeder Kategorie. Standardmäßig wird angenommen, dass die Kategorien gleich wahrscheinlich sind.
- ddofint, optional
„Delta Freiheitsgrade“: Anpassung der Freiheitsgrade für den p-Wert. Der p-Wert wird unter Verwendung einer Chi-Quadrat-Verteilung mit
k - 1 - ddofFreiheitsgraden berechnet, wobei k die Anzahl der beobachteten Häufigkeiten ist. Der Standardwert von ddof ist 0.- axisint oder None, Standard: 0
Wenn es sich um eine ganze Zahl handelt, ist dies die Achse des Eingabearrays, entlang der die Statistik berechnet wird. Die Statistik jedes Achsen-Slices (z. B. Zeile) der Eingabe erscheint dann in einem entsprechenden Element der Ausgabe. Wenn
None, wird die Eingabe vor der Berechnung der Statistik geglättet.- lambda_float oder str, optional
Die Potenz in der Cressie-Read Power-Divergenz-Statistik. Der Standardwert ist 1. Zur Bequemlichkeit kann lambda_ einer der folgenden Zeichenketten zugewiesen werden, in diesem Fall wird der entsprechende numerische Wert verwendet
"pearson"(Wert 1)Pearsons Chi-Quadrat-Statistik. In diesem Fall ist die Funktion äquivalent zu
chisquare.
"log-likelihood"(Wert 0)Log-Likelihood-Verhältnis. Auch bekannt als G-Test [3].
"freeman-tukey"(Wert -1/2)Freeman-Tukey-Statistik.
"mod-log-likelihood"(Wert -1)Modifiziertes Log-Likelihood-Verhältnis.
"neyman"(Wert -2)Neymans Statistik.
"cressie-read"(Wert 2/3)Die in [5] empfohlene Potenz.
- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Definiert, wie Eingabe-NaNs behandelt werden.
propagate: Wenn ein NaN in der Achsen-Slice (z. B. Zeile) vorhanden ist, entlang der die Statistik berechnet wird, wird der entsprechende Eintrag der Ausgabe NaN sein.omit: NaNs werden bei der Berechnung weggelassen. Wenn im Achsen-Slice, entlang dem die Statistik berechnet wird, nicht genügend Daten verbleiben, wird der entsprechende Eintrag der Ausgabe NaN sein.raise: Wenn ein NaN vorhanden ist, wird einValueErrorausgelöst.
- keepdimsbool, Standard: False
Wenn dies auf True gesetzt ist, bleiben die reduzierten Achsen im Ergebnis als Dimensionen mit der Größe eins erhalten. Mit dieser Option wird das Ergebnis korrekt gegen das Eingabearray gestreut (broadcasted).
- Rückgabe:
- res: Power_divergenceResult
Ein Objekt, das Attribute enthält
- statisticfloat oder ndarray
Die Cressie-Read Power-Divergenz Teststatistik. Der Wert ist ein Float, wenn axis None ist oder wenn f_obs und f_exp 1-D sind.
- pvaluefloat oder ndarray
Der p-Wert des Tests. Der Wert ist ein Float, wenn ddof und der Rückgabewert von
statSkalare sind.
Siehe auch
Hinweise
Dieser Test ist ungültig, wenn die beobachteten oder erwarteten Häufigkeiten in jeder Kategorie zu klein sind. Eine typische Regel ist, dass alle beobachteten und erwarteten Häufigkeiten mindestens 5 betragen sollten.
Außerdem müssen die Summen der beobachteten und erwarteten Häufigkeiten gleich sein, damit der Test gültig ist.
power_divergencelöst einen Fehler aus, wenn die Summen nicht innerhalb einer relativen Toleranz voneps**0.5übereinstimmen, wobeiepsdie Genauigkeit des Eingabedatentyps ist.Wenn lambda_ kleiner als Null ist, beinhaltet die Formel für die Statistik eine Division durch f_obs, so dass eine Warnung oder ein Fehler generiert werden kann, wenn ein Wert in f_obs 0 ist.
Ähnlich kann eine Warnung oder ein Fehler generiert werden, wenn ein Wert in f_exp Null ist, wenn lambda_ >= 0 ist.
Die Standard-Freiheitsgrade, k-1, gelten für den Fall, dass keine Parameter der Verteilung geschätzt werden. Wenn p Parameter durch effiziente Maximum-Likelihood-Schätzung geschätzt werden, dann sind die korrekten Freiheitsgrade k-1-p. Wenn die Parameter auf andere Weise geschätzt werden, dann können die Freiheitsgrade zwischen k-1-p und k-1 liegen. Es ist jedoch auch möglich, dass die asymptotische Verteilung keine Chi-Quadrat-Verteilung ist, in welchem Fall dieser Test nicht geeignet ist.
Seit SciPy 1.9 werden
np.matrix-Eingaben (für neuen Code nicht empfohlen) vor der Berechnung innp.ndarraykonvertiert. In diesem Fall ist die Ausgabe eine Skalar- odernp.ndarraymit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- odernp.ndarrayanstelle eines Masked Arrays mitmask=Falsesein.power_divergencebietet experimentelle Unterstützung für Python Array API Standard-kompatible Backends zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie eine UmgebungsvariableSCIPY_ARRAY_API=1setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen aus Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.Bibliothek
CPU
GPU
NumPy
✅
n/a
CuPy
n/a
✅
PyTorch
✅
✅
JAX
⚠️ kein JIT
⚠️ kein JIT
Dask
⚠️ berechnet Graph
n/a
Siehe Unterstützung für den Array API Standard für weitere Informationen.
Referenzen
[1]Lowry, Richard. „Concepts and Applications of Inferential Statistics“. Kapitel 8. https://web.archive.org/web/20171015035606/http://faculty.vassar.edu/lowry/ch8pt1.html
[2]„Chi-squared test“, https://en.wikipedia.org/wiki/Chi-squared_test
[3]„G-test“, https://en.wikipedia.org/wiki/G-test
[4]Sokal, R. R. und Rohlf, F. J. „Biometry: the principles and practice of statistics in biological research“, New York: Freeman (1981)
[5]Cressie, N. und Read, T. R. C., „Multinomial Goodness-of-Fit Tests“, J. Royal Stat. Soc. Series B, Vol. 46, No. 3 (1984), pp. 440-464.
Beispiele
(Siehe
chisquarefür weitere Beispiele.)Wenn nur f_obs angegeben ist, wird angenommen, dass die erwarteten Häufigkeiten gleichmäßig sind und durch den Mittelwert der beobachteten Häufigkeiten gegeben sind. Hier führen wir einen G-Test durch (d.h. wir verwenden die Log-Likelihood-Verhältnis-Statistik)
>>> import numpy as np >>> from scipy.stats import power_divergence >>> power_divergence([16, 18, 16, 14, 12, 12], lambda_='log-likelihood') (2.006573162632538, 0.84823476779463769)
Die erwarteten Häufigkeiten können mit dem Argument f_exp angegeben werden
>>> power_divergence([16, 18, 16, 14, 12, 12], ... f_exp=[16, 16, 16, 16, 16, 8], ... lambda_='log-likelihood') (3.3281031458963746, 0.6495419288047497)
Wenn f_obs 2-dimensional ist, wird der Test standardmäßig für jede Spalte angewendet.
>>> obs = np.array([[16, 18, 16, 14, 12, 12], [32, 24, 16, 28, 20, 24]]).T >>> obs.shape (6, 2) >>> power_divergence(obs, lambda_="log-likelihood") (array([ 2.00657316, 6.77634498]), array([ 0.84823477, 0.23781225]))
Durch Setzen von
axis=Nonewird der Test auf alle Daten im Array angewendet, was der Anwendung des Tests auf das abgeflachte Array entspricht.>>> power_divergence(obs, axis=None) (23.31034482758621, 0.015975692534127565) >>> power_divergence(obs.ravel()) (23.31034482758621, 0.015975692534127565)
ddof ist die Änderung, die an den Standard-Freiheitsgraden vorgenommen wird.
>>> power_divergence([16, 18, 16, 14, 12, 12], ddof=1) (2.0, 0.73575888234288467)
Die Berechnung der p-Werte erfolgt durch Broadcasting der Teststatistik mit ddof.
>>> power_divergence([16, 18, 16, 14, 12, 12], ddof=[0,1,2]) (2.0, array([ 0.84914504, 0.73575888, 0.5724067 ]))
f_obs und f_exp werden ebenfalls gebroadcastet. Im Folgenden hat f_obs die Form (6,) und f_exp die Form (2, 6), sodass das Ergebnis des Broadcastings von f_obs und f_exp die Form (2, 6) hat. Um die gewünschten Chi-Quadrat-Statistiken zu berechnen, müssen wir
axis=1verwenden>>> power_divergence([16, 18, 16, 14, 12, 12], ... f_exp=[[16, 16, 16, 16, 16, 8], ... [8, 20, 20, 16, 12, 12]], ... axis=1) (array([ 3.5 , 9.25]), array([ 0.62338763, 0.09949846]))