平均、sd、最小、最大で要約統計量をプロットしますか?


10

私は経済学の出身ですが、通常、分野では変数の要約統計量が表で報告されます。しかし、私はそれらをプロットしたいと思います。

ボックスプロットを変更して、平均値、標準偏差、最小値、最大値を表示できるようにすることもできますが、従来は中央値とQ1およびQ3を表示するためにボックスプロットが使用されているため、そうしたくありません。

すべての変数のスケールが異なります。誰かが私がこれらの要約統計量をプロットすることができる意味のある方法を提案できたら素晴らしいでしょう。RまたはStataを使用できます。


1
リストへようこそ。Rコマンドについて質問している場合、この質問はここではトピックから外れています。しかし、あなたは主に良いプロットがどのように見えるかについて尋ね、次にそれをどのように作成するかについて尋ねているようです。もしそうなら、私はあなたのタイトルから「with R」を削除することをお勧めします、そしておそらくあなたがR利用できることを本文で述べることをお勧めします。
ピーターフロム-モニカの復活

回答:


16

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)

両方の例を以下に示します。

ここに画像の説明を入力してください


2
私はこれよりもバイオリンのプロットを好みます。
Roland

1
分析の目的に応じて、平均と標準偏差がまさに必要なものです。ただし、Rのsummary.data.frameの不整合は理解できません。それは平均を示しますが、sdsは示しません。平均が役立つが、標準偏差が誤解を招くような状況はあまり考えられません。
マイケルM

あなたは彼らが有用であるかどうかを判断するように確かに、時にはあなたは....平均とSDを確認する必要があります
ニック・コックス

1
@TWL:トピックが広すぎるため、ここで議論できません。しかし、たとえば薬物の経済的評価を考えてみましょう。患者にとっては、治療期間の中央値を知ることが重要かもしれませんが、健康保険会社にとっては、患者ごとに支払う必要があるため、平均治療期間です。奇妙な事実:指数分布の場合、平均+/- 1標準偏差はすべての質量の68%をカバーし、平均+/- 2 sdsはすべての質量の約95%をカバーします。ノーマルも。(しかし、それは単なるチャンスです;))
マイケルM

1
おかげで、私は提案されたバイオリンのプロットが好きなので、その選択を進めます:-)
Ridhima '28

9

無数の可能性があります。

(中央値または元のデータが利用可能であると仮定して)ボックスプロットとの混同を避けるために使用した1つのオプションは、ボックスプロットをプロットし、平均をマークする記号を追加することです(できれば、これを明確にするために凡例を付けます)。平均のマーカーを追加するこのバージョンの箱ひげ図は、たとえばFrigge et al(1989)[1]で言及されています。

同様にマークされた平均を示す箱ひげ図

左のプロットは平均マーカーとして+記号を示し、右のプロットはエッジで三角形を使用して、Doane&Tracyのビームと支点プロットの平均マーカーを適応させています[2]。

このSO投稿これも参照してください

中央値がない場合(または実際に表示したくない場合)は、新しいプロットが必要になるため、箱ひげ図と視覚的に区別するのが良いでしょう。

おそらくこのようなもの:

ここに画像の説明を入力してください

... 異なる記号を使用して各サンプルの最小値、最大値、平均値、平均値 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 Statistician54(4):289–290、11月

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.