ggplot (barplot) & Tukey-Test

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
flip_0207
Beiträge: 23
Registriert: Do Dez 06, 2018 7:46 pm

ggplot (barplot) & Tukey-Test

Beitrag von flip_0207 »

Hallo

Ich habe folgendes Problem:

Die Ergebnisse einer ANOVA und des Tukey-Tests möchte ich gerne mit ggplot grafisch darstellen. Grundsätzlich schaffe ich es, ein Balkendiagramm mit Standardabweichung zu erstellen und die beiden Tests durchzuführen.
Mir fehlt im Diagramm jedoch noch die Signifikanzentscheidung anhand der Buchstaben, die über dem jeweiligen Balken stehen sollen.

Habe dazu mal ein kleines Beispiel vorbereitet:

Code: Alles auswählen

library(tidyverse)
library(agricolae)

Beispiel <-data.frame(Variante=factor(c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)),
                      Messwert=c(64,87,54,98,14,5,8,9,9,2,12,15,7,8,7))

AOV_Beispiel <- aov(Messwert~Variante, data = Beispiel)
Tukey_Beispiel <-HSD.test(AOV_Beispiel,"Variante",
                              group = TRUE,
                              console = TRUE)
HSD.test gibt mir für den Beispieldatensatz folgendes heraus:

Code: Alles auswählen

  Messwert groups
1     63.4      a
3      9.8      b
2      6.6      b
Damit hätte ich also zwei Gruppen "a" und "b".

Gibt es eine einfache, automatische und möglichst elegante Lösung, diese gängige Darstellungsweise mit ggplot zu erreichen?

Gruß
Flip
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggplot (barplot) & Tukey-Test

Beitrag von EDi »

Was hast du denn probiert?

Hier ein Beispiel mit emmeans (ich mag agricolae nicht), das du sicherlich anpassen kannst.

Code: Alles auswählen

library("emmeans")
library("ggplot2")
Beispiel <-data.frame(Variante=factor(c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)),
                      Messwert=c(64,87,54,98,14,5,8,9,9,2,12,15,7,8,7))
mod <- lm(Messwert~Variante, data = Beispiel)
emm <- emmeans(mod, ~Variante)
sig_lett <- CLD(emm, adjust = "tukey", Letters = letters)
df <- data.frame(sig_lett)
df

ggplot(data = df, aes(x = Variante)) +
  geom_pointrange(aes(y = emmean, ymin = lower.CL, ymax = upper.CL)) +
  geom_text(aes(y = upper.CL, label = trimws(.group)), vjust = -1)
Dateianhänge
Rplot.png
Rplot.png (9.91 KiB) 1211 mal betrachtet
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
flip_0207
Beiträge: 23
Registriert: Do Dez 06, 2018 7:46 pm

Re: ggplot (barplot) & Tukey-Test

Beitrag von flip_0207 »

Danke, das werde ich mal versuchen.
Ideal wäre es mit agricolae, das package nutze ich recht viel für Statistik.
Dafmen
Beiträge: 14
Registriert: Sa Nov 02, 2019 1:37 pm

Re: ggplot (barplot) & Tukey-Test

Beitrag von Dafmen »

Hallo,

auch wen es nicht mein Thread ist, hat mir deine Lösung sehr geholfen. Die Adaption auf meinen Datensatz funktionierte tadellos.
Perfekt.

Danke und Gruß,
Sebastian
flip_0207
Beiträge: 23
Registriert: Do Dez 06, 2018 7:46 pm

Re: ggplot (barplot) & Tukey-Test

Beitrag von flip_0207 »

Da ich mitterweile eine gute Lösung für das Problem gefunden habe, hier mal ein Beispiel (Rohdaten sind im Dateianhang):

Code: Alles auswählen

library(tidyverse)
library(agricolae)

Rohdaten <- read.csv2("Rohdaten_ANOVA_Tukey.csv")

#Thema erstellen

Thema <- theme(panel.background = element_rect(fill = "white"),
                  axis.line = element_line())

Farben_Art <- c("Zuckerrübe"="darkgreen", "Winterweizen"="blue", "Ackerbohne"="red4")

#ANOVA
AOV_Ertrag <- aov(Ertrag ~ Art, data = Rohdaten)

#Tukey-Test
Tukey_Ertrag <-HSD.test(AOV_Ertrag, "Art",
                              group = TRUE,
                              console = TRUE)

#Gruppen aus Tukey herausziehen

Gruppen <- Tukey_Ertrag$groups
Gruppen$Art <- row.names(Gruppen)


#Tabellen verschneiden

Grafik <- full_join(Rohdaten, Gruppen[,c("Art","groups")])

#Gruppieren

Grafik<-Grafik %>%
  group_by(Art, groups) %>%
  summarise("Ertrag"=mean(Ertrag))

#Grafik erstellen

ggplot(Grafik, aes(x=Art, y=Ertrag, fill=Art)) +
  geom_bar(position=position_dodge(), stat="identity",
           size=0.3)+
  xlab("Art") +
  ylab("Ertrag [dt/ha]") +
  geom_text(aes(label=groups), position=position_dodge2(width=0.9,preserve="single"), 
            size=4 , vjust=-1.5 ,hjust=0.5)+
  scale_y_continuous(limits = c(0,1000), breaks = c(0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000),
                     labels = c("0","100","200","300","400","500","600","700","800","900","1000"))+
  theme_classic()+
  scale_color_manual(values = Farben_Art, aesthetics = "fill")+
  Thema+
  theme(axis.text.x=element_blank(), 
        axis.ticks.x=element_blank())

Dateianhänge
Rohdaten_ANOVA_Tukey.csv
(829 Bytes) 47-mal heruntergeladen
Antworten