scipy.stats.mstats.

chisquare#

scipy.stats.mstats.chisquare(f_obs, f_exp=None, ddof=0, axis=0, *, sum_check=True, nan_policy='propagate', keepdims=False)[Quelle]#

Führt den Chi-Quadrat-Test nach Pearson durch.

Der Chi-Quadrat-Test nach Pearson [1] ist ein Goodness-of-fit-Test für eine multinomiale Verteilung mit gegebenen Wahrscheinlichkeiten; das heißt, er bewertet die Nullhypothese, dass die beobachteten Häufigkeiten (Zählungen) durch unabhängige Stichproben von N Beobachtungen aus einer kategorialen Verteilung mit gegebenen erwarteten Häufigkeiten erzielt werden.

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 Kategorien 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.

sum_checkbool, optional

Ob eine Prüfung durchgeführt werden soll, dass sum(f_obs) - sum(f_exp) == 0. Wenn True (Standard), wird ein Fehler ausgelöst, wenn die relative Differenz die Quadratwurzel der Präzision des Datentyps überschreitet. Siehe Hinweise für Begründungen und mögliche Ausnahmen.

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 Chi-Quadrat-Teststatistik. Der Wert ist eine Gleitkommazahl, wenn axis None ist oder f_obs und f_exp 1-D sind.

pvaluefloat oder ndarray

Der p-Wert des Tests. Der Wert ist eine Gleitkommazahl, wenn ddof und das Ergebnisattribut statistic Skalare sind.

Siehe auch

scipy.stats.power_divergence
scipy.stats.fisher_exact

Fisher-Exakttest für eine 2x2-Kontingenztafel.

scipy.stats.barnard_exact

Ein unbedingter exakter Test. Eine Alternative zum Chi-Quadrat-Test für kleine Stichprobengrößen.

Chi-Quadrat-Test

Erweitertes Beispiel

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. Gemäß [2] wird empfohlen, dass die Gesamtzahl der Beobachtungen größer als 13 ist, andernfalls sollten exakte Tests (wie der Barnard's Exact Test) verwendet werden, da sie nicht übermäßig ablehnen.

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, betragen die korrekten Freiheitsgrade k-1-p. Wenn die Parameter auf eine andere Weise geschätzt werden, 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.

Beim Chi-Quadrat-Test nach Pearson müssen die gesamten beobachteten und erwarteten Zählungen übereinstimmen, damit der p-Wert die Wahrscheinlichkeit, einen solch extremen Wert der Statistik unter der Nullhypothese zu beobachten, genau widerspiegelt. Diese Funktion kann verwendet werden, um andere statistische Tests durchzuführen, die nicht erfordern, dass die Gesamtzählungen gleich sind. Um beispielsweise die Nullhypothese zu testen, dass f_obs[i] Poisson-verteilt mit Erwartungswert f_exp[i] ist, setzen Sie ddof=-1 und sum_check=False. Dieser Test folgt aus der Tatsache, dass eine Poisson-Zufallsvariable mit Mittelwert und Varianz f_exp[i] annähernd normal mit demselben Mittelwert und derselben Varianz ist; die Chi-Quadrat-Statistik standardisiert, quadriert und summiert die Beobachtungen; und die Summe von n quadrierten standardnormalen Variablen folgt der Chi-Quadrat-Verteilung mit n Freiheitsgraden.

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.

chisquare hat 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 die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy, PyTorch, JAX oder Dask Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen von Backend und Gerät (oder anderen Fähigkeiten) 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]

„Pearson’s Chi-squared test“. Wikipedia. https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test

[2]

Pearson, Karl. „On the criterion that a given system of deviations from the probable in the case of a correlated system of variables is such that it can be reasonably supposed to have arisen from random sampling“, Philosophical Magazine. Series 5. 50 (1900), pp. 157-175.

Beispiele

Wenn nur das obligatorische Argument f_obs angegeben wird, wird angenommen, dass die erwarteten Häufigkeiten gleichmäßig sind und durch den Mittelwert der beobachteten Häufigkeiten gegeben sind.

>>> import numpy as np
>>> from scipy.stats import chisquare
>>> chisquare([16, 18, 16, 14, 12, 12])
Power_divergenceResult(statistic=2.0, pvalue=0.84914503608460956)

Das optionale Argument f_exp gibt die erwarteten Häufigkeiten an.

>>> chisquare([16, 18, 16, 14, 12, 12], f_exp=[16, 16, 16, 16, 16, 8])
Power_divergenceResult(statistic=3.5, pvalue=0.62338762774958223)

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)
>>> chisquare(obs)
Power_divergenceResult(statistic=array([2.        , 6.66666667]), pvalue=array([0.84914504, 0.24663415]))

Durch Setzen von axis=None wird der Test auf alle Daten im Array angewendet, was der Anwendung des Tests auf das abgeflachte Array entspricht.

>>> chisquare(obs, axis=None)
Power_divergenceResult(statistic=23.31034482758621, pvalue=0.015975692534127565)
>>> chisquare(obs.ravel())
Power_divergenceResult(statistic=23.310344827586206, pvalue=0.01597569253412758)

ddof ist die Änderung, die an den Standard-Freiheitsgraden vorgenommen wird.

>>> chisquare([16, 18, 16, 14, 12, 12], ddof=1)
Power_divergenceResult(statistic=2.0, pvalue=0.7357588823428847)

Die Berechnung der p-Werte erfolgt durch Broadcasting der Chi-Quadrat-Statistik mit ddof.

>>> chisquare([16, 18, 16, 14, 12, 12], ddof=[0, 1, 2])
Power_divergenceResult(statistic=2.0, pvalue=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 hat 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, verwenden wir axis=1

>>> chisquare([16, 18, 16, 14, 12, 12],
...           f_exp=[[16, 16, 16, 16, 16, 8], [8, 20, 20, 16, 12, 12]],
...           axis=1)
Power_divergenceResult(statistic=array([3.5 , 9.25]), pvalue=array([0.62338763, 0.09949846]))

Ein detaillierteres Beispiel finden Sie unter Chi-Quadrat-Test.