ヒストグラムビニングに関するDoaneの式


9

ヒストグラムに使用するビンの最適な数を推定するために、さまざまなアルゴリズムを実装しています。私が実装しているもののほとんどは、Wikipediaの「ヒストグラム」ページの「ビンの数と幅」*で説明されています。

Doaneの式の問題に悩まされています。

1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))

どこnのデータサイズがあります。

問題は、尖度が負の場合、およびn >> 1の引数logが負になるためです。

*(このページは投稿されてから変更されています。リンクは、投稿時のページを指すように編集されています)


1
その数式が尖度または過剰尖度を使用するかどうかを知っていますか(つまり、Normal distは4または0です)?
ピーターフロム-モニカの回復

@PeterFlom:元の論文(amstat.tandfonline.com/doi/pdf/10.1080/00031305.1976.10479172)では、尖度は歪度として定義されていますが、私は専門家ではありません。オリジナルの論文もウィキペディアの公式とはかなり異なります
Ruggero Turra

1
えっ、何?尖度は歪度として定義されていますか?それは意味がありません。彼らは非常に異なっています。論文にアクセスできませんが、どこかで何かがめちゃくちゃになっているようです。
ピーターフロム-モニカの回復

@PeterFlom正規分布は、3の尖度ない4.必要があります
Glen_b -Reinstateモニカ

@PeterFlom私は歪度対尖度の問題を調査してきました-私の回答の「編集2」を参照してください。
Glen_b-2013

回答:


11

ウィキペディアのページを調査するにつれ、この回答は大幅に変更されました。私は答えをそのまま残しましたが、追加されたので、現時点ではこれが理解の進展を形成しています。最後の部分は、最良の情報がある場所です。

短い答え:少なくとも3つの理由から、ウィキペディアのページとOPの式は同じであるように見えますが、これは単に間違っています。いくつかの問題を説明しているので、元のディスカッション(OPとWikipediaが正しいと想定していた)はそのままにしておきます。後でより良い議論が続きます。簡単なアドバイス:Doaneを忘れてください。使用する必要がある場合は、ウィキペディアが言っていることを使用してください(私はそれを修正しました)。


フォーミュラは過剰な尖度を参照する必要があると思います。その理由は、通常のデータの数式を非通常のデータに対応するように変更するため、変更されていないデータを通常の方法で再現することが期待されるためです。過剰な尖度を使用すると、それが起こります。

ただし、これにより、ログの項が大きなサンプルで負になる可能性があるという問題が発生します(実際には、非常に小さなでなる可能性があります)。負の過剰尖度では使用しないことをお勧めします(とにかく単峰性を超えて使用することはありません。マルチモーダルになると、過度の尖度のアイデアをモードに適用する必要があります)。過剰な尖度は0未満です)、適度なサンプルサイズは大きな問題にはなりません。N0n

どんな場合でも、意図したとおりに機能する場合でも、大きなサンプルサイズではビンが非常に少なくなることをお勧めします。

このペーパーを見つけることができます(通常のCVer Rob Hyndmanによる):

http://www.robjhyndman.com/papers/sturges.pdf

興味深い。スタージスの主張が間違っている場合、ドーンの式にも同じ問題があります...ロブが論文で明確に指摘しているように。

その論文(およびこの回答)では、彼はフリードマン・ディアコニスの規則に同意しています。この論文で彼はMatt Wandが述べたアプローチも指摘しています(彼はオンラインではないように見えるワーキングペーパーを参照していますが、アクセスできる場合は後続のペーパーを利用できます)。

http://www.jstor.org/discover/10.2307/2684697

[編集:実際にワーキングペーパーへのリンクは引用ページにあります ]

そのアプローチには、基礎となる密度を推定するためのほぼ最適な(平均積分二乗誤差、MISEの観点から)ビン幅を取得するために、特定の関数をほぼ推定することが含まれます。これらは正常に動作し、一般的にはスタージスやドゥアンよりも多くのビンを提供しますが、それでも通常は非常に良い最初の試みですが、まだより多くのビンを使用したい場合があります。

率直に言って、なぜWandのアプローチ(または少なくともFredman Diaconisルール)がどこでもデフォルトではない理由がわかりません。

Rは、少なくともビンの数のFreedman-Diaconis計算を提供します。

 nclass.FD(rnorm(100))
[1] 11
 nclass.FD(runif(100))
[1] 6
 nclass.FD(rt(100,1))
[1] 71

見る ?nclass.FD

個人的には、少なくとも最初の2つのケースではビンが少なすぎます。最適というよりは少しうるさいかもしれませんが、どちらも2倍にします。nが大きくなると、ほとんどの場合非常にうまくいくと思います。


編集2:

@PeterFlomがパズルを正しく表現している歪度と尖度の問題を調査することにしました。

