分布がマルチモーダルかどうかをテストするにはどうすればよいですか?


21

データのヒストグラムをプロットすると、2つのピークがあります。

ヒストグラム

それは潜在的なマルチモーダル分布を意味しますか?dip.testR(library(diptest))を実行しましたが、出力は次のとおりです。

D = 0.0275, p-value = 0.7913

私のデータにはマルチモーダル分布があると結論付けることができますか?

データ

10346 13698 13894 19854 28066 26620 27066 16658  9221 13578 11483 10390 11126 13487 
15851 16116 24102 30892 25081 14067 10433 15591  8639 10345 10639 15796 14507 21289 
25444 26149 23612 19671 12447 13535 10667 11255  8442 11546 15958 21058 28088 23827 
30707 19653 12791 13463 11465 12326 12277 12769 18341 19140 24590 28277 22694 15489 
11070 11002 11579  9834  9364 15128 15147 18499 25134 32116 24475 21952 10272 15404 
13079 10633 10761 13714 16073 23335 29822 26800 31489 19780 12238 15318  9646 11786 
10906 13056 17599 22524 25057 28809 27880 19912 12319 18240 11934 10290 11304 16092 
15911 24671 31081 27716 25388 22665 10603 14409 10736  9651 12533 17546 16863 23598 
25867 31774 24216 20448 12548 15129 11687 11581

3
ヒストグラムでより多くのビン使用します。約2倍をお勧めします
Glen_b -Reinstate Monica

1
この回答には9つの異なるテストが記載されていますが、そのうちのいくつかは状況に関連している可能性があります。
Glen_b -Reinstateモニカ

1
このペーパーは、まだ見たことがない場合に役立ちます(これフォローアップ
-Eoin

回答:


15

@NickCoxは興味深い戦略(+1)を提示しました。しかし、@ whuberが指摘している懸念のために、本質的にはより探索的であると考えるかもしれません。

別の戦略を提案させてください。ガウスの有限混合モデルに適合させることができます。これは、データが1つ以上の真の法線から引き出されるという非常に強い仮定を立てていることに注意してください。@whuberと@NickCoxの両方がコメントで指摘しているように、これらのデータの実質的な解釈はなく、この仮定を裏付ける確立された理論によって裏付けられていないため、この戦略も探索的であると考えるべきです。

まず、@ Glen_bの提案に従い、2倍のビンを使用してデータを見てみましょう。

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

まだ2つのモードがあります。どちらかといえば、彼らはここでより明確に通過します。(カーネル密度線は同一である必要がありますが、ビンの数が多いため、より広がっているように見えます。)

次に、ガウスの有限混合モデルを当てはめます。ではRMclustパッケージを使用してこれを行うことができます。

library(mclust)
x.gmm = Mclust(x)
summary(x.gmm)
# ----------------------------------------------------
# Gaussian finite mixture model fitted by EM algorithm 
# ----------------------------------------------------
#   
# Mclust V (univariate, unequal variance) model with 2 components:
#   
#   log.likelihood   n df       BIC       ICL
#        -1200.874 120  5 -2425.686 -2442.719
# 
# Clustering table:
#  1  2 
# 68 52 

2つの通常のコンポーネントがBICを最適化します。比較のために、1つのコンポーネントを強制的に適合させ、尤度比テストを実行できます。

x.gmm.1 = Mclust(x, G=1)
logLik(x.gmm.1)
# 'log Lik.' -1226.241 (df=2)
logLik(x.gmm)-logLik(x.gmm.1)
# 'log Lik.' 25.36657 (df=5)
1-pchisq(25.36657, df=3)  # [1] 1.294187e-05

これは、単一の真の正規分布からのデータであれば、ユニモーダルから遠く離れたデータを見つける可能性は極めて低いことを示唆しています。

一部の人々は、ここでパラメトリックテストを使用することに不安を感じています(ただし、仮定が当てはまる場合、私は問題を知りません)。非常に広く適用可能な手法の1つは、Parametric Bootstrap Cross-fitting Methodを使用することです(ここでアルゴリズムを説明します)。これらのデータに適用してみることができます:

x.gmm$parameters
# $mean
# 12346.98 23322.06 
# $variance$sigmasq
# [1]  4514863 24582180
x.gmm.1$parameters
# $mean
# [1] 17520.91
# $variance$sigmasq
# [1] 43989870

set.seed(7809)
B = 10000;    x2.d = vector(length=B);    x1.d = vector(length=B)
for(i in 1:B){
  x2      = c(rnorm(68, mean=12346.98, sd=sqrt( 4514863)), 
              rnorm(52, mean=23322.06, sd=sqrt(24582180)) )
  x1      = rnorm( 120, mean=17520.91, sd=sqrt(43989870))
  x2.d[i] = Mclust(x2, G=2)$loglik - Mclust(x2, G=1)$loglik
  x1.d[i] = Mclust(x1, G=2)$loglik - Mclust(x1, G=1)$loglik
}
x2.d = sort(x2.d);  x1.d = sort(x1.d)
summary(x1.d)
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# -0.29070 -0.02124  0.41460  0.88760  1.36700 14.01000 
summary(x2.d)
#   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#  9.006  23.770  27.500  27.760  31.350  53.500 

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

要約統計、およびサンプリング分布のカーネル密度プロットは、いくつかの興味深い機能を示しています。単一コンポーネントモデルの対数尤度は、真のデータ生成プロセスに単一のコンポーネントしかない場合でも、2コンポーネントフィットの対数尤度よりも高いことはめったにありません。データを適合させる能力が異なるモデルを比較するという考えは、PBCMの背後にある動機の1つです。2つのサンプリング分布はほとんど重なりません。の0.35%のみx2.dが最大値よりも小さいx1.d値。対数尤度の差が9.7を超える場合に2コンポーネントモデルを選択した場合、1コンポーネントモデル.01%と2コンポーネントモデル.02%を誤って選択することになります。これらは非常に識別可能です。一方、1つのコンポーネントモデルを帰無仮説として使用することを選択した場合、観測結果は十分に小さく、10,000回の反復で経験的サンプリング分布に現れません。3の規則(ここを参照)を使用して、p値の上限を設定できます。つまり、p値が.0003未満であると推定されます。つまり、これは非常に重要です。

p<.000001p<.001)、および基礎となるコンポーネント(存在する場合)も、完全に正常であるとは限りません。データが正規分布ではなく正に歪んだ分布から得られることが合理的であると判断した場合、このレベルのバイモダリティは通常の変動範囲内にある可能性があります。


