Dağıtımımın multimodal olup olmadığını nasıl test edebilirim?


21

Verilerimin bir histogramını çizdiğimde, iki tepe noktası var:

histogram

Bu potansiyel bir çok modlu dağılım anlamına mı geliyor? Ben dip.testR ( library(diptest)) koştu ve çıktı:

D = 0.0275, p-value = 0.7913

Verilerimin çoklu mod dağılımına sahip olduğu sonucuna varabilir miyim?

VERİ

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
Histogramınızda daha fazla kutu kullanın . Ben yaklaşık iki kat daha fazla öneririz
Glen_b -Restate Monica

1
Bu yanıtta , bazıları sizin durumunuzla ilgili olabilecek dokuz farklı testten bahsedilmektedir .
Glen_b

1
Zaten görmediyseniz, bu makale sizin için yararlı olacaktır (ayrıca bu takip )
Eoin

Yanıtlar:


15

@NickCox ilginç bir strateji (+1) sundu. Ancak @whuber'ın işaret ettiği endişe nedeniyle doğada daha keşifçi olduğunu düşünebilirim .

Başka bir strateji önereyim: Gausslu bir sonlu karışım modeli sığdırabilirsiniz. Bunun, verilerinizin bir veya daha fazla gerçek normalden alındığını çok güçlü bir şekilde varsaydığını unutmayın. Hem @whuber hem de @NickCox, bu varsayımı desteklemek için, iyi kurulmuş bir teori tarafından desteklenen bu verilerin temel bir yorumu olmaksızın, yorumlarda belirtildiği gibi, bu strateji de keşif olarak kabul edilmelidir.

İlk olarak, @ Glen_b'in önerisini takip edelim ve verilerinize iki kat daha fazla kutu kullanarak bakalım:

resim açıklamasını buraya girin

Hala iki mod görüyoruz; bir şey varsa, burada daha açık bir şekilde ortaya çıkarlar. (Ayrıca, çekirdek yoğunluk çizgisinin aynı olması gerektiğini, ancak çok sayıda bölmeden dolayı daha fazla yayıldığını unutmayın.)

Şimdi bir Gauss sonlu karışım modelini yerleştirelim. İçinde R, bunu Mclustyapmak için paketi kullanabilirsiniz :

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 

İki normal bileşen BIC'yi optimize eder. Karşılaştırma için, tek bir bileşen uyumunu zorlayabilir ve bir olasılık oranı testi gerçekleştirebiliriz:

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

Bu, tek bir gerçek normal dağılımdan geldiyse, sizinkinden çok uzaktaki verileri bulmanızın çok olası olmadığını gösterir.

Bazı insanlar burada bir parametrik test kullanmaktan rahatsız olmazlar (varsayımlar geçerliyse, herhangi bir sorun bilmiyorum). Çok geniş çapta uygulanabilir bir teknik Parametrik Bootstrap Çapraz Sığdırma Yöntemini kullanmaktır ( burada algoritmayı açıklarım ). Bu verilere uygulamayı deneyebiliriz:

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 

resim açıklamasını buraya girin

Özet istatistikler ve örnekleme dağılımları için çekirdek yoğunluğu grafikleri birkaç ilginç özellik gösterir. Tek bileşenli model için günlük olasılığı, gerçek veri oluşturma işlemi sadece tek bir bileşene sahip olduğunda ve daha büyük olduğunda, miktar önemsiz olduğunda bile, iki bileşenden daha nadirdir. Verilere uyma yeteneklerinde farklı olan modelleri karşılaştırma fikri, PBCM'nin arkasındaki motivasyonlardan biridir. İki örnekleme dağılımı neredeyse hiç örtüşmüyor; sadece% 35'i x2.dmaksimumdan daha azx1.ddeğer. Günlük olasılığındaki fark> 9.7 ise iki bileşenli bir model seçtiyseniz, tek bileşenli model .01% ve iki bileşenli model .02% 'sini yanlış seçersiniz. Bunlar son derece ayırt edilebilir. Öte yandan, tek bileşenli modeli sıfır hipotezi olarak kullanmayı seçtiyseniz, gözlemlediğiniz sonuç 10.000 yinelemede ampirik örnekleme dağılımında görünmeyecek kadar küçüktür. P-değerine bir üst sınır yerleştirmek için 3 kuralını ( buraya bakın ) kullanabiliriz, yani p-değerinizin .0003'ten az olduğunu tahmin ediyoruz. Yani, bu çok önemlidir.

