ヒストグラムに基づくデータのおおよその分布の評価


111

ヒストグラムに基づいてデータが指数関数である(つまり、右に歪んでいる)かどうかを確認するとします。

データをグループ化またはビン化する方法に応じて、大幅に異なるヒストグラムを取得できます。

ヒストグラムのセットの1つは、データが指数関数的であるように思われます。別のセットでは、データは指数関数ではないように見えます。適切に定義されたヒストグラムから分布を決定するにはどうすればよいですか?


20
説明する問題は十分に確立されており、qqプロットや適合度テストなどの代替ツールを検討するため、ヒストグラムを忘れないでください。
whuberの

回答:


163

ヒストグラムを使用して形状を推測することの難しさ

ヒストグラムは多くの場合便利で便利な場合がありますが、誤解を招く可能性があります。それらの外観は、ビンの境界の位置が変わるとかなり変化する可能性があります。

この問題は以前から知られていましたが、おそらくそれほど広くはありませんでした-初級レベルの議論で言及されることはめったにありません(例外はありますが)。

*たとえば、Paul Rubin [1]は次のように述べています。「ヒストグラムのエンドポイントを変更すると、その外観が大きく変わる可能性があることはよく知られています」。。

これは、ヒストグラムを導入する際により広く議論されるべき問題だと思います。いくつかの例と議論をします。

データセットの単一のヒストグラムに依存することに注意する必要がある理由

次の4つのヒストグラムをご覧ください。

4つのヒストグラム

これは、非常に異なる4つのヒストグラムです。

次のデータを貼り付けた場合(ここではRを使用しています):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

次に、それらを自分で生成できます。

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

次に、このストリップチャートを見てください。

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4つのストリップチャート

(まだ明らかでない場合は、各セットからAnnieのデータを差し引くとどうなるかを確認してください。head(matrix(x-Annie,nrow=40))

データは毎回0.25だけ左にシフトされています。

しかし、ヒストグラムから得られる印象(右スキュー、均一、左スキュー、バイモーダル)はまったく異なっていました。私たちの印象は、最小値に対する最初のビン起源の位置によって完全に支配されていました。

したがって、ビンの開始位置を移動するだけで、「指数関数」と「非指数関数」だけでなく、「右スキュー」と「左スキュー」または「バイモーダル」と「ユニフォーム」も移動できます。


編集:binwidthを変えると、次のようなことが起こります:

スキューvsベル

これは、両方のケースで同じ 34の観測値であり、ブレークポイントが異なるだけです。1つはbinwidthで、もうつはbinwidthです。0.810.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

気の利いた、え?

はい、それらのデータはそれを行うために意図的に生成されました...しかし、教訓は明確です-ヒストグラムで見るものは、データの特に正確な印象ではないかもしれません。

私たちは何ができる?

ヒストグラムは広く使用されており、取得するのに便利な場合が多く、予想される場合もあります。このような問題を回避または軽減するために何ができますか?

ニック・コックスは、関連する質問へのコメントで指摘親指のルールは常にビン幅およびビン起源の変動に対してロバストな詳細が本物である可能性があることをする必要があります。そのように壊れやすい細部は偽りか些細なものになりそうです。

少なくとも、いくつかの異なるbinwidthsまたはbin-origins、またはできれば両方でヒストグラムを常に実行する必要があります。

または、帯域幅が広すぎないカーネル密度推定値を確認します。

ヒストグラムの意性を減らすもう1つのアプローチは、平均化されたシフトヒストグラムです

平均化されたシフトヒストグラム

(これは最新のデータセットの1つです)が、その努力に取り組む場合は、カーネル密度の推定値を使用することも考えられます。

ヒストグラムを使用している場合(問題を鋭く認識しているにもかかわらず使用します)、ほとんどの場合、通常のプログラムのデフォルトが提供する傾向があるよりもかなり多くのビンを使用することを好みます。 (そして、時々、起源)。印象が合理的に一貫している場合、この問題を抱えている可能性は低く、一貫していない場合は、カーネル密度推定、経験的CDF、QQプロットなどを注意深く試してください。同様。

ヒストグラムは時々誤解を招くかもしれませんが、箱ひげ図はそのような問題をさらに起こしやすいです。箱ひげ図では、「ビンをさらに使用する」と言うことすらできません。この投稿の4つの非常に異なるデータセットを参照してください。データセットの1つがかなりゆがんでいるとしても、すべて同一の対称的な箱ひげ図です。

[1]:Rubin、Paul(2014) "Histogram Abuse!"、
Blog post、OR in the OB world、2014年1月23日
link ... (代替リンク)


1
事実上、必要性のグラフはすべて、このようにデータを分類します。ビンは問題にならないほど十分に小さい(軸に沿った1ピクセルの幅)だけですか?
AJMansfield

1
@AJMansfieldこれは、「すべての分布が離散的である」と言うのに少し似ています-文字通り本当ですが、それは関連する問題をあいまいにします。ビン化された推定器のビンの典型的な数は、ピクセルの典型的な数よりもはるかに小さく...アンチエイリアスを使用するグラフィックスでは、「有効な」ピクセルの数が大きくなります(区別できる可能性があるため)ピクセル間の位置の違い)
-Glen_b