1
このアプローチの問題は、ガウス混合を比較する代替案があまり合理的ではないことです。より合理的なものは、分布がガンマなどのある種の右に歪んだ分布であることです。混合物は、単一のガウス分布がそれよりもはるかに「有意に」よく歪んだデータセットに適合することはほぼ当然です。
whuber

そうです、@ whuber。その点を明確にしようとしました。ガンマFMMを実行する方法がわかりませんが、それは良いでしょう。
GUNG -復活モニカ

1
これは探索的であるため、1つの考えは、元の分布を対称に変換すること(おそらく、数ボックスのデータからロバストに推定されるオフセットBox-Cox変換)を試み、アプローチを再試行することです。もちろん、「重要性」自体については説明しませんが、可能性の分析はまだ明らかになる可能性があります。
whuber

@whuber、私はそれをやったが、私はそれをパスでだけ言及した。(最適なBox-Cox変換は逆平方根です。)同じ結果が得られますが、p値は(まだ非常に高いですが)それほど重要ではありません。
GUNG -復活モニカ

3
生成プロセスであると思われるものをモデル化するべきだという考えはとても気に入っています。私の問題は、ガウス混合がうまく機能していても、実質的な解釈があるはずだと感じることです。OPがデータの詳細についても教えてくれた場合、より良い推測が可能かもしれません。
ニックコックス

10

ニックの答えとコメント@でアイデアにフォローアップ、あなたがすることをどのように広い帯域幅のニーズ見ることができるだけで二次モードを平ら:

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

このカーネル密度の推定値を近接ヌル(データに最も近いが、それが単峰性母集団からのサンプルであるという帰無仮説と一致する分布)とし、それからシミュレートします。シミュレートされたサンプルでは、​​2次モードはそれほど明確に見えないことが多く、平坦化するために帯域幅をそれほど広くする必要はありません。

<code>ここに画像の説明を入力</ code>

シルバー(1981)に与えられたテストにこのアプローチリードを定式化、「モダリティを調査するために、カーネル密度推定値を使用」、JRSS B43、1シュバイガー&Holzmannのsilvermantestパッケージの実装このテスト、およびまた、ホール&ニューヨーク(で説明したキャリブレーション手順2001)、「シルバーマンのマルチモダリティの検定の較正について」、Statistica Sinica11、p 515、漸近的保守主義を調整します。単峰性の帰無仮説でデータの検定を実行すると、p値はキャリブレーションなしで0.08、キャリブレーションありで0.02になります。ディップテストがなぜ異なるのかを推測するのに十分な知識がありません。

