値をグラフとしてプロットしたら、双峰を観察することで二峰性分布を特定できることを理解していますが、プログラムでどのように見つけるのですか?(アルゴリズムを探しています。)
値をグラフとしてプロットしたら、双峰を観察することで二峰性分布を特定できることを理解していますが、プログラムでどのように見つけるのですか?(アルゴリズムを探しています。)
回答:
連続分布のモードを識別するには、データを平滑化またはビン化する必要があります。
通常、ビニングはあまりにも原始的です。結果は、多くの場合、ビンカットポイントを配置する場所によって異なります。
カーネルの平滑化(具体的には、カーネル密度推定の形式)は適切な選択です。多くのカーネル形状が可能ですが、通常、結果は形状にあまり依存しません。カーネルの帯域幅に依存します。したがって、人々は、特定されたモードの安定性をチェックするために、適応カーネルスムースを使用するか、固定帯域幅を変化させるカーネルスムージングのシーケンスを実行します。適応的または「最適」なスムーザーを使用することは魅力的ですが、これらのほとんど(すべて?)は、精度と平均精度のバランスをとるように設計されていることに注意してください。モードの位置の推定を最適化するように設計されていません。
実装に関する限り、カーネルスムーザーは、データに合わせて事前に定義された関数をローカルにシフトおよびスケーリングします。この基本関数が微分可能であることを条件に、ガウス関数は何度でも微分できるので良い選択です。そうすれば、その微分関数に置き換えて滑らかな微分係数を取得するだけです。次に、標準的なゼロ検出手順を適用して、重要なポイントを検出してテストするだけです。(Brentの方法はうまく機能します。)もちろん、2番目の導関数でも同じトリックを実行して、クリティカルポイントが極大値、つまりモードであるかどうかをすばやくテストできます。
この問題を扱うSilvermanの有名な論文があります。カーネル密度推定を採用しています。見る
BW Silverman、カーネル密度推定を使用してマルチモダリティを調査、J。Royal Stat。Soc。B、vol。43、いいえ。1、1981、pp。97-99。
論文の表にはいくつかの誤りがあることに注意してください。これは出発点にすぎませんが、かなり良いものです。それはあなたが最も探しているものである場合には、使用するために明確に定義されたアルゴリズムを提供します。Google Scholarで、より「現代的な」アプローチについて引用している論文をご覧ください。
パーティーに遅刻しましたが、マルチモーダルであるかどうかだけに興味がある場合、つまりモードの数に興味がない場合は、diptestを見てください。
でR
、パッケージと呼ばれていますdiptest
。
wikiの定義は私を少し混乱させます。モードが1つだけの連続データセットの確率はゼロです。二峰性ディストルビトンをプログラムする簡単な方法は、中心が異なる2つの正規分布を使用することです。これにより、2つのピークまたはwikiがモードと呼ぶものが作成されます。実際には、ほとんどすべての2つの分布を使用できますが、2つのランダムなデータ分布を結合した後、データセットがどのように形成されたかを見つけることは、より難しい統計的機会の1つです。