2
基本的な問題は、ヒストグラムがビンのサイズに大きく依存していることです。これを先験的に決定することは困難です。

29

カーネル密度またはログスプラインプロットは、ヒストグラムよりも優れたオプションです。これらの方法で設定できるオプションがまだいくつかありますが、それらはヒストグラムよりも気まぐれです。qqplotもあります。データが理論上の分布に十分に近いかどうかを確認するための便利なツールの詳細は次のとおりです。

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

アイデアの短いバージョン(詳細についてはまだ論文を読んでいます)は、null分布からデータを生成し、そのうちの1つがオリジナル/実データであり、残りが理論分布からシミュレートされる複数のプロットを作成することです。次に、元のデータを見なかった人(おそらく自分)にプロットを提示し、実際のデータを選択できるかどうかを確認します。実際のデータを識別できない場合、nullに対する証拠はありません。

vis.testRのTeachingDemosパッケージの関数は、このテストのフォームの実装に役立ちます。

以下に簡単な例を示します。以下のプロットの1つは10自由度の分布から生成された25点であり、他の8つは同じ平均と分散をもつ正規分布から生成されます。

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

vis.testそして、このプロットを作成し、機能は、彼らが異なっていると思うのプロットは、プロセス2回(合計3)を繰り返すかを選択するプロンプトが表示されます。


@ScottStafford、上記のプロットのコピーを追加しました。これはqqplotsを使用しますが、関数はヒストグラムを生成するか、密度プロットをプログラムできます。
グレッグスノー

28

累積分布プロット[ MATLABR ] –値の範囲以下のデータ値の割合をプロットする場所–は、経験的データの分布を見る最良の方法です。たとえば、Rで生成されたこのデータのECDFは次のとおりです。

アリス、ブライアン、クリス、ゾーイのECDFプロット

これは、次のR入力(上記のデータ)で生成できます。

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

ご覧のとおり、これらの4つの分布が単純に相互に翻訳されていることは視覚的に明らかです。一般に、データの経験的分布を視覚化するためのECDFの利点は次のとおりです。

  1. 累積以外の変換を行わずに実際に発生したデータをそのまま表示するため、データの処理方法により、ヒストグラムやカーネル密度の推定のように、誤って自分を欺く可能性はありません。
  2. 各ポイントはその前後のすべてのデータによってバッファリングされるため、データの分布を明確に視覚的に認識できます。これを非累積密度の視覚化と比較してください。各密度の精度は自然にバッファリングされないため、ビニング(ヒストグラム)または平滑化(KDE)によって推定する必要があります。
  3. データが良いパラメトリック分布に従うか、混合されるか、乱雑なノンパラメトリック分布に従うかに関係なく、それらは等しくうまく機能します。