Rコード:

  # kernel density estimate for x using Sheather-Jones method to estimate b/w:
density(x, kernel="gaussian", bw="SJ") -> dens.SJ
  # tweak b/w until mode just disappears:
density(x, kernel="gaussian", bw=3160) -> prox.null
  # fill matrix with simulated samples from the proximal null:
x.sim <- matrix(NA, nrow=length(x), ncol=10)
for (i in 1:10){
  x.sim[ ,i] <- rnorm(length(x), sample(x, size=length(x), replace=T), prox.null$bw)
}
  # perform Silverman test without Hall-York calibration:
require(silvermantest)
silverman.test(x, k=1, M=10000, adjust=F)
  # perform Silverman test with Hall-York calibration:
silverman.test(x, k=1, M=10000, adjust=T)

+1。面白い!ここで使用されているカーネルは何ですか?私がぼんやりと思い出すように、ガウスカーネルをこのアプローチの正式な変形に使用する必要がある微妙な理由があります。
ニックコックス

@Nick:ガウスカーネル。しかし、そのための説得力のある理由があるかどうかは思い出せません。シミュレートされた各サンプルは再スケーリングされ、元のテストが持っていた保守的なバイアスの修正があります-Storeyと呼ばれる誰かによって解決されたと思います。
Scortchi -復活モニカ

@NickCox:すみません、Storyではありません。
Scortchi -復活モニカ

@Scortchi、テキストとコードを少し調整しました。気にしないでください。+1。また、恐ろしい右矢印代入演算子を使用しますか?!ああ人間...
GUNG -復活モニカ

2
実際には良くも悪くもありませんが、プログラミングの慣習では、変数を左側に記述し、変数に割り当てられているものを右側に配置します。多くの人が->;に驚いています。私は困惑しています。
GUNG -復活モニカ

7

心配することは次のとおりです。

  1. データセットのサイズ。それは小さくもなく、大きくもない。

  2. ヒストグラムの原点とビンの幅に依存するもの。明らかな選択肢が1つしかないため、あなた(および私たち)は感度について何も知りません。

  3. カーネルのタイプと幅、および他の選択が密度推定で行われるため、表示内容の依存性。明らかな選択肢が1つしかないため、あなた(および私たち)は感度について何も知りません。

他の場所では、実質的な解釈と、同じサイズの他のデータセットで同じモダリティを識別する能力によって、モードの信頼性がサポートされる(ただし確立されない)ことを暫定的に提案しました。(大きければ大きいほど良い...)

これらのいずれについてもここではコメントできません。再現性に関する1つの小さな方法は、同じサイズのブートストラップサンプルで得られるものを比較することです。Stataを使用したトークン実験の結果を次に示しますが、表示される内容はStataのデフォルトに任意に制限されています。元のデータと、同じデータからの24個のブートストラップサンプルの密度推定値を取得しました。

その兆候(これ以上でもそれ以下でもない)は、経験豊富なアナリストがグラフから任意の方法で推測するものだと思います。左手モードは非常に再現性が高く、右手モードは明らかに脆弱です。

これには必然性があることに注意してください。右側のモードに近いほどデータが少ないため、ブートストラップのサンプルに常に再表示されるとは限りません。しかし、これも重要なポイントです。

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

上記のポイント3.は変更されないことに注意してください。しかし、結果はユニモーダルとバイモーダルの間のどこかにあります。

興味がある人のために、これはコードです:

clear 
set scheme s1color 
set seed 2803 

mat data = (10346, 13698, 13894, 19854, 28066, 26620, 27066, 16658, 9221, 13578, 11483, 10390, 11126, 13487, 15851, 16116, 24102, 30892, 25081, 14067, 10433, 15591, 8639, 10345, 10639, 15796, 14507, 21289, 25444, 26149, 23612, 19671, 12447, 13535, 10667, 11255, 8442, 11546, 15958, 21058, 28088, 23827, 30707, 19653, 12791, 13463, 11465, 12326, 12277, 12769, 18341, 19140, 24590, 28277, 22694, 15489, 11070, 11002, 11579, 9834, 9364, 15128, 15147, 18499, 25134, 32116, 24475, 21952, 10272, 15404, 13079, 10633, 10761, 13714, 16073, 23335, 29822, 26800, 31489, 19780, 12238, 15318, 9646, 11786, 10906, 13056, 17599, 22524, 25057, 28809, 27880, 19912, 12319, 18240, 11934, 10290, 11304, 16092, 15911, 24671, 31081, 27716, 25388, 22665, 10603, 14409, 10736, 9651, 12533, 17546, 16863, 23598, 25867, 31774, 24216, 20448, 12548, 15129, 11687, 11581)
set obs `=colsof(data)' 
gen data = data[1,_n] 

gen index = . 

quietly forval j = 1/24 { 
    replace index = ceil(120 * runiform()) 
    gen data`j' = data[index]
    kdensity data`j' , nograph at(data) gen(xx`j' d`j') 
} 

