Seit 2019 im DACH-RaumSeit 2019
50+ Statistik-Experten50+ Experten
Über 1.200 Projekte1.200+ Projekte
Alle StatistikprogrammeAlle Programme
Express möglichExpress
Statistik-Ratgeber

Wie führt man eine ANOVA in R durch?

R / RStudio · Maximilian Fuchs · 9. Juni 2026 · 10 Min. Lesezeit

Was ist eine ANOVA und wann setzt man sie ein?

Eine ANOVA (Analysis of Variance) prüft, ob sich die Mittelwerte von drei oder mehr Gruppen statistisch bedeutsam unterscheiden. Sie ist damit die logische Erweiterung des t-Tests, der nur zwei Gruppen vergleichen kann. Statt mehrere paarweise t-Tests durchzuführen – was die Fehlerrate künstlich aufbläht – fasst die ANOVA alle Gruppenvergleiche in einem einzigen Test zusammen.

Typische Anwendungsfälle in Abschlussarbeiten sind zum Beispiel:

  • Vergleich von Testergebnissen dreier Lerngruppen (Kontrollgruppe, Methode A, Methode B)
  • Unterschiede im Stressniveau zwischen verschiedenen Berufsgruppen
  • Wirksamkeitsvergleich mehrerer Therapieformen in der klinischen Forschung

Grundlage des Verfahrens ist die Zerlegung der Gesamtvarianz in erklärte Varianz (zwischen den Gruppen) und unerklärte Varianz (innerhalb der Gruppen). Das Verhältnis dieser beiden Komponenten ergibt die F-Statistik.

F-Statistik der ANOVA

Dabei steht k für die Anzahl der Gruppen und N für die Gesamtstichprobengröße. Ein großes F signalisiert, dass die Gruppenunterschiede die zufällige Streuung innerhalb der Gruppen deutlich übersteigen.

Voraussetzungen der ANOVA

Bevor Sie die Analyse durchführen, sollten Sie die Voraussetzungen des Verfahrens kennen. Die ANOVA ist robust gegenüber leichten Verletzungen, aber bei starken Abweichungen sind die Ergebnisse nicht zuverlässig.

Voraussetzungen der einfaktoriellen ANOVA
Voraussetzung Prüfung in R Alternative bei Verletzung
Normalverteilung der Residuen shapiro.test(), QQ-Plot Kruskal-Wallis-Test
Varianzhomogenität (Homoskedastizität) leveneTest() aus dem car-Paket Welch-ANOVA (oneway.test())
Unabhängigkeit der Beobachtungen Studiendesign prüfen Messwiederholungs-ANOVA
Metrisch skalierte AV Datenstruktur prüfen Ordinale Alternativen

Einfaktorielle ANOVA mit aov()

In Base R ist aov() die Standardfunktion für die Varianzanalyse. Die Funktion passt intern ein lineares Modell über lm() an und gibt das Ergebnis in einer für die ANOVA geeigneten Struktur zurück. Das macht sie besonders einsteigerfreundlich, ohne dabei methodische Tiefe zu verlieren.

Die grundlegende Syntax folgt dem R-Formelschema: aov(AV ~ UV, data = datensatz). Hier ein vollständiges, lauffähiges Beispiel:

R
# Beispieldaten erstellen
set.seed(42)
lerngruppe <- factor(rep(c("Kontrolle", "Methode_A", "Methode_B"), each = 30))
testergebnis <- c(
  rnorm(30, mean = 65, sd = 10),  # Kontrollgruppe
  rnorm(30, mean = 72, sd = 10),  # Methode A
  rnorm(30, mean = 78, sd = 10)   # Methode B
)
daten <- data.frame(lerngruppe, testergebnis)

# Einfaktorielle ANOVA
modell_anova <- aov(testergebnis ~ lerngruppe, data = daten)

# Ergebnisse ausgeben
summary(modell_anova)

