\(\chi^2\)-Test

Der \(\chi^2\) Test ist eine Möglichkeit, um Zusammenhänge zwischen zwei kategorialen Variablen zu untersuchen. Bei binären Daten sind Proportionen, Odds Ratios oder Risk Ratios zu bevorzugen, da sie als Effektgrössen besser interpretiert werden können. Analysiert man hingegen zwei kategoriale Variablen mit mehr als zwei Ausprägungsgeraden, dann ist eine Berechnung von Odds Ratios oder Risk Ratios nicht mehr direkt möglich. In dieser Situation ist ein \(\chi^2\)-Test hilfreich.

Wir erstellen die Daten direkt in R. Kopiere den Code unten und lass ihn laufen, um die Daten zu generieren.

einkaufen <- c(rep("Coop", 32), rep("Denner", 19), rep("Migros", 19))
ernaehrung <- c(rep("Allesfresser", 17), rep("Veganer", 6), rep("Vegetarier", 9),
                rep("Allesfresser", 8), rep("Veganer", 7), rep("Vegetarier", 4),
                rep("Allesfresser", 4), rep("Veganer", 7), rep("Vegetarier", 8))

df.einkaufen <- data.frame(einkaufen, ernaehrung)

Aufgaben

  1. Erstelle die \(k \times m\) Tabelle (ernaehrung repräsentiert die Zeilen). Lass dir die beobachteten Häufigkeiten anzeigen.

  2. Lass dir die unter der Nullhypothese zu erwarteten Häufigkeiten anzeigen (du brauchst dafür die chisq.test() Funktion).

  3. Sind die Voraussetzungen für einen \(\chi^2\)-Test erfüllt? (Welche sind das?)

  4. Untersuche mit dem \(\chi^2\) Test, ob sich die erwarteten Häufigkeiten von den beobachteten Häufigkeiten unterscheiden. Wie lautet \(H_0\)?

  5. Interpretiere das Resultat des Tests.

  6. Bei welchen beobachteten Häufigkeiten gab es die grösste Abweichung von den der erwarteten Häufigkeit? Lass dir die standardisierten Residuen (stdres) anzeigen, um diese Frage zu beantworten.

  7. Schaue Dir die standardisierten Residuen an ($stdres). Was fällt auf?


Lösungen

Als erstes wir die Häufigkeitstabelle erstellt:

my_km_table <- table(df.einkaufen$ernaehrung, df.einkaufen$einkaufen)
my_km_table
##               
##                Coop Denner Migros
##   Allesfresser   17      8      4
##   Veganer         6      7      7
##   Vegetarier      9      4      8

Die unter \(H_0\) erwarteten Häufigkeiten erhalten wir mit dem Zusatz $expected

chisq.test(my_km_table)$expected
##               
##                   Coop Denner Migros
##   Allesfresser 13.2571 7.8714 7.8714
##   Veganer       9.1429 5.4286 5.4286
##   Vegetarier    9.6000 5.7000 5.7000

Alle Zellen haben eine erwartete Häufigkeit von \(\ge5\). Somit sind die Voraussetzungen für einen \(\chi^2\) Test erfüllt.

\(H_0\): Die Variable einkaufen und die Variable ernaehrung sind unabhängig von einander. Diese Hypothese können wir mit den \(\chi^2\)Test testen:

chisq.test(my_km_table)
## 
##  Pearson's Chi-squared test
## 
## data:  my_km_table
## X-squared = 6.43, df = 4, p-value = 0.17

Der P-Wert ist 16.95%. Die Wahrscheinlichkeit für die Differenz (oder eine extremere) zwischen den unter \(H_0\) zu erwarteten und den beobachteten Häufigkeiten, beträgt 16.95%. Somit gibt es keine Evidenz gegen \(H_{0}\).


chisq.test(my_km_table)$stdres
##               
##                     Coop    Denner    Migros
##   Allesfresser  1.823025  0.070152 -2.112348
##   Veganer      -1.669187  0.934932  0.934932
##   Vegetarier   -0.314140 -0.997072  1.348979

Das extremste Residuum findet sich in der Zelle “Allesfresser”/“Migros”. Dieses ist negativ was bedeutet, dass die beobachtete Häufigkeit für diese Kombination tiefer ist, als unter \(H_0\) erwartet. Ein einzelner standardisierter Residualwert von −2.11 zeigt, dass in dieser einen Zelle (Allesfresser × Migros) weniger Beobachtungen aufgetreten sind, als unter Unabhängigkeit erwartet. Aber: Der Gesamttest berücksichtigt alle Zellen gemeinsam. Ein einzelner auffälliger Residualwert reicht nicht aus, um die Nullhypothese zu verwerfen. Andere Zellen gleichen die Abweichung aus, sodass der Gesamteffekt nicht signifikant ist.


Sind die Voraussetzungen für einen \(\chi^2\)-Test nicht erfüllt, kann alternativ der exakte Test nach Fisher durchgeführt werden:

fisher.test(my_km_table)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  my_km_table
## p-value = 0.16
## alternative hypothesis: two.sided

Der P-Wert ist praktisch gleich wie jener des \(\chi^2\)-Tests.