Varianzanalyse mit R (ANOVA)

In diesem Artikel lernen Sie wie man eine Varianzanalyse mit R durchführt. Eine Varianzanalyse ist immer dann das geeignete Verfahren, wenn Sie drei oder Mehr Gruppen auf Mittelwertsunterschiede hin vergleichen wollen.

Wir demonstrieren Ihnen die Vorgehensweise anhand des Beispieldatensatzes "iris". Dies ist ein sehr bekannter Datensatz, der als Beispieldatensatz in zahllosen Analysen und statistischen Beratungen fungiert.

Der Iris-Datensatz ist mit R vorinstalliert. Sehen sie sich zunächst die ersten 10 Zeilen des Datensatz an, indem Sie in die R-Konsole den Befehl

 

head(iris,10)

 

eingeben. Der Datensatz sieht folgendermaßen aus:

Der Datensatz enthält Informationen über Blumen der Gattung Iris,  wobei die drei Unterarten Iris setosa, Iris virginica und Iris versicolor vorhanden sind. 

Wir interessieren uns für die Variable Sepal.Length. Diese Variable bezeichnet die Blütenkelch-Länge der Blume, und wir möchten untersuchen, ob sich die Blütenkelch-Länge zwischen den drei Arten Setosa, Virginica und Versicolor unterscheidet.

Wir möchten zunächst einen Überblick über mögliche Unterschiede zwischen den drei Gruppen bekommen. Hierzu erstellen wir einen Boxplot in R und führen anschließend eine ANOVA durch, um festzustellen ob sich die Gruppen signifikant voneinander unterscheiden.

 

Vor der Varianzanalyse: Boxplot erstellen

Den Boxplot erstellen Sie mittels des folgenden R-Befehles:

 

boxplot(iris$Sepal.Length ~ iris$Species)

 

Der resultierende Plot sieht folgendermaßen aus. Man erkennt, dass die Gruppen sich deutlich unterscheiden. Die Gruppe Virginica weist durchschnittlich die größte Blütenkelchlänge auf, gefolgt von Versicolor und Setosa.

Nun möchten wir untersuchen, ob der Mittelwerts-Unterschied zwischen den 3 Gruppen statistisch signifikant ist. Da es sich hierbei um mehr als 2 Gruppen handelt, ist die Varianzanalyse das geeignete Verfahren.

 

Varianzanalyse mit R berechnen

Um die Varianzanalyse (ANOVA) zu berechnen, benutzen Sie die R-Funktionen aov() und summary(). Geben Sie hierzu den folgenden Befehl in die R-Konsole ein:

 

summary(aov(iris$Sepal.Length ~ iris$Species))

 

Man erkennt, dass innerhalb des aov()-Befehls das gewünschte Modell mittels einer Tilde angegeben werden muss. Links von der Tilde steht die untersuchte Variable (Blütenkelch-Länge) und rechts von der Tilde die Gruppierungsvariable (Unterart).

Nach Eingabe des Befehls erhalten Sie den folgenden R-Output:

Im Output erkennen Sie an der Anzahl der Sterne rechts, ob zwischen den Gruppen ein signifikanter Unterschied besteht.

  • Hier zeigen sich drei Sterne (***). Man erkennt an den im R-Code eingeblendeten Significance-Codes (ganz unten im Output), dass die drei Sterne für einen p-Wert von p < 0.001 stehen.
  • Ein p-Wert der kleiner ist als 0.001 bedeutet, dass zwischen den drei Gruppen ein hochsignifikanter Unterschied besteht.
  • Beachten Sie: die Varianzanalyse sagt Ihnen zunächst nur, dass zwischen allen drei Gruppen ein hochsignifikanter Unterschied besteht, aber nicht zwischen welchen der Gruppen genau.
  • Z.B. könnte es sein, dass der Unterschied zwischen Setosa und Virginica signifikant ist, der Unterschied zwischen Versicolor und Virginica jedoch nicht, da bei den letzteren beiden der Unterschied im Boxplot nicht sehr groß erscheint.

Um herauszufinden, welche der einzelnen Gruppen sich signifikant voneinander unterscheiden, müssen Sie einen sogenannten Post-Hoc-Test berechnen.

 

Post Hoc Test in R (Tukey HSD)

Bei einem Post-Hoc-Test wird jede Gruppe mit jeder verglichen. Es ist daher möglich zu beurteilen, zwischen welchen Gruppen sich jeweils signifikante Unterschiede ergeben. 

Es existieren verschiedene Post-Hoc-Tests. Einer der bekanntesten ist das Verfahren nach Tukey, welches wir nun durchführen werden. Hierzu geben Sie den folgenden Code in die R-Konsole ein:

 

TukeyHSD(aov(iris$Sepal.Length ~ iris$Species))

 

Der Test wird also in R durchgeführt, indem auf den Befehl aov() zusätzlich noch der Befehl TukeyHSD() angewandt wird. Man erhält hierdurch das folgende Ergebnis:

