回答:
Tukeyの箱ひげ図が普遍的である理由があり、ガウスからポアソンなどのさまざまな分布から派生したデータに適用できます。中央値、MAD(中央値の絶対偏差)またはIQR(四分位範囲)は、データが正常。ただし、平均値とSDは外れ値になりやすいため、基になる分布に基づいて解釈する必要があります。以下のソリューションは、通常または対数正規のデータにより適しています。ここで堅牢なメジャーの選択を参照し、ここでWRS Rパッケージを探索できます。
# simulating dataset
set.seed(12)
d1 <- rnorm(100, sd=30)
d2 <- rnorm(100, sd=10)
d <- data.frame(value=c(d1,d2), condition=rep(c("A","B"),each=100))
# function to produce summary statistics (mean and +/- sd), as required for ggplot2
data_summary <- function(x) {
mu <- mean(x)
sigma1 <- mu-sd(x)
sigma2 <- mu+sd(x)
return(c(y=mu,ymin=sigma1,ymax=sigma2))
}
# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) +
geom_crossbar(stat="summary", fun.y=data_summary, fun.ymax=max, fun.ymin=min)
さらに、上記のコードを追加+ geom_jitter()
または追加することにより+ geom_point()
、生データ値を同時に視覚化できます。
バイオリンのプロットを指摘してくれた@Rolandに感謝します。要約統計と同時に確率密度を視覚化するという利点があります。
# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) +
geom_violin() + stat_summary(fun.data=data_summary)
両方の例を以下に示します。
無数の可能性があります。
(中央値または元のデータが利用可能であると仮定して)ボックスプロットとの混同を避けるために使用した1つのオプションは、ボックスプロットをプロットし、平均をマークする記号を追加することです(できれば、これを明確にするために凡例を付けます)。平均のマーカーを追加するこのバージョンの箱ひげ図は、たとえばFrigge et al(1989)[1]で言及されています。
左のプロットは平均マーカーとして+記号を示し、右のプロットはエッジで三角形を使用して、Doane&Tracyのビームと支点プロットの平均マーカーを適応させています[2]。
中央値がない場合(または実際に表示したくない場合)は、新しいプロットが必要になるため、箱ひげ図と視覚的に区別するのが良いでしょう。
おそらくこのようなもの:
... 異なる記号を使用して各サンプルの最小値、最大値、平均値、平均値 sd をプロットし、次のような四角形、またはおそらくより良いものを描画します。
... 各サンプルの最小値、最大値、平均値、平均値 sdをさまざまなシンボルを使用してプロットし、線を描画します(実際には現在のところ、以前と同じように実際には長方形ですが、細く描画されています。ライン)
数値が非常に異なるスケールであるが、すべてが正の場合、ログを使用することを検討するか、異なる(ただし明確にマークされた)スケールで小さな倍数を行うことができます。
コード(現在、特に「素晴らしい」コードではありませんが、現時点ではこれはアイデアを探るだけのものであり、優れたRコードを書くためのチュートリアルではありません):
fivenum.ms=function(x) {r=range(x);m=mean(x);s=sd(x);c(r[1],m-s,m,m+s,r[2])}
eps=.015
plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-1.2*eps,fivenum.ms(A)[2],1+1.4*eps,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-1.2*eps,fivenum.ms(B)[2],2+1.4*eps,fivenum.ms(B)[4],lwd=2,col=4,den=0)
plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-eps/9,fivenum.ms(A)[2],1+eps/3,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-eps/9,fivenum.ms(B)[2],2+eps/3,fivenum.ms(B)[4],lwd=2,col=4,den=0)
[1] Frigge、M.、DC Hoaglin、およびB. Iglewicz(1989)、
「ボックスプロットのいくつかの実装」。
アメリカの統計家、43(2月):50-54。
[2] Doane DP and RL Tracy(2000)、
"Using Beam and Fulcrum Displays to Explore Data"
American Statistician、54(4):289–290、11月
R
コマンドについて質問している場合、この質問はここではトピックから外れています。しかし、あなたは主に良いプロットがどのように見えるかについて尋ね、次にそれをどのように作成するかについて尋ねているようです。もしそうなら、私はあなたのタイトルから「with R」を削除することをお勧めします、そしておそらくあなたがR
利用できることを本文で述べることをお勧めします。