ヘビーテール分布のBoxplot相当?


13

ほぼ正規分布のデータの場合、ボックスプロットは、データの中央値と広がり、および異常値の存在をすばやく視覚化する優れた方法です。

ただし、より重い裾の分布では、多くのポイントが外れ値として表示されます。これは、外れ値がIQRの固定因子の外側にあると定義されているためです。

では、この種のデータを視覚化するために人々は何を使用していますか?もっと適応したものはありますか?それが重要な場合は、Rでggplotを使用します。


1
裾の重い分布からのサンプルは、中間の50%に比べて範囲が広い傾向があります。あなたはそれについて何をしたいですか?
Glen_b-モニカを復活

7
すでにいくつかの関連するスレッド(例:stats.stackexchange.com/questions/13086 / ...)短い回答には、最初に変換が含まれます!ヒストグラム; さまざまな種類の分位プロット; さまざまな種類のプロットを取り除きます。
ニックコックス

@Glen_b:それがまさに私の問題です。箱ひげ図が読めなくなります。
-static_rtti

2
事は、行われるかもしれない複数の事があるということです...それで、あなたそれに何をして欲しいですか?
Glen_b

2
おそらく、統計の世界のほとんどは、1970年代のジョン・テューキーによる命名と(再)導入から箱ひげ図を知っていることに注意する価値があります。(それらは気候学と地理学で数十年前に使用されていました。)しかし、1977年の探索的データ分析に関する本の後半の章(Reading、MA:Addison-Wesley)で、彼は重尾分布の取り扱いについてまったく異なる考えを持っています。まったく流行していないようです。しかし、変位値プロットは同様の精神です。
ニックコックス

回答:


8

そして、私は現在の回答のほとんどは、実際にその問題に対処しないと思う- OPを持っているように見え、中央の問題は、彼らは非常に重い尾のデータを持っているということですすべてで、私は答えに私の以前のコメントを推進していますので、。

箱ひげ図を使い続けたい場合は、いくつかのオプションを以下に示します。基本的な問題を示すいくつかのデータをRで作成しました。

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

不満足な箱ひげ図

データの中央半分は、幅数mmの小さなストリップに縮小されます。同じ問題は、QQプロット、ストリップチャート、蜂の巣/蜂の群れプロット、バイオリンプロットなど、他の提案のほとんどを悩ませています。

今、いくつかの潜在的なソリューション:

1)変換

対数または逆数が読み取り可能な箱ひげ図を生成する場合、それらは非常に良いアイデアである可能性があり、元のスケールを軸上に表示することができます。

大きな問題は、「直感的な」変換がない場合があることです。クォンタイル自体は単調な変換で十分に変換されますが、フェンスはそうではないという小さな問題があります。変換したデータをボックスプロットするだけの場合(ここで行ったように)、ウィスカーは元のプロットとは異なるx値になります。

変換された値の箱ひげ図

ここでは、逆双曲線正弦(asinh)を使用しました。それは尾のログのようなものであり、ゼロに近い線形に似ていますが、一般的には直感的な変換を見つけることはないため、一般的にログのようなかなり直感的な変換が明らかでない限り、このオプションはお勧めしません。そのためのコード:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2)スケールブレーク-極端な外れ値を取り、中央よりもはるかに圧縮されたスケールで両端で狭いウィンドウに圧縮します。これを行う場合は、スケール全体で完全に休憩することを強くお勧めします。

スケール区切りのある箱ひげ図

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3)極端な外れ値のトリミング(これを非常に明確に示すことなく通常はアドバイスしませんが、次のプロットのように見えます。両端に「<5」と「2>」はありません)

4)極端に外れた「矢印」と呼ぶもの-トリミングに似ていますが、トリミングされた値のカウントが両端に示されています

極値の数と、極値を指す矢印を含む箱ひげ図

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

これを書いてくれてありがとう!これはまさに私が期待していた種類の答えです。ここで、Rを使用してこれらのプロットを実装する方法を見つける必要があります:)
static_rtti

1
現在、いくつかのコードがあります。3)のコードは提供しませんでした。これは4)の単純なバージョンだからです。あなたはそこから線を切り取ることでそれを得ることができるはずです。
Glen_b-モニカを復活

ちなみに、これらのアイデアのほとんどは、ここで提案されている他の優れたディスプレイ-ジッターストリップチャート、ビースウォーム/ビーハイブプロット、バイオリンプロットなどでも機能します。
Glen_b-モニカを復活

