2013-02-19 4 views
16

Dies ist eine Wiederholung einer ursprünglich hier gestellten Frage: Indicating the statistically significant difference in bar graph, aber gefragt nach R anstelle von Python.Angabe des statistisch signifikanten Unterschieds im Balkendiagramm VERWENDUNG R

Meine Frage ist sehr einfach. Ich möchte Bargraphs in R erzeugen, wenn möglich mit ggplot2, mit einem Hinweis auf einen signifikanten Unterschied zwischen den verschiedenen Balken, z. produziere so etwas. Ich habe eine Suche gemacht, kann aber keine andere Frage finden, die genau das Gleiche verlangt.

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

+0

Also nur benachbarte Spalten? Kein p-Wert für A-C, B-D oder A-D? –

+0

Ärgerlich genug (nicht deine Schuld), etwas in meiner lokalen Firewall tötet dein Bild. Kannst du einen Link posten? –

+0

Entschuldigung für die Verzögerung. Bild hier: http://i.stack.imgur.com/3I6El.jpg –

Antwort

15

können Sie geom_path() und annotate() verwenden ähnliches Ergebnis zu erhalten. Für dieses Beispiel müssen Sie selbst eine geeignete Position bestimmen. In geom_path() sind vier Nummern vorgesehen, um die kleinen Ticks für Verbindungslinien zu erhalten.

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

+0

Danke - OK, das ist ein wenig fummelig, aber das ist was ich will! Ich denke, es gibt keine leicht verfügbare, allgemeine (automatische!) Möglichkeit, es zu tun –

+0

Oof, irgendeine Weise, den geom_path zu steuern, wenn er Facettierung benutzt? –

+0

@JimBo Dann benötigen Sie einen Datenrahmen für die geom_path() - Werte und in diesem Datenrahmen müssen Sie auch die Spalte mit dem gleichen Namen und den gleichen Ebenen einfügen, die für die Facettierung verwendet werden. –

3

verwendete ich die vorgeschlagene Methode von oben, aber ich fand die annotate Funktion leichter Linien als die geom_path Funktion zu machen. Verwenden Sie einfach "Segment" anstelle von "Text". Sie müssen die Dinge nach Segmenten aufteilen und Start- und Endwerte für x und y für jedes Liniensegment definieren.

Beispiel 3 Zeilen Segmente für die Herstellung:

annotate("segment", x=c(1,1,2),xend=c(1,2,2), y= c(125,130,130), yend=c(130,130,125)) 
11

Ich weiß, dass dies eine alte Frage und die Antwort von Didzis Elferts bietet bereits eine Lösung für das Problem. Aber ich vor kurzem eine ggplot-Erweiterung, die den gesamten Prozess der Zugabe von Bedeutung Bars vereinfacht: ggsignif

Statt mühselig die geom_path und annotate zu Ihrem Grundstück Hinzufügen fügen Sie nur eine einzige Schicht 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

Die vollständige Dokumentation des Pakets finden Sie unter CRAN.