kdensity data, nograph at(data) gen(xx d) 

local xstuff xtitle(data/1000) xla(10000 "10" 20000 "20" 30000 "30") sort 
local ystuff ysc(r(0 .0001)) yla(none) `ystuff'   

local i = 1 
local colour "orange" 
foreach v of var d d? d?? { 
    line `v' data, lc(`colour') `xstuff'  `ystuff' name(g`i', replace) 
    local colour "gs8" 
    local G `G' g`i' 
    local ++i 
} 

graph combine `G' 

+1ブートストラップアプローチが好きです。プロットの配列は、誰もがデータをよりよく理解するのに役立ちます。これらのプロットは、Stataが帯域幅をどのように推定するかに敏感になるのではないかと思っています。その推定はおそらく単峰性の仮定に基づいているため、テストが不十分な結果になる可能性があり、帯域幅が比較的広くなると思われます。わずかに狭い帯域幅の推定値でも、すべてのブートストラップサンプルで2番目のモードがより顕著になる可能性があります。
whuber

2
@whuberありがとう!いつものように、あなたは私たちが心配する必要がある弱点に間違いなく集中します、そして私は同意します。カーネル帯域幅が増加すると、単峰性の出現は避けられない傾向があります。逆に、帯域幅が狭い場合は、再現性のない、または些細なスプリアスモードを示していることがよくあります。トレードオフは本当にデリケートです。このアプローチの主なメリットは、「揺れたら複製できるか」というレトリックだと思います。私はしばしば、ソフトウェアユーザーが反射せずにデフォルトの結果をコピーしたいと思っていることを心配しています。
ニックコックス

2
帯域幅を徐々に変更し、帯域幅の変化に応じてモードの出現と消失を追跡することに基づいて、この問題に対する体系的なアプローチがあります。本質的に、信頼できるモードは持続し、信頼できないモードは持続しません。これはかわいいアプローチですが、スペードが実行するときにトンネルコンストラクターを起動することもあります。たとえば、ヒストグラムの選択肢をいじって、セカンダリモードがすぐに消える(または移動する)場合は、信じないでください。
ニックコックス

2

LPノンパラメトリックモードの識別

LPノンパラメトリックモードの識別(アルゴリズムの名前LPMode、論文のrefを以下に示します)

MaxEntモード[プロット内の赤色の三角形]:12783.36および24654.28。

L2モード[プロットの緑色の三角形]:13054.70および24111.61。

モーダル形状、特にかなりの歪度を示す2番目の形状(ここで失敗する可能性が高い従来のガウス混合モデル)に注目してください。

Mukhopadhyay、S.(2016)大規模モード同定とデータ駆動型科学。 https://arxiv.org/abs/1509.06428


1
これらの方法を紹介および説明するためのコンテキストを詳しく説明してください。論文へのリンクがあると便利ですが、特にリンクが機能しなくなった場合は、ここでの回答が自己完結型であることが望ましいです。
GUNG -復活モニカ

コンテキストは元の質問です:マルチモダリティはありますか?もしそうなら位置。また、新しい方法の関連性は、ノンパラメトリックな方法でのバンプハンティングがハードモデリングの問題であるという事実に基づいています。
ディープムハージー

@gungは、答えを広げるよう求めています。たとえば、結果は、公開バージョンのない論文で説明されている方法からのものです。
ニックコックス

2
いいえ、「LPノンパラメトリックモード識別」とは何ですか?「MaxEnt」とは何ですか?等いくつかの文章で、これはどのように機能しますか?なぜ/いつ他の方法よりも望ましいでしょうか?その他この方法を追求したい。
GUNG -復活モニカ

2
@DeepMukherjee、投稿の論文全体を書き直す必要はありません。それが何であるか、そしてそれがどのように機能するかを示すいくつかの文を追加するだけです。
GUNG -復活モニカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.