scipy.stats.

chi2_contingency#

scipy.stats.chi2_contingency(observed, correction=True, lambda_=None, *, method=None)[Quelle]#

Chi-Quadrat-Test auf Unabhängigkeit von Variablen in einer Kontingenztafel.

Diese Funktion berechnet die Chi-Quadrat-Statistik und den p-Wert für den Hypothesentest auf Unabhängigkeit der beobachteten Häufigkeiten in der Kontingenztafel [1] observed. Die erwarteten Häufigkeiten werden basierend auf den Randsummen unter der Annahme der Unabhängigkeit berechnet; siehe scipy.stats.contingency.expected_freq. Die Anzahl der Freiheitsgrade ist (ausgedrückt mit NumPy-Funktionen und -Attributen)

dof = observed.size - sum(observed.shape) + observed.ndim - 1
Parameter:
observedarray_like

Die Kontingenztafel. Die Tabelle enthält die beobachteten Häufigkeiten (d. h. die Anzahl der Vorkommen) in jeder Kategorie. Im zweidimensionalen Fall wird die Tabelle oft als „R x C-Tabelle“ bezeichnet.

correctionbool, optional

Wenn True, *und* die Freiheitsgrade 1 sind, wird die Yates-Korrektur für Stetigkeit angewendet. Die Korrektur bewirkt, dass jeder beobachtete Wert um 0,5 in Richtung des entsprechenden erwarteten Wertes angepasst wird.

lambda_float oder str, optional

Standardmäßig ist die in diesem Test berechnete Statistik die Chi-Quadrat-Statistik nach Pearson [2]. lambda_ ermöglicht die Verwendung einer Statistik aus der Cressie-Read-Familie von Potenzdivergenzen [3] anstelle dessen. Einzelheiten finden Sie unter scipy.stats.power_divergence.

methodResamplingMethod, optional

Definiert die Methode zur Berechnung des p-Werts. Nur kompatibel mit correction=False, dem Standard- lambda_ und zweidimensionalen Tabellen. Wenn method eine Instanz von PermutationMethod/MonteCarloMethod ist, wird der p-Wert mit scipy.stats.permutation_test/scipy.stats.monte_carlo_test unter Verwendung der bereitgestellten Konfigurationsoptionen und anderer geeigneter Einstellungen berechnet. Andernfalls wird der p-Wert wie in den Hinweisen dokumentiert berechnet. Beachten Sie, dass, wenn method eine Instanz von MonteCarloMethod ist, das Attribut rvs unverändert bleiben muss; Monte-Carlo-Stichproben werden immer mit der Methode rvs von scipy.stats.random_table gezogen.

Hinzugefügt in Version 1.15.0.

Rückgabe:
resChi2ContingencyResult

Ein Objekt, das Attribute enthält

statisticfloat

Die Teststatistik.

pvaluefloat

Der p-Wert des Tests.

dofint

Die Freiheitsgrade. NaN, wenn method nicht None ist.

expected_freqndarray, gleiche Form wie observed

Die erwarteten Häufigkeiten, basierend auf den Randsummen der Tabelle.

Hinweise

Eine häufig zitierte Richtlinie für die Gültigkeit dieser Berechnung ist, dass der Test nur verwendet werden sollte, wenn die beobachteten und erwarteten Häufigkeiten in jeder Zelle mindestens 5 betragen.

Dies ist ein Test auf die Unabhängigkeit verschiedener Kategorien einer Population. Der Test ist nur sinnvoll, wenn die Dimension von observed zwei oder mehr beträgt. Die Anwendung des Tests auf eine eindimensionale Tabelle führt immer zu expected gleich observed und einer Chi-Quadrat-Statistik gleich 0.

Diese Funktion verarbeitet keine maskierten Arrays, da die Berechnung mit fehlenden Werten nicht sinnvoll ist.

Ähnlich wie scipy.stats.chisquare berechnet diese Funktion eine Chi-Quadrat-Statistik; die Bequemlichkeit, die diese Funktion bietet, besteht darin, die erwarteten Häufigkeiten und Freiheitsgrade aus der gegebenen Kontingenztafel zu ermitteln. Wenn diese bereits bekannt waren und die Yates-Korrektur nicht erforderlich war, könnte man scipy.stats.chisquare verwenden. Das heißt, wenn man aufruft

res = chi2_contingency(obs, correction=False)

dann gilt Folgendes

(res.statistic, res.pvalue) == stats.chisquare(obs.ravel(),
                                               f_exp=ex.ravel(),
                                               ddof=obs.size - 1 - dof)

Das Argument lambda_ wurde in Version 0.13.0 von SciPy hinzugefügt.

Referenzen

[2]

„Chi-Quadrat-Test nach Pearson“, https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test

[3]

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

Ein zweidimensionales Beispiel (2 x 3)

>>> import numpy as np
>>> from scipy.stats import chi2_contingency
>>> obs = np.array([[10, 10, 20], [20, 20, 20]])
>>> res = chi2_contingency(obs)
>>> res.statistic
2.7777777777777777
>>> res.pvalue
0.24935220877729619
>>> res.dof
2
>>> res.expected_freq
array([[ 12.,  12.,  16.],
       [ 18.,  18.,  24.]])

Führen Sie den Test mit dem Log-Likelihood-Verhältnis (d. h. dem „G-Test“) anstelle der Chi-Quadrat-Statistik nach Pearson durch.

>>> res = chi2_contingency(obs, lambda_="log-likelihood")
>>> res.statistic
2.7688587616781319
>>> res.pvalue
0.25046668010954165

Ein vierdimensionales Beispiel (2 x 2 x 2 x 2)

>>> obs = np.array(
...     [[[[12, 17],
...        [11, 16]],
...       [[11, 12],
...        [15, 16]]],
...      [[[23, 15],
...        [30, 22]],
...       [[14, 17],
...        [15, 16]]]])
>>> res = chi2_contingency(obs)
>>> res.statistic
8.7584514426741897
>>> res.pvalue
0.64417725029295503

Wenn die Summe der Elemente in einer zweidimensionalen Tabelle klein ist, kann der durch die standardmäßige asymptotische Approximation erzeugte p-Wert ungenau sein. Erwägen Sie, eine PermutationMethod oder MonteCarloMethod als Parameter method mit correction=False zu übergeben.

>>> from scipy.stats import PermutationMethod
>>> obs = np.asarray([[12, 3],
...                   [17, 16]])
>>> res = chi2_contingency(obs, correction=False)
>>> ref = chi2_contingency(obs, correction=False, method=PermutationMethod())
>>> res.pvalue, ref.pvalue
(0.0614122539870913, 0.1074)  # may vary

Für ein detaillierteres Beispiel siehe Chi-Quadrat-Test auf Unabhängigkeit von Variablen in einer Kontingenztafel.