再度、感謝します。この答えは、かなりの数の人に役立つと確信しています。
static_rtti

私は同意します、これは私の答えがしたよりもはるかに良い質問に対処します。良いもの。
TooTone

4

個人的には、少なくともデータの感触をつかむために、ジッタのあるストリッププロットを使用するのが好きです。以下のプロットは、Rの格子を使用しています(ggplot2ではありません)。これらのプロットは、解釈しやすいため気に入っています。あなたが言うように、これの1つの理由は、変換がないことです。

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

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

beeswarmのパッケージは、(提案のため@Januaryのおかげで)大きなstripplotに代わるものを提供しています。

beeswarm(df2$values ~ df2$ind)

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

データについては、ほぼ正規分布しているので、別の試みとしてqqplot、この場合はqqnormがあります。

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

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


2
私もストリッププロットが好きですが、問題は明確に裾の重い分布をどうするかです。
ニックコックス

1
ポイントは、たとえばqqnormを使用するアドバイスが質問と一致しないことです。先ほど述べたように、他の種類の分位数-分位数プロットは、非常に良いアイデアになる可能性があります。
ニックコックス

1
Rからのストリッププロットよりも優れているのは、beeswarmパッケージからのプロットです。

1
@Januaryうん、それはかなりクールです、私はそれを私の答えに加えています(異議があるならそう言ってください)。
TooTone

1
私の答えはstats.stackexchange.com/questions/13086に投稿されており、この質問の(それほど重要ではない)バージョンと考えています。「箱ひげ図アルゴリズムを変更しないで、代わりにデータを再表現してください」と要約しました。この質問の「適応」によって示唆される問題は、変数の有用な再​​表現を見つけるための探索的データ分析の標準的な手法によって対処されます。
whuber

2

あなたは箱ひげ図に固執することができます。ウィスカーを定義するにはさまざまな可能性があります。テールの厚さ、サンプル数、および外れ値に対する許容度に応じて、2つの多かれ少なかれ極端な変位値を選択できます。あなたの問題を考えると、IQRで定義されたウィスカを避けます。
もちろん、データを変換したい場合を除き、この場合は理解が難しくなります。


1
最後の文は、コメントなしで渡すには修飾されていません。変換は万能薬ではありませんが、非常に歪んだデータを変換しなくても理解しやすくなりません。データがすべて正の場合、少なくともルート、対数、または相互スケールを使用してみてください。本当に役に立たない場合は、やり直してください。
ニックコックス

歪んだデータを理解する上でどんな困難に言及していますか?IQR依存のウィスカーをお持ちですか?テールが薄い場合でも問題です。そして、歪度とは無関係に、太い尾について話しているのではないでしょうか?尾を明るくする変換は確かにより規則的な箱ひげ図を与えますが、解釈レイヤーを追加し、快適さのために理解を交換します。しかし、彼が好きなら、それを機能と呼ぶことができます。
クオーツ

2
変換は多くの場合に役立ちます。それが私の収益です。(特に)対数スケールで多くのものがより明確に見えることを学んでいない統計担当者は、そこにある最も古く最も効果的なトリックの1つを真剣に見逃しています。あなたはそれを否定しているようです。私はあなたを誤解してほしい。
ニックコックス

1
同意しません。私は常に非常に歪んだデータを変換しますが、私の経験では、これは美学の問題以上のものです。よく機能します。匿名の統計学者は、lognormalがnormalよりも正常であると少し前に書きました。彼/彼女は少しファセットされていましたが、そこにも重要な真実があります。(他の多くの分布は、より適切ではないかもしれません。)
ニックコックス

1
他の人に判断させるためにここでやめる必要があると思いますが、私の考えは変わっていません。変換は、たとえばstats.stackexchange.com/questions/13086/で可能性の1つとして説明されています。…アドバイスが適切でない理由を説明するために、そこに答えるかコメントすることをお勧めします。
ニックコックス

0

私は(そうでない場合は、それを「管理」とは反対に)この質問は理解データについてであると仮定し
たデータは、尾および/またはマルチモーダル重い場合、私は、これらの「層」を見つけ、ggplot2は目的のために非常に有用:geom_violingeom_jitter


3
バイオリンプロットおよび/またはジッターポイントが太い分布で役立つ理由を要約していただけますか?
chl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.