scipy.stats.contingency.

chi2_contingency#

scipy.stats.contingency.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 Unabhängigkeitstest der beobachteten Häufigkeiten in der Kontingenztabelle [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 wird (ausgedrückt mit Numpy-Funktionen und Attributen) berechnet.

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

Die Kontingenztabelle. Die Tabelle enthält die beobachteten Häufigkeiten (d.h. 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 sind 1, wird die Yates'sche 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 Pearson'sche Chi-Quadrat-Statistik [2]. lambda_ ermöglicht die Verwendung einer Statistik aus der Cressie-Read-Potenzdivergenz-Familie [3]. Siehe scipy.stats.power_divergence für Details.

methodResamplingMethod, optional

Definiert die zur Berechnung des p-Werts verwendete Methode. Kompatibel nur mit correction=False, Standard- lambda_ und zweidimensionalen Tabellen. Wenn method eine Instanz von PermutationMethod/MonteCarloMethod ist, wird der p-Wert mithilfe von scipy.stats.permutation_test/scipy.stats.monte_carlo_test mit den bereitgestellten Konfigurationsoptionen und anderen geeigneten Einstellungen berechnet. Andernfalls wird der p-Wert wie in den Anmerkungen dokumentiert berechnet. Beachten Sie, dass, wenn method eine Instanz von MonteCarloMethod ist, das Attribut rvs nicht spezifiziert werden darf; Monte-Carlo-Stichproben werden immer mithilfe der rvs-Methode 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 oft 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 für die Unabhängigkeit verschiedener Kategorien einer Population. Der Test ist nur sinnvoll, wenn die Dimension von observed zwei oder mehr beträgt. Das Anwenden des Tests auf eine eindimensionale Tabelle führt immer dazu, dass expected gleich observed ist und eine Chi-Quadrat-Statistik von 0 ergibt.

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

Ähnlich wie scipy.stats.chisquare berechnet diese Funktion eine Chi-Quadrat-Statistik; der Vorteil, den diese Funktion bietet, ist die Ermittlung der erwarteten Häufigkeiten und Freiheitsgrade aus der gegebenen Kontingenztabelle. Wenn diese bereits bekannt wären und die Yates'sche Korrektur nicht erforderlich wäre, 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]

„Pearson’s Chi-Quadrat-Test“, 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 mithilfe des Log-Likelihood-Verhältnisses (d.h. des "G-Tests") anstelle der Pearson'schen Chi-Quadrat-Statistik 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 gering ist, kann der vom Standard-Asymptotik-Approximation produzierte p-Wert ungenau sein. Erwägen Sie die Übergabe einer PermutationMethod oder MonteCarloMethod als Parameter method mit correction=False.

>>> 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-Unabhängigkeitstest von Variablen in einer Kontingenztabelle.