Indiquant la différence statistiquement significative dans le diagramme à barres à L'aide de R

C'est une répétition d'une question initialement posée ici: indiquant la différence statistiquement significative dans le graphique à barres mais a demandé R à la place de python.

Ma question est très simple. Je veux produire barplots en R, en utilisant ggplot2 si possible, avec une indication de différence significative entre les différentes barres, par exemple produire quelque chose comme ceci. J'ai fait des recherches, mais je n'arrive pas à trouver une autre question qui demande exactement la même chose. chose.

bar plot showing error bars and sig. diff marking beween bars

17
demandé sur Community 2013-02-19 17:00:18

3 réponses

Vous pouvez utiliser geom_path() et annotate() pour obtenir un résultat similaire. Pour cet exemple, vous devez déterminer vous-même la position appropriée. geom_path() quatre nombres sont fournis pour obtenir ces petites tiques pour les lignes de connexion.

df<-data.frame(group=c("A","B","C","D"),numb=c(12,24,36,48))
g<-ggplot(df,aes(group,numb))+geom_bar(stat="identity")
g+geom_path(x=c(1,1,2,2),y=c(25,26,26,25))+
  geom_path(x=c(2,2,3,3),y=c(37,38,38,37))+
  geom_path(x=c(3,3,4,4),y=c(49,50,50,49))+
  annotate("text",x=1.5,y=27,label="p=0.012")+
  annotate("text",x=2.5,y=39,label="p<0.0001")+
  annotate("text",x=3.5,y=51,label="p<0.0001")

enter image description here

15
répondu Didzis Elferts 2013-02-19 13:18:52

je sais que c'est une vieille question et la réponse de Didzis Elferts apporte déjà une solution au problème. Mais j'ai récemment créé une extension ggplot qui simplifie tout le processus d'ajout de barres de signification: ggsignif

au lieu d'ajouter legeom_path et annotate à votre parcelle vous ajoutez juste une couche simple 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.

13
répondu Artjom 2017-04-05 12:39:09

j'ai utilisé la méthode suggérée ci-dessus, mais j'ai trouvé la fonction Annoter plus facile pour faire des lignes que la fonction geom_path. Il suffit d'utiliser "segment" au lieu de "texte". Vous devez séparer les choses par segment et définir les valeurs de départ et de fin x et y pour chaque segment de ligne.

exemple pour faire 3 segments de lignes:

annotate("segment", x=c(1,1,2),xend=c(1,2,2), y= c(125,130,130), yend=c(130,130,125))
3
répondu Jenny 2016-10-17 20:57:01