Willkommen bei Stats by Randolph. Hier geht es zur Hauptseite mit weiteren Informationen und Inhalten.
Autor:innen dieser Seite: An den Inhalten dieser Seite haben mitgearbeitet: Valentin Koob, Eva Röttger und Markus Janczyk. Der Inhalt dieser Seite wird in der Lehre in den Studiengängen Psychologie von der AG Forschungsmethoden und Kognitive Psychologie an der Universität Bremen verwendet, steht aber allen Interessierten zur Verfügung. Rückmeldungen/Fehler/Vorschläge können gesendet werden an randolph@uni-bremen.
Versionshistory:
In vielen Einführungsveranstaltungen der Statistik wird i.d.R zuerst der \(\chi^2\) Wert als Zusammenhangsmaß eingeführt. Das Problem ist allerdings, dass dieser nicht normiert ist, sondern er besitzt ein Maximum bei \(n \cdot [\min(I,J)-1]\) und ist somit abhängig von der Stichprobengröße sowie der Anzahl der Spalten \(J\) bzw. Zeilen \(I\). Dies macht natürlich einen Vergleich zwischen Studien mit unterschiedlichen Designs oder Stichprobengrößen schwierig. Als Argument wird deshalb oft aufgeführt, dass es normierte Koeffizienten braucht, wie beispielsweise den korrigierten Kontingenzkoeffizienten, den wir in Teil 5 über den Kontingenzkoeffizienten
\[ K = \sqrt{\frac{\chi^2}{n + \chi^2}} \]
hergeleitet haben. Auch wenn die Forderung nach einem normierten Koeffizienten an sich natürlich richtig ist, so hinkt die Argumentation allerdings, da man auch einfach \(\chi^2\) durch sein Maximum von \(n \cdot [min(I,J)-1]\) teilen könnte um eine normierte Statistik zwischen \(0\) und \(1\) zu erhalten.
Tatsächlich hat der Kontingenzkoeffizient andere, vornehmlich historische, Gründe. Pearson (1904) zeigte nämlich, dass der Kontingenzkoeffizient ein Spezialfall der Pearson Korrelation ist. Folgen zwei Merkmale einer bestimmten gemeinsamen Verteilung, der sog. multivariaten Normalverteilung (wird erst in Statistik 2; siehe allerdings hier für eine Visualisierung), dann nähert sich \(K\) mit zunehmender Anzahl von Klassen der Pearson-Korrelation \(r\) an. In anderen Worten: Unterteilt man zwei metrische Variablen in sehr viele einzelne Bereiche, sodass sich letztlich zwei nominalskalierte Variablen ergeben, so entspricht der auf Basis dieser Klassen berechnete Kontingenzkoeffizient \(K\) der Pearson-Korrelation \(r\) der beiden Ursprungsvariablen.
Dies wollen wir einmal praktisch mit R zeigen: Hierfür ziehen wir zunächst aus einer multivariaten Normalverteilung eine sehr große Stichprobe. Die Pearson-Korrelation zwischen den beiden Merkmalen \(X\) und \(Y\) ist hier genau \(0.5\).
library(MASS)
set.seed(2) # zur exakten Reproduzierbarkeit der Ergebnisse
n <- 100000 # Stichprobengröße
R <- matrix(c(1, 0.5, # Korrelationsstruktur der beiden Variablen
0.5, 1),
nrow = 2,
ncol = 2)
mu <- c(X = 0, Y = 0) # Mittelwerte der beiden Variablen (hier irrelevant)
dat <- mvrnorm(n = n, # ziehen der Stichproben
mu = mu,
Sigma = R,
empirical = TRUE)
dat <- as.data.frame(dat)
head(dat) # Ausgabe der ersten Zeilen der Stichprobe
cor(dat$X, dat$Y) # Korrelation
## [1] 0.5
Nun können wir mit Hilfe der Funktion cut()
die
Variablen klassieren, z.B. in 2 Teile:
x_classed <- cut(dat[,1],
breaks = 2) # Klassieren von X in 2 Teile
levels(x_classed)
## [1] "(-4.76,0.0506]" "(0.0506,4.86]"
y_classed <- cut(dat[,2],
breaks = 2) # Klassieren von Y in 2 Teile
levels(y_classed)
## [1] "(-4.35,-0.104]" "(-0.104,4.14]"
Auf Basis der klassierten Variablen können wir nun eine Kontingenztafel erstellen und den Kontingenzkoeffizienten ausrechnen:
library(vcd)
## Lade nötiges Paket: grid
tab <- table(x_classed, y_classed) # Kontingenztabelle erstellen
tab
## y_classed
## x_classed (-4.35,-0.104] (-0.104,4.14]
## (-4.76,0.0506] 32099 19887
## (0.0506,4.86] 13730 34284
assocstats(tab)$contingency # Kontingenzkoeffizient
## [1] 0.3154249
Dieses Vorgehen können wir nun für verschiedene Anzahlen von Klassen
nClass
(= Klassenbreiten) wiederholen und anschließend das
Ergebnis plotten:
nClass <- c(3:25) # Anzahl der Klassen
ks <- c() # Container zur Speicherung der Ergebnisse
for (oneNClass in nClass) {
x_classed <- cut(dat[,1],
breaks = oneNClass) # Klassieren von X
y_classed <- cut(dat[,2],
breaks = oneNClass) # Klassieren von Y
tab <- table(x_classed, y_classed) # Kontingenztabelle erstellen
k <- assocstats(tab)$contingency # Kontingenzkoeffizienten ausrechnen ...
ks <- c(ks, k) # ... und abspeichern
}
plot(ks ~ nClass,
type = "l",
ylab = "K",
xlab = "Anzahl der Klassen",
ylim = c(0,0.51))
abline(h = 0.5,
col = "green") # Korrelation von X und Y
Zu sehen ist, dass mit steigender Anzahl an Klassen der Kontingenzkoeffizient \(K\) (schwarze Linie) sich der tatsächlichen Korrelation der beiden Variablen (grüne Linie) annähert.
Pearson, K. (1904). On the theory of contingency and its relation to association and normal correlation. Dulau and Company.