Beachten Sie, dass die Gruppenvariable als factor vorliegen muss. Liegt sie als numerische Variable oder als Zeichenkette vor, wandeln Sie sie vorher mit as.factor() um. Das ist einer der häufigsten Stolpersteine beim ersten Kontakt mit der ANOVA in R.

Gut zu wissen Das Argument data gibt den Datenrahmen an, in dem R nach den Variablen sucht. Wenn Sie es weglassen, sucht R die Variablen im globalen Environment – das funktioniert zwar oft, ist aber fehleranfälliger und schwerer nachzuvollziehen.

Den ANOVA-Output interpretieren

Der summary()-Output einer ANOVA liefert eine kompakte Tabelle. Ein typisches Ergebnis sieht so aus:

R Output
            Df Sum Sq Mean Sq F value   Pr(>F)    
lerngruppe   2   2847  1423.7   14.23 2.14e-06 ***
Residuals   87   8699   100.0                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Die wichtigsten Spalten im Überblick:

  • Df: Freiheitsgrade – für den Faktor k − 1, für die Residuen Nk
  • Sum Sq: Quadratsummen – Maß für die erklärte bzw. unerklärte Varianz
  • Mean Sq: Mittlere Quadratsumme (Sum Sq ÷ Df)
  • F value: Die Teststatistik – das Verhältnis der beiden Mean Squares
  • Pr(>F): Der p-Wert – zeigt, ob das Ergebnis statistisch signifikant ist

Im Beispiel ist F(2, 87) = 14,23, p < .001. Das bedeutet: Es gibt einen statistisch signifikanten Unterschied zwischen den drei Lerngruppen. Die ANOVA sagt Ihnen aber noch nicht, welche Gruppen sich konkret unterscheiden – dafür brauchen Sie einen Post-hoc-Test.

Post-hoc-Tests: Welche Gruppen unterscheiden sich?

Nach einem signifikanten ANOVA-Ergebnis schließt sich in der Regel ein Post-hoc-Test an. Der in der Praxis am häufigsten eingesetzte Test ist der Tukey HSD (Honestly Significant Difference), der alle paarweisen Gruppenvergleiche unter Kontrolle der multiplen Fehlerrate berechnet.

R
# Tukey HSD Post-hoc-Test
tukey_ergebnis <- TukeyHSD(modell_anova)
print(tukey_ergebnis)

# Visualisierung
plot(tukey_ergebnis)

Der Output zeigt für jedes Gruppenpaar die Mittelwertdifferenz, das Konfidenzintervall sowie den adjustierten p-Wert. Konfidenzintervalle, die nicht die Null enthalten, sprechen für einen signifikanten Unterschied zwischen den jeweiligen Gruppen.

Alternativen zum Tukey HSD sind:

  • Bonferroni-Korrektur: konservativer, empfehlenswert bei wenigen Vergleichen
  • Scheffé-Test: flexibler, aber weniger power bei paarweisen Vergleichen
  • Games-Howell: geeignet bei ungleichen Varianzen (Paket rstatix)

Zweifaktorielle ANOVA und Interaktionseffekte

Sobald Sie zwei unabhängige Variablen berücksichtigen möchten, erweitern Sie die Formel entsprechend. Das *-Operator schließt dabei Haupteffekte und Interaktionseffekt ein; mit + modellieren Sie nur Haupteffekte ohne Interaktion.

R
# Zweifaktorielle ANOVA mit Interaktion
modell_2x2 <- aov(testergebnis ~ lerngruppe * geschlecht, data = daten)
summary(modell_2x2)

# Nur Haupteffekte, kein Interaktionsterm:
# modell_additiv <- aov(testergebnis ~ lerngruppe + geschlecht, data = daten)