唯一の秘trickは、ECDFを適切に読み取る方法を学習することです。浅い傾斜領域は疎分布を意味し、急な傾斜領域は密分布を意味します。しかし、それらを読んで慣れると、経験データの分布を見るための素晴らしいツールになります。


CDFを読むためのドキュメントはありますか?あなたのような私の累積分布関数の分布は、その後、我々は分類することができますどのように上に示したした場合など何か\ルックスに基づいてカイ二乗、正常または他のディストリビューションにそれをguesstimate
stats101

2

提案:通常、ヒストグラムはビンの中間点で発生したx軸データのみを割り当て、より正確な位置のx軸測定値を省略します。これが近似の導関数に与える影響は非常に大きくなる可能性があります。ささいな例を見てみましょう。ディラックデルタの古典的な導出を考えますが、有限スケール(半値全幅)の任意の中央値位置でコーシー分布から開始するように修正します。次に、スケールがゼロになると、制限がかかります。ヒストグラムの古典的な定義を使用し、ビンサイズを変更しない場合、位置もスケールもキャプチャしません。ただし、固定幅のビン内の中央位置を使用する場合、スケールがビン幅に比べて小さい場合、スケールではない場合は常に位置をキャプチャします。

データが歪んでいる値をフィッティングするために、固定されたビンの中点を使用すると、その領域の曲線セグメント全体がx軸シフトされます。これは上記の質問に関連すると思います。

ステップ1これ おかしい歴史はほとんど解決策です。を使用しましたn=8各ヒストグラムカテゴリで、各ビンの平均x軸値としてこれらを表示しました。各ヒストグラムビンの値は8であるため、分布はすべて均一に見え、それらを表示するには垂直にオフセットする必要がありました。表示は正しい答えではありませんが、情報がないわけではありません。グループ間にx軸のオフセットがあることを正しく示しています。また、実際の分布はわずかにU字型に見えます。どうして?平均値間の距離は中心でさらに離れており、エッジでより近いことに注意してください。したがって、これをより適切に表現するには、各ビン境界サンプルのサンプル全体と小数を借用して、x軸上のすべての平均ビン値を等距離にする必要があります。これを修正して適切に表示するには、少しプログラミングが必要です。しかし、それは、ヒストグラムを作成して、基礎となるデータを何らかの論理形式で実際に表示するための単なる方法かもしれません。データの範囲をカバーするビンの総数を変更すると、形状は変わりますが、アイデアは、任意にビンニングすることによって生じる問題の一部を解決することです。

ステップ2それでは、ビン間の借用を開始して、平均間隔をより均等にしようとしましょう。ここに画像の説明を入力してください

これで、ヒストグラムの形状が現れ始めています。ただし、ビン間で交換するサンプルの数は整数であるため、平均値の違いは完全ではありません。y軸の整数値の制限を削除し、等距離のx軸の平均値を作成するプロセスを完了するには、ビン間でサンプルの端数の共有を開始する必要があります。

ステップ3値と値の一部の共有。 histo3

ご覧のように、ビン境界で値の一部を共有すると、平均値間の距離の均一性が向上します。与えられたデータを使用して、小数点以下3桁までこれを行うことができました。ただし、データの粗さがそれを許可しないため、一般的に平均値間の距離を正確に等しくすることはできません。

ただし、カーネル密度推定を使用するなど、他のこともできます

ここで、Annieのデータは、0.1、0.2、0.4のガウス平滑化を使用した有界カーネル密度として表示されます。他のサブジェクトは、私がやったことと同じことをすれば、つまり各データセットの下限と上限を使用すれば、同じタイプの関数をシフトします。したがって、これはもはやヒストグラムではなくPDFであり、いぼのないヒストグラムと同じ役割を果たします。

カーネルスムーズ

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