私はリンクされたDoaneのペーパーwisoを見てみただけです(以前に読んだことはありますが、それはほぼ30年前のことです)。

Doaneの実際の式は、Ke=log2(1+g1σg1)

ここで、は追加されたビンの数、は3次モーメントの歪度です。[実際、Doaneは、かなり一般的な時間の使用法に従って、署名された(!)3次モーメントの歪度にを使用しています(この特に認識されていない表記法の乱用の原因はかなり古く、私は追求しません。幸いなことに、今ではそれほど頻繁に表示されることはありません)。G 1 Keg1b1

これで通常、 (nは十分過去になるまでその近似はかなり貧弱であるが100、ドーンは、最初の形式を使用して)σg1=6(n2)(n+1)(n+3)6n

しかし、誰かがそれを尖度に適応させようとしているようです(たとえば、このWikipediaを書いている時点では、たとえば、尖度の点でそれがあり、私は彼らがそれを作ったとは思わない)-しかし、明確な理由があります式が単に間違っていると信じる(使用される標準誤差は、上記で与えた歪度のseの最終的な近似であることに注意してください)。この尖度の使用はウィキペディア以外のいくつかの場所でも見たと思いますが、ドーンの論文には載っていないほか、スコットの論文にも、私が指摘しているハインドマンの論文にも、ワンドの論文にもありません。Doaneは近似していないため、どこかに由来しているように見えます(つまり、ウィキペディアのオリジナルではないと確信しています)σg1。最終的には何度かプレイされたようです。誰かがそれを追跡したかどうか興味があります。

Doaneの議論は喜んで尖度にまで拡張する必要があるように思えますが、正しい標準誤差を使用する必要があります。

しかし、DoaneはSturgesに依存しているため、Sturgesの主張には欠陥があるように思われるため、おそらく企業全体が破滅するでしょう。いずれにせよ、私はウィキペディアのヒストグラムトークページを編集してエラーを指摘しました。

---

編集3:ウィキペディアのページを修正しました(ただし、ゆがみの絶対値を取る自由を取りました。それ以外の場合、Doaneの元の式は、それが立っていたため、左ゆがみのある分布には使用できません-ビンの数については、歪度は重要ではありません)。厳密に言えば、数式を元の(間違った)形式で提示し、なぜそれが意味をなさないのかを説明する必要がありましたが、いくつかの理由で問題があると思います。説明。Doaneの本来の意図を実際にカバーしていると思います。いずれにせよ、それは元々あったナンセンスを大幅に改善したものです。(元の論文にアクセスできる人は誰でも、それ見てどのようにb1 が定義され、ウィキペディアで私の変更をチェックして、それが妥当であることを確認します-少なくとも3つの誤りがありました-尖度、標準エラー、およびログの誤ったベース、さらにDoane自身の小さなエラーです。)


どうもありがとうございました。ちなみに、「The American Statistician」でこんなエラーが出てびっくり。という表記を見たことがない。b1
Ruggero Turra 2013

そのスケールの小さなエラー(絶対値の欠如)は、ジャーナルではそれほど頻繁に発生するわけではありません。表記については、実際にはかなり一般的です。eg1eg2eg3 ...数十をポイントすることができます
Glen_b -Reinstate Monica

2

2番目と4番目のモーメントで定義された尖度測定値が負になることはありません(を参照log(1+...)>0

この数量はkurtosis()、Rライブラリのコマンドに実装されていますmoments。さらに、コマンドhist()を使用して、次のようにブレーク数を指定できます。

library(moments)

n <- 250
data <- rnorm(n)

# Sturges formula log_2(n) + 1
hist(data,breaks = "Sturges")

# Doane's formula    
Doane <- 1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))
hist(data,breaks = Doane)

コマンドで使用される式kurtosis()は単純mean((data - mean(data))^4)/mean((data - mean(data))^2)^2です。

ここで、「最良の」式を調べるには、基準が必要になります。これは統計文献でかなり議論されていると考えてください。


私が知らないのは、ドーネの公式における尖度の定義は何ですか
Ruggero Turra 2013

投稿したウィキペディアのエントリに、尖度の定義へのリンクがあります。ちなみに私が投稿したものと同じです。これは、4番目のサンプルの中心モーメントを2番目のサンプルの中心モーメントの2乗で割ったものとして推定されます。コードの編集をご覧ください。
Miles Davis

1
繰り返しますが、Doaneの公式が正しいかどうかはわかりません。たとえば、紙を見ると、彼がlogではなくlog2を使用している場合
Ruggero Turra 2013

まあ、それはあなたが投稿した「ドーンの公式」です¬¬。とにかく、これはのlog(n,2)代わりにを使用して簡単に修正できますlog(n)。しかし、ウィキペディアのエントリと他のソースは、それがそうであるべきであることを示していますlog
Miles Davis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.