web-dev-qa-db-ja.com

Rを使用した棒グラフの統計的に有意な差を示す

これは、最初にここで尋ねられた質問の繰り返しです: 棒グラフの統計的に有意な差を示す ですが、pythonではなくRを求められました。

私の質問はとても簡単です。 Rでバープロットを作成し、可能な場合はggplot2を使用して、異なるバー間の有意差を示します。このようなものを作ります。私は周りを検索しましたが、まったく同じことを尋ねる別の質問を見つけることができません。

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

18
Jim Bo

geom_path()およびannotate()を使用して、同様の結果を得ることができます。この例では、適切な位置を自分で決定する必要があります。 geom_path()では、接続線の小さな目盛りを取得するために4つの数値が提供されています。

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

16
Didzis Elferts

私はこれが古い質問であることを知っています。DidzisElfertsの回答はすでに問題の1つの解決策を提供しています。しかし、私は最近、重要度バーを追加するプロセス全体を簡略化するggplot-extensionを作成しました: ggsignif

面倒にgeom_pathannotateをプロットに追加する代わりに、単一のレイヤー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

パッケージの完全なドキュメントは [〜#〜] cran [〜#〜] にあります。

15
const-ae

上記の方法を使用しましたが、geom_path関数よりもアノテーション関数の方が線の作成が簡単であることがわかりました。 「テキスト」の代わりに「セグメント」を使用してください。セグメントごとに分割し、各ラインセグメントの開始と終了のx値とy値を定義する必要があります。

3つのラインセグメントを作成する例:

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