Keywords: Levene Test, statistischer Test, Statistik Beratung, Data Science

Einführung

Im folgenden geht es um den Levene-Test. Der Levene-Test ist ein sogenannter verteilungsfreier Test zum Vergleich von zwei oder mehreren Varianzen beliebig verteilter Grundgesamtheiten auf Gleichheit. Die Nullhypotheses beim Levene-Test geht davon aus dass alle betrachteten Varianzen gleich sind: \[H_0\colon \sigma^2_1=\sigma^2_2=\ldots=\sigma^2_k\] Die Alternativhypothese lautet, dass mindestens zwei betrachtete Varianzen ungleich sind: \(H_1\colon \sigma^2_i\neq\sigma^2_j\) für mindestens ein Gruppenpaar \(i,j\) mit \(i \neq j\)

Definition der Teststatistik

Die Teststatistik \(W\), ist wie folgt definiert:

\[W = \frac{(N-k)}{(k-1)} \frac{\sum_{i=1}^k N_i (Z_{i\cdot}-Z_{\cdot\cdot})^2} {\sum_{i=1}^k \sum_{j=1}^{N_i} (Z_{ij}-Z_{i\cdot})^2},\]

wobei

Beispiele

Gleiche Varianz in allen Gruppen

Wir erzeugen uns in R zwei Gruppen die unterschiedlich verteilt sind aber alle die gleiche Varianz von \(25\) haben:

gr1 <- rnorm(20, mean=30, sd=5)
gr2 <- rpois(200, lambda=5^2)

Nun berechnen wir die Teststatistik anhand der Hilfsvaraiablen wie oben angegeben:

k <- 2
N <- length(gr1)+length(gr2)
N1 <- length(gr1)
N2 <- length(gr2)
dY1 <- sum(gr1)/N1
dY2 <- sum(gr2)/N2
Z1 <- abs(gr1-dY1)
Z2 <- abs(gr2-dY2)
Z  <- (sum(Z1)+sum(Z2))/N
dZ1 <- sum(Z1)/N1
dZ2 <- sum(Z2)/N2
W <- (N-k)/(k-1)*(N1*(dZ1-Z)^2+N2*(dZ2-Z)^2)/(sum((Z1-dZ1)^2)+sum((Z2-dZ2)^2))
print(W)
## [1] 0.211133

Der p-Wert zu dieser Teststatistik \(W\) ist dann gegeben durch:

1-pf(q=W,df1=k-1,df2=N-k)
## [1] 0.6463387

Wir berechnen die Teststatistik mit der eingebauten Funktion leveneTest in R, um zu vergleichen

library(car)
g1 <- data.frame(gr1,c(1))
names(g1) <- c("Y","Gruppe")
g2 <- data.frame(gr2,c(2))
names(g2) <- c("Y","Gruppe")
g <- rbind(g1,g2)
leveneTest(Y~factor(Gruppe), data=g,center="mean")
## Levene's Test for Homogeneity of Variance (center = "mean")
##        Df F value Pr(>F)
## group   1  0.2111 0.6463
##       218

Wie man sieht stimmen sowohl die Teststatistik als auch der p-Wert überein. Die Interpretation des Tests lautet wie folgt: Wir können auf dem Signifikanzniveau \(\alpha\)=0.05 die Nullhypothese, dass die Varianzen gleich sind, nicht verwerfen, da der p-Wert des Tests \(>0.05\) ist.

ungleiche Varianz

Wir erzeugen uns in R zwei Gruppen die unterschiedlich verteilt sind und ungleiche Varianz haben:

gr1 <- rnorm(20, mean=30, sd=5)
gr2 <- rpois(200, lambda=20^2)

Nun berechnen wir die Teststatistik anhand der Hilfsvaraiablen wie oben angegeben:

k <- 2
N <- length(gr1)+length(gr2)
N1 <- length(gr1)
N2 <- length(gr2)
dY1 <- sum(gr1)/N1
dY2 <- sum(gr2)/N2
Z1 <- abs(gr1-dY1)
Z2 <- abs(gr2-dY2)
Z  <- (sum(Z1)+sum(Z2))/N
dZ1 <- sum(Z1)/N1
dZ2 <- sum(Z2)/N2
W <- (N-k)/(k-1)*(N1*(dZ1-Z)^2+N2*(dZ2-Z)^2)/(sum((Z1-dZ1)^2)+sum((Z2-dZ2)^2))
print(W)
## [1] 20.77427

Der p-Wert zu dieser Teststatistik \(W\) ist dann gegeben durch:

1-pf(q=W,df1=k-1,df2=N-k)
## [1] 8.607176e-06

Wir berechnen die Teststatistik mit der eingebauten Funktion leveneTest in R, um zu vergleichen

library(car)
g1 <- data.frame(gr1,c(1))
names(g1) <- c("Y","Gruppe")
g2 <- data.frame(gr2,c(2))
names(g2) <- c("Y","Gruppe")
g <- rbind(g1,g2)
leveneTest(Y~factor(Gruppe), data=g,center="mean")
## Levene's Test for Homogeneity of Variance (center = "mean")
##        Df F value    Pr(>F)    
## group   1  20.774 8.607e-06 ***
##       218                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Wie man sieht stimmen sowohl die Teststatistik als auch der p-Wert überein. Die Interpretation des Tests lautet wie folgt: Wir können auf dem Signifikanzniveau \(\alpha\)=0.05 die Nullhypothese, dass die Varianzen gleich sind, verwerfen, da der p-Wert des Tests \(<0.05\) ist.