Ein signifikanter Interaktionsterm bedeutet: Die Wirkung eines Faktors hängt vom Niveau des anderen Faktors ab. In solchen Fällen ist es wenig sinnvoll, Haupteffekte isoliert zu interpretieren – die Interaktion hat Vorrang. Eine visuelle Darstellung der Zellmittelwerte (Interaktionsplot) hilft hier erheblich bei der Interpretation.

Einfach erklärt Stellen Sie sich vor, Methode A funktioniert bei Frauen deutlich besser als bei Männern, während Methode B keinen Geschlechtsunterschied zeigt. Genau das würde ein signifikanter Interaktionseffekt ausdrücken. Die Visualisierung mit ggplot2 macht solche Muster auf einen Blick sichtbar.

Type-II- und Type-III-ANOVA mit car::Anova()

Base R berechnet standardmäßig Type-I-Quadratsummen – das bedeutet: Die Terme werden sequenziell in der Reihenfolge getestet, in der sie in der Formel stehen. Das ist bei balancierten Designs (gleiche Gruppengrößen) unproblematisch, bei unbalancierten Designs aber methodisch heikel.

Für unbalancierte Designs oder Modelle mit Interaktionstermen empfiehlt sich das car-Paket. Die Funktion car::Anova() berechnet Type-II- oder Type-III-Quadratsummentabellen für eine Vielzahl von Modellklassen, darunter lineare Modelle, gemischte Modelle und generalisierte lineare Modelle.

R
# Paket laden (ggf. vorher installieren: install.packages("car"))
library(car)

# Lineares Modell als Basis
modell_lm <- lm(testergebnis ~ lerngruppe * geschlecht, data = daten)

# Type-II-ANOVA (empfohlen bei unbalancierten Designs ohne starke Interaktion)
Anova(modell_lm, type = "II")

# Type-III-ANOVA (empfohlen wenn Interaktionsterme im Modell sind)
Anova(modell_lm, type = "III")

Als Faustregel gilt:

  • Type II: Sinnvoll, wenn kein bedeutsamer Interaktionsterm erwartet wird. Testet jeden Haupteffekt unter Kontrolle aller anderen Haupteffekte.
  • Type III: Standard in vielen Fachdisziplinen (z. B. Psychologie, Medizin), wenn Interaktionseffekte im Modell enthalten sind. Setzt voraus, dass Kontraste korrekt kodiert sind (in R: options(contrasts = c("contr.sum", "contr.poly"))).

Das car-Paket unterstützt zudem heteroskedastizitätskorrigierte Kovarianzmatrizen über das Argument white.adjust – praktisch, wenn der Levene-Test auf ungleiche Varianzen hindeutet. Welche R-Pakete für die statistische Auswertung in Ihrer Abschlussarbeit sinnvoll sind, hängt vom Studiendesign ab.

Effektstärke berechnen: Eta-Quadrat

Ein signifikanter p-Wert allein sagt wenig über die praktische Bedeutsamkeit eines Befunds aus. Für die ANOVA ist Eta-Quadrat () die gebräuchlichste Effektstärke. Sie gibt an, welcher Anteil der Gesamtvarianz durch den Faktor erklärt wird.

Eta-Quadrat

Orientierungswerte nach Cohen: (klein), (mittel), (groß). In R berechnen Sie Eta-Quadrat am einfachsten mit dem Paket effectsize:

R
# install.packages("effectsize")
library(effectsize)

# Eta-Quadrat
eta_squared(modell_anova)

# Partielles Eta-Quadrat (bei mehrfaktorieller ANOVA bevorzugt)
eta_squared(modell_anova, partial = TRUE)

Eine ausführliche Anleitung zur Berechnung von Effektstärken in R finden Sie in unserem separaten Beitrag. Viele Hochschulen erwarten, dass Effektstärken neben dem p-Wert standardmäßig im Ergebnisbericht ausgewiesen werden – planen Sie das von Anfang an ein.

Voraussetzungen in R überprüfen

