scipy.stats.

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 - ddof Freiheitsgraden 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 ein ValueError ausgelö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 stat Skalare sind.

Siehe auch

chisquare

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_divergence löst einen Fehler aus, wenn die Summen nicht innerhalb einer relativen Toleranz von eps**0.5 übereinstimmen, wobei eps die 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 in np.ndarray konvertiert. In diesem Fall ist die Ausgabe eine Skalar- oder np.ndarray mit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- oder np.ndarray anstelle eines Masked Arrays mit mask=False sein.

power_divergence bietet 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 Umgebungsvariable SCIPY_ARRAY_API=1 setzen 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

[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 chisquare fü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=None wird 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=1 verwenden

>>> 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]))