p<0,000001p<.001) ve bunların altında yatan bileşenler varsa, bunların mükemmel şekilde normal olduğu garanti edilmez. Verilerinizin normalden ziyade olumlu eğimli bir dağıtımdan gelebileceğini makul bulursanız, bu bimodalite seviyesi, tipik bir varyasyon aralığı içinde olabilir, bu daldırma testinin söylediğinden şüpheleniyorum.


1
Bu yaklaşımla ilgili sorun, bir Gauss karışımını karşılaştırdığınız alternatifin çok makul olmamasıdır. Daha makul olanı, dağılımın Gamma gibi bir çeşit sağ eğimli olması olabilir. Bir karışımın hemen hemen her çarpık veri kümesine, tek bir Gaussian'ın sığacağından "önemli ölçüde" daha uygun olacağı neredeyse verilmiştir.
whuber

Haklısın @whuber. Bu noktayı açıkça belirtmeye çalıştım. Bir Gamma FMM'nin nasıl yapılacağından emin değilim, ama bu daha iyi olurdu.
gung - Monica'yı eski

1
Bu keşifsel olduğu için, bir düşünce orijinal dağılımı simetriye dönüştürmeye çalışmaktır (belki de verilerin birkaç kantilinden sağlam bir şekilde tahmin edilen bir ofset Box-Cox dönüşümü ile) ve yaklaşımınızı tekrar denemek olacaktır. Tabii ki "önem" hakkında kendi başınıza konuşmazsınız, ancak olasılığın analizi hala açıklayıcı olabilir.
whuber

@whuber, bunu yaptım, ama sadece geçerken bahsettim. (En uygun Box-Cox dönüşümü ters kare köküdür.) Aynı sonucu elde edersiniz, ancak p değerleri (hala yüksek, ancak) daha az önemlidir.
gung - Monica'yı eski

3
Üretim süreci olduğunu düşündüğünüzü modellemeniz gerektiği fikrinden çok hoşlanıyorum. Benim sorunum, Gauss karışımları iyi çalışsa bile, önemli bir yorum olması gerektiğini hissediyorum. OP bize verilerin ne olduğu konusunda daha fazla bilgi verirse, daha iyi tahminler yapmak mümkün olabilir.
Nick Cox

10

@ Nick'in cevabı ve yorumlarındaki fikirleri takip ederek, bant genişliğinin sadece ikincil modu düzleştirmek için ne kadar geniş olması gerektiğini görebilirsiniz :

resim açıklamasını buraya girin

Bu çekirdek yoğunluğu tahminini proksimal null olarak kabul edin - verilere en yakın dağılım, ancak yine de tek modlu olmayan bir popülasyondan alınan bir örnek olan null hipotezi ile tutarlı - ve ondan simüle edin. Simüle edilmiş örneklerde ikincil mod genellikle çok farklı görünmez ve bant genişliğini düzleştirmek için genişletmenize gerek yoktur.

<code> buraya resim açıklamasını girin </code>

Bu yaklaşımı resmileştirmek Silverman (1981), "Modaliteyi araştırmak için çekirdek yoğunluğu tahminlerini kullanma", JRSS B , 43 , 1. Schwaiger & Holzmann'ın silvermantestpaketi bu testi ve ayrıca Hall & York ( 2001), "Silverman'ın multimodalite testinin kalibrasyonu hakkında", Asisttotik muhafazakarlığı ayarlayan Statistica Sinica , 11 , s 515. Boş bir hipotez hipotezi ile verileriniz üzerinde test yapılması, kalibrasyon olmadan 0.08 ve kalibrasyon ile 0.02 p değerleri ile sonuçlanır. Neden farklı olabileceğini tahmin etmek için daldırma testine yeterince aşina değilim.