Voraussetzungsprüfungen gehören zur vollständigen Berichterstattung einer ANOVA. Gehen Sie dabei in dieser Reihenfolge vor:

1. Normalverteilung der Residuen

R
# Shapiro-Wilk-Test auf die Residuen
shapiro.test(residuals(modell_anova))

# QQ-Plot zur visuellen Prüfung
qqnorm(residuals(modell_anova))
qqline(residuals(modell_anova), col = "red")

2. Varianzhomogenität (Levene-Test)

R
library(car)
leveneTest(testergebnis ~ lerngruppe, data = daten)

Ist der Levene-Test signifikant (Varianzen unterscheiden sich), wechseln Sie zur Welch-ANOVA:

R
# Welch-ANOVA (robust bei Varianzheterogenität)
oneway.test(testergebnis ~ lerngruppe, data = daten, var.equal = FALSE)

3. Ausreißer identifizieren

R
# Boxplot je Gruppe
boxplot(testergebnis ~ lerngruppe, data = daten,
        main = "Testergebnisse nach Lerngruppe",
        xlab = "Gruppe", ylab = "Testergebnis")

Häufige Fehler und praktische Hinweise

In der Praxis zeigt sich, dass bestimmte Fehler beim Einsatz der ANOVA in R immer wieder auftauchen. Die häufigsten:

Häufiger Fehler Gruppenvariable nicht als Faktor definiert: Liegt die UV als numerische Variable vor (z. B. 1, 2, 3 statt "Kontrolle", "A", "B"), behandelt R sie als kontinuierliche Variable und rechnet eine Regression statt eine ANOVA. Prüfen Sie mit class(daten$lerngruppe) und wandeln Sie ggf. um: daten$lerngruppe <- as.factor(daten$lerngruppe).

Weitere häufige Stolperfallen:

  • Type-I-Quadratsummen bei unbalancierten Designs: Ohne Anpassung kann die Reihenfolge der Terme im Formelausdruck die Ergebnisse beeinflussen. Nutzen Sie car::Anova() mit type = "II" oder type = "III".
  • Fehlende Werte ignorieren: aov() ist für balancierte Designs konzipiert. Fehlende Werte in der abhängigen Variable können die Balance zerstören und die Ergebnisse verzerren. Informieren Sie sich vorab, wie Sie fehlende Werte in R behandeln.
  • Post-hoc ohne signifikante ANOVA: Post-hoc-Tests sind nur bei signifikantem Omnibus-F sinnvoll. Führen Sie sie nicht routinemäßig ohne Signifikanzprüfung durch.
  • Effektstärke vergessen: p-Werte allein reichen in wissenschaftlichen Arbeiten nicht aus. Berichten Sie immer oder partielles .

Wenn Sie unsicher sind, ob Ihr Studiendesign eine einfache ANOVA, eine mehrfaktorielle ANOVA oder ein gemischtes Modell erfordert, lohnt sich eine frühzeitige methodische Beratung. Die statistische Unterstützung mit R bei QuantExpert umfasst genau diese Designfragen – von der Hypothesenformulierung bis zur Ergebnisdarstellung.

Für die Ergebnisdarstellung in Ihrer Abschlussarbeit empfiehlt sich außerdem ein Blick auf die Möglichkeiten, R-Ergebnisse formatiert zu exportieren. Pakete wie flextable oder apaTables erzeugen APA-konforme Tabellen direkt aus R-Objekten – das spart erheblich Zeit bei der Berichterstellung.

ANOVA R aov() Post-hoc-Test Varianzanalyse Effektstärke car-Paket Abschlussarbeit

Ihr persönlicher Ansprechpartner

Maximilian Fuchs, M. Sc.

Teilen Sie uns mit, wie wir Ihnen helfen können.

  • Persönlicher Ansprechpartner
  • Schnelle Rückmeldung
  • Transparente Preise
  • Schutz Ihrer Daten

Fragen? Einfach anrufen!