\(\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 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 Residuen anzeigen, um diese Frage zu beantworten.

  7. Welchen Test könnte man durchführen, wenn die Voraussetzungen für einen \(\chi^2\)-Test nicht erfüllt sind? Führe den Test durch und vergleiche das Resultat mit jenem aus Aufgabe 5.


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.257143 7.871429 7.871429
##   Veganer       9.142857 5.428571 5.428571
##   Vegetarier    9.600000 5.700000 5.700000

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.4256, df = 4, p-value = 0.1695

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


chisq.test(my_km_table)$residuals
##               
##                       Coop      Denner      Migros
##   Allesfresser  1.02796489  0.04582661 -1.37989001
##   Veganer      -1.03940230  0.67445327  0.67445327
##   Vegetarier   -0.19364917 -0.71205164  0.96336399

Das grösste 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 erwartet. Diese Differenz ist jedoch zu wenig extrem, weshalb der Test statistisch 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.1588
## alternative hypothesis: two.sided

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