R kodu:

  # 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. İlginç! Burada hangi çekirdek kullanılıyor? Kısaca hatırladığım gibi, Gauss çekirdeklerinin bu yaklaşımın resmi varyantları için kullanılmasının ince nedenleri vardır.
Nick Cox

@Nick: Gauss çekirdeği, ama bunun zorlayıcı bir nedeni olup olmadığını hatırlayamıyorum. Simüle edilen her örnek yeniden ölçeklendirilir ve orijinal testin muhafazakar bir önyargı için bir düzeltme olduğunu düşünüyorum - Storey diye adlandırılan biri tarafından çalıştı.
Scortchi - Monica'yı eski durumuna döndürün

@ NickCox: Üzgünüm, Katlı değil.
Scortchi - Monica'yı eski durumuna döndürün

@Scortchi, metninizi ve kodunuzu biraz değiştirdim. Umarım umursamazsın. +1. Ayrıca, korkunç sağ ok atama operatörünü mü kullanıyorsunuz ?! Ah insanlık ...
gung - Monica'yı eski

2
Gerçekten daha iyi veya daha kötü değil, ama programlamadaki kural, değişkenlerinizi solda belirtmek ve onlara sağda atanan şeylere sahip olmaktır. Birçok insan korkutuyor ->; Sadece şaşkınım.
gung - Monica'yı eski

7

Endişe edilecek şeyler şunlardır:

  1. Veri kümesinin boyutu. Küçük değil, büyük değil.

  2. Gördüklerinizin histogram orijini ve kutu genişliğine bağımlılığı. Sadece tek bir seçim açıkken, siz (ve biz) hassasiyet konusunda hiçbir fikrimiz yok.

  3. Gördüklerinizin çekirdek türüne ve genişliğine ve yoğunluk tahmininde sizin için ne gibi seçimler yapıldığına bağımlılığı. Sadece tek bir seçim açıkken, siz (ve biz) hassasiyet konusunda hiçbir fikrimiz yok.

Başka yerlerde geçici olarak modların güvenilirliğinin, önemli bir yorum ve aynı boyuttaki diğer veri kümelerinde aynı modaliteyi ayırt etme yeteneği ile desteklendiğini (ancak belirlenmediğini) önerdim. (Daha büyük de iyidir ....)

Burada ikisinden de yorum yapamayız. Tekrarlanabilirlik ile ilgili küçük bir tutamak, aldığınız şeyi aynı boyuttaki bootstrap örnekleri ile karşılaştırmaktır. İşte Stata'yı kullanarak bir token deneyinin sonuçları, ancak gördüğünüz şey keyfi olarak Stata'nın varsayılanları ile sınırlıdır, bunlar kendilerini havadan koparılmış olarak belgelenir . Orijinal veriler ve 24 bootstrap örneği için yoğunluk tahminleri aldım.

Endikasyon (daha fazla, daha az değil) deneyimli analistlerin grafiğinizden herhangi bir şekilde tahmin edeceğini düşünüyorum. Sol el modu oldukça tekrarlanabilir ve sağ el belirgin şekilde daha kırılgandır.

Bununla ilgili bir kaçınılmazlık olduğuna dikkat edin: sağ modun yakınında daha az veri olduğundan, her zaman bir önyükleme örneğinde yeniden görünmez. Ama bu da kilit nokta.

resim açıklamasını buraya girin

Yukarıdaki 3. noktaya değinilmediğini unutmayın. Ancak sonuçlar unimodal ve bimodal arasında bir yerde.

İlgilenenler için bu kod:

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 Önyükleme yaklaşımınızı seviyorum: grafik dizisi herkesin verileri daha iyi anlamasına yardımcı olur. Bu grafiklerin Stata'nın bant genişliğini nasıl tahmin ettiğine duyarlı olup olmadığını merak ediyorum. Tahmininin büyük olasılıkla nispeten geniş bir bant genişliğine yol açan tek modlu bir varsayımı temel aldığı için düşük güçlü bir testle sonuçlanabileceğinden şüpheleniyorum. Biraz daha dar bir bant genişliği tahmini bile ikinci modu tüm bootstrap örneklerinde daha belirgin hale getirebilir.
whuber

