web-dev-qa-db-fra.com

Comment dessiner le boxplot avec un niveau significatif?

Il y a quelque temps, j'ai posé une question sur le dessin de boxplot Link1 .

J'ai des données avec 3 groupes différents (ou étiquettes) Veuillez télécharger ici . Je peux utiliser les codes R suivants pour obtenir le boxplot

library(reshape2)
library(ggplot2)

morphData <- read.table(".\\TestData3.csv", sep=",", header=TRUE);
morphData.reshaped <- melt(morphData, id.var = "Label")

ggplot(data = morphData.reshaped, aes(x=variable, y=value)) + 
  + geom_boxplot(aes(fill=Label))

Ici, je me demande simplement comment mettre le niveau significatif au-dessus du boxplot. Pour être clair, j'ai mis une capture d'écran tirée d'un papier ici:

Boxplot

20
Samo Jerom

Je ne comprends pas très bien ce que vous entendez par boxplot avec un niveau significatif mais voici une suggestion sur la façon dont vous pouvez générer ces barres: je résoudrais cette construction de petites trames de données avec les coordonnées des barres. Voici un exemple:

pp <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot()
df1 <- data.frame(a = c(1, 1:3,3), b = c(39, 40, 40, 40, 39))
df2 <- data.frame(a = c(1, 1,2, 2), b = c(35, 36, 36, 35))
df3 <- data.frame(a = c(2, 2, 3, 3), b = c(24, 25, 25, 24))

pp + geom_line(data = df1, aes(x = a, y = b)) + annotate("text", x = 2, y = 42, label = "*", size = 8) +
     geom_line(data = df2, aes(x = a, y = b)) + annotate("text", x = 1.5, y = 38, label = "**", size = 8) +
     geom_line(data = df3, aes(x = a, y = b)) + annotate("text", x = 2.5, y = 27, label = "n.s.", size = 8)

enter image description here

20
DatamineR

Je sais que c'est une vieille question et la réponse de DatamineR fournit déjà une solution au problème. Mais j'ai récemment créé une extension ggplot qui simplifie l'ensemble du processus d'ajout de barres de signification: ggsignif

Au lieu d'ajouter fastidieusement le geom_line et annotate à votre tracé, vous ajoutez simplement une seule couche geom_signif:

library(ggplot2)
library(ggsignif)

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
  geom_boxplot() +
  geom_signif(comparisons = list(c("versicolor", "virginica")), 
              map_signif_level=TRUE)

Boxplot with significance bar

La documentation complète du paquet est disponible sur CRAN .

22
const-ae