Man erkennt, dass in jeder Zeile das Ergebnis eines Vergleichs von 2 Gruppen dargestellt ist.

  • In der ersten Zeile werden Versicolor und Setosa miteinander verglichen. Der Wert diff bezeichnet die Differenz zwischen den Mittelwerten der beiden Gruppen und beträgt hier 0.93.
  • Das bedeutet, die Blütenkelch-Länge von Versicolor ist im Mittel um 0.93 größer als diejenige von Setosa.
  • Ob dieser unterschied signifikant ist, sehen Sie in der Spalte p adj ganz rechts. Dort ist der p-Wert dargestellt, der hier p=0 beträgt.
  • Da der p-Wert kleiner als 0.05 ist, ist der Unterschied zwischen Versicolor und Setosa statistisch signifikant.

Die anderen Paarvergleiche werden analog interpretiert.

Beachten Sie: Die Varianzanalyse wird üblicherweise nur dann ein gesetzt, wenn drei oder mehr Gruppen miteinander verglichen werden sollen. Bei nur zwei Gruppen ist der t-Test für unabhängige Stichproben in R das geeignete Analyseverfahren. 

 

NEU: Möchten Sie die einfaktorielle Varianzanalyse in R lieber in Form eines Videos verstehen? Dann sehen sie sich das folgende Video auf YouTube an und abonnieren Sie unseren YouTube-Kanal:

 

Kommentare: 17
  • #17

    Cécile (Donnerstag, 20 Mai 2021 13:45)

    Sehr tolle Erklärung zur Interpretation. Findet man bei anderen Funktionen leider zu selten.

  • #16

    Robi (Freitag, 26 Februar 2021 16:19)

    Danke, endlich gerallt!

  • #15

    R-Professor (Montag, 22 Februar 2021 10:31)

    Super Thread!

  • #14

    Fabian (Samstag, 12 September 2020 15:23)

    Vielen Dank für die Übersicht.
    Hat mir sehr weitergeholfen.

  • #13

    Sani (Freitag, 10 Juli 2020 18:48)

    Danke fuer die tolle Uebersicht!

  • #12

    Anni (Freitag, 01 Mai 2020 15:08)

    Vielen Dank, das ist super hilfreich und verständlich!

  • #11

    Fosi (Freitag, 13 März 2020 12:32)

    Danke für die klare Darstellung. Eine Frage zur graphischen Darstellung hätte ich noch: Vielfach werden Boxplots dargestellt, in den Plots aber die Signifikanzen aus der ANOVA mittels Buchstaben angezeigt. Ist das so korrekt?

  • #10

    Ari (Dienstag, 31 Dezember 2019 09:58)

    Wie argumentiere ich denn, wenn ich im TukeyHSD negative Mittelwerte habe?
    DANKE!
    Tukey multiple comparisons of means
    ## 95% family-wise confidence level
    ##
    ## Fit: aov(formula = Diabetes4$Pregnancies ~ Diabetes4$AgeCategory)
    ##
    ## $`Diabetes4$AgeCategory`
    ## diff lwr upr p adj
    ## old-middle-aged 3.156927 2.590258 3.723596 0
    ## young-middle-aged -1.833978 -2.404810 -1.263147 0
    ## young-old -4.990905 -5.538156 -4.443654 0

  • #9

    TLN (Dienstag, 03 September 2019 14:39)

    Allerallerbeste Seite!!! Endlich verstehe ich 1:1 was in R zu machen ist!! DANKE

  • #8

    J.K. (Sonntag, 11 August 2019 12:26)

    Vielen lieben Dank!
    Die Seite ist eine große Hilfe!

  • #7

    K. (Samstag, 20 Juli 2019 06:36)

    Diese Seite ist wirklich sehr hilfreich und gut aufgebaut. Viel Erfolg weiterhin.

  • #6

    Alexandra (Dienstag, 09 Juli 2019 02:53)

    Ich bin mega dankbar!! Meine Semesterarbeit in Psychologie ist gerettet. Die Seite ist zudem sehr übersichtlich. Merci!!!

  • #5

    Magdalena (Samstag, 15 Juni 2019 23:26)

    !!! könnte mir gefallen + schmecken ! ! !

  • #4

    Alex (Freitag, 31 Mai 2019 13:33)

    Ganz großes Dankeschön! Konnte einiges für mein Datenanalysebericht im Rahmen des Psychologiestudiums nutzen. Hat mir super geholfen!

  • #3

    FER (Montag, 25 Februar 2019 15:53)

    Tausend DANK!
    Wenn doch mein Prof. das Ganze so simpel erklären würde...

  • #2

    Christine (Sonntag, 27 Januar 2019 19:27)

    Hallo,

    ich liebe diese Seite!
    Sie hat mir geholfen R zu verstehen und ich habe es geschafft selbständig meinen Datensatz zu programmieren für eine Hausarbeit in Psychologie!
    DANKE!

    P.S. Ich finde nix zur Effektgrößenberechnung und würde mich sehr freuen, wenn es da auch noch tolle Hilfe gäbe ;-)

  • #1

    M (Dienstag, 31 Juli 2018 15:48)

    Schöne kurze, übersichtliche und verständliche Darstellung.
    Noch eine Frage:
    Wie bekommt man anschließend in R die Gruppeneinteilung hin, um die signifikant voneinander unterschiedlichen Gruppen mit Buchstaben kennzeichnen zu können (wie es in wissenschaftlichen Arbeiten üblich ist)?