2
@whuber Teşekkürler! Her zaman olduğu gibi, endişelenmemiz gereken zayıflıklara tartışılmaz bir şekilde odaklanıyorsunuz ve kabul ediyorum. Çekirdek bant genişlikleri arttıkça, kararsızlığın ortaya çıkması kaçınılmaz olma eğilimindedir. Tersine, küçük bant genişlikleri genellikle tekrarlanamayan ve / veya önemsiz sahte modları gösterir. Takas gerçekten hassastır. Bence bu yaklaşımın asıl değeri "Kıpırdanırsak tekrarlanabilir mi?" Yazılım kullanıcılarının varsayılan sonuçları yansıtmadan kopyalama istekliliğinden sık sık endişe duyuyorum.
Nick Cox

2
Bant genişliğini aşamalı olarak değiştirmeye ve bant genişliği değiştikçe modların görünümünü ve kaybolmasını izlemeye dayanan bu soruna sistematik yaklaşımlar vardır. Özünde, güvenilir bir mod devam eder ve güvenilir olmayan bir mod devam etmez. Bu sevimli bir yaklaşım, ama bazen bir kürek yapacağı zaman bir tünel kurucu ateşlemek. Örneğin, histogram seçimlerini değiştirirseniz ve ikincil mod çok kolay bir şekilde kaybolursa (veya hareket ederse), buna inanmayın.
Nick Cox

2

LP Parametrik Olmayan Mod Tanımlaması

LP Parametrik Olmayan Mod Tanımlaması ( LPMode algoritmasının adı, makalenin referansı aşağıda verilmiştir)

MaxEnt Modları [ Çizimdeki kırmızı renk üçgenleri]: 12783.36 ve 24654.28.

L2 Modları [Çizimdeki yeşil renk üçgenleri]: 13054.70 ve 24111.61.

Modal şekilleri, özellikle kayda değer çarpıklığı gösteren ikincisini not etmek ilginçtir (Geleneksel Gauss Karışımı modeli burada başarısız olacaktır).

Mukhopadhyay, S. (2016) Büyük Ölçekli Mod Belirleme ve Veriye Dayalı Bilimler. https://arxiv.org/abs/1509.06428


1
Bu yöntemleri tanıtmak ve açıklamak için bir bağlam hazırlayabilir ve sunabilir misiniz? Makaleyle bağlantı kurmak güzel, ama cevaplarımızın kendi kendine yetmesini tercih ediyoruz, özellikle de bağlantı koparsa.
gung - Monica'yı eski

Bağlam asıl soru: Çok modelli mi? eğer öyleyse konumlar. ve yeni bir yöntemin önemi, yumru avının parametrik olmayan bir şekilde yapılması zor modelleme problemidir.
Deep Mukherjee

@gung sizden cevabınızı genişletmenizi istiyor. Örneğin, sonuç, genel sürümü olmayan bir makalede açıklanan yöntemden kaynaklanır.
Nick Cox

2
Hayır, yani "LP Parametrik Olmayan Mod Tanımlaması" nedir? "MaxEnt" nedir? Vb Birkaç cümlede, bu nasıl çalışır? Neden / ne zaman diğer yöntemlere tercih edilebilir? Vb. Onları açıklayan makaleye bağlandığınızın farkındayım, ancak onları burada tanıtmak için birkaç cümle olması iyi olurdu, özellikle de bağlantı koparsa, ancak gelecekteki okuyuculara, bu yöntemi takip etmek istiyorum.
gung - Monica'yı eski

2
@DeepMukherjee, kesinlikle yazınızdaki tüm kağıtları yeniden yazmanıza gerek yok. Sadece ne olduğunu ve nasıl çalıştığını söyleyen birkaç cümle ekleyin.
gung - Monica'yı eski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.