배포가 멀티 모달인지 테스트하는 방법?


21

내 데이터의 히스토그램을 플롯하면 두 개의 피크가 있습니다.

히스토그램

이것이 잠재적 인 멀티 모달 분포를 의미합니까? 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
히스토그램에서 더 많은 쓰레기통사용하십시오 . 나는 약 두 배를 제안합니다
Glen_b -Reinstate Monica

1
이 답변 에는 9 가지 테스트 가 있으며 그 중 일부는 상황과 관련이있을 수 있습니다.
Glen_b-복지국 모니카

1
이 문서 는 아직 보지 못했다면 유용 할 것입니다 ( 이 후속 조치 )
Eoin

답변:


15

@NickCox는 흥미로운 전략을 제시했습니다 (+1). 그러나 @ whuber가 지적한 우려 때문에 자연에서 더 탐구 적이라고 생각할 수 있습니다. .

또 다른 전략을 제안하겠습니다. 가우스 유한 혼합 모델에 적합 할 수 있습니다. 이것은 데이터가 하나 이상의 실제 법선에서 도출된다는 매우 강력한 가정을합니다. @whuber와 @NickCox는 이러한 가정을 뒷받침하기 위해 잘 확립 된 이론에 의해 뒷받침되는 이러한 데이터에 대한 실질적인 해석없이 의견에서 지적한 바와 같이,이 전략은 탐색적인 것으로 간주되어야합니다.

먼저 @Glen_b의 제안을 따르고 두 배의 구간을 사용하여 데이터를 살펴 보겠습니다.

여기에 이미지 설명을 입력하십시오

여전히 두 가지 모드가 있습니다. 어떤 것이 든, 그들은 더 명확하게 여기에서옵니다. (커널 밀도 라인은 동일해야하지만 빈 수가 많기 때문에 더 많이 퍼져 나타납니다.)

이제 가우스 유한 혼합 모델에 적합합니다. 에서가 R, 당신은 사용할 수있는 Mclust이 작업을 수행하기 위해 패키지를 :

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 

두 가지 일반 구성 요소가 BIC를 최적화합니다. 비교를 위해 하나의 구성 요소를 강제로 적용하고 우도 비 테스트를 수행 할 수 있습니다.

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

이것은 단일 정규 정규 분포에서 나온 데이터와는 다른 데이터를 찾을 수 없을 것임을 암시합니다.

어떤 사람들은 여기서 파라 메트릭 테스트를 사용하는 것이 불편하다고 생각합니다 (하지만 가정이 잘 되어도 문제는 없습니다). 매우 광범위하게 적용 가능한 기술 중 하나는 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 

여기에 이미지 설명을 입력하십시오

샘플링 분포에 대한 요약 통계 및 커널 밀도 도표는 몇 가지 흥미로운 기능을 보여줍니다. 단일 구성 요소 모델의 로그 가능성은 실제 데이터 생성 프로세스에 단일 구성 요소 만있는 경우에도 두 구성 요소 적합치의 로그 가능성보다 거의 크지 않으며, 더 큰 경우에는 그 양이 사소합니다. 데이터를 적합시키는 능력이 다른 모델을 비교한다는 아이디어는 PBCM의 동기 중 하나입니다. 두 개의 샘플링 분포는 거의 겹치지 않습니다. .35 %만이 x2.d최대 값보다 작습니다.x1.d값. 로그 우도 차이가> 9.7 인 경우 두 구성 요소 모델을 선택한 경우 시간의 한 구성 요소 모델 .01 %와 두 구성 요소 모델 .02 %를 잘못 선택합니다. 이것들은 매우 식별 가능합니다. 반면에 하나의 구성 요소 모델을 귀무 가설로 사용하기로 선택한 경우 관찰 된 결과는 경험적 샘플링 분포에 10,000 회 반복으로 표시되지 않을 정도로 충분히 작습니다. 우리는 3의 규칙을 사용할 수 있습니다 ( 여기 참조) )을 사용하여 p- 값에 상한을 즉, p- 값이 .0003보다 작은 것으로 추정됩니다. 즉, 이것은 매우 중요합니다.

<.000001<.001) 및 기본 구성 요소 (있는 경우)가 완벽하게 정상적인 것은 아닙니다. 데이터가 정규 분포가 아닌 양의 기울어 진 분포에서 나올 수 있다는 것이 합리적이라고 판단되면이 수준의 이정도는 일반적인 변동 범위 내에있을 수 있습니다. 이것이 딥 테스트가 말하는 것으로 생각됩니다.


1
이 접근법의 문제점은 가우스 혼합을 비교하는 대안이 그리 합리적이지 않다는 것입니다. 보다 합리적인 방법은 분포가 감마와 같은 일종의 오른쪽으로 치우친 것입니다. 혼합물이 단일 가우시안 보다 거의 "비대칭"으로 치우친 거의 모든 데이터 세트에 적합하다는 것은 거의 주어진 것입니다.
whuber

맞습니다, @whuber. 나는 그 점을 명시 적으로 지적하려고 노력했다. 감마 FMM을 수행하는 방법을 잘 모르겠지만 더 좋을 것입니다.
gung-복원 Monica Monica

1
이것은 탐구 적이므로 원래 분포를 대칭으로 변환하려고 시도하고 (아마도 데이터의 몇 Quantile에서 강력하게 추정되는 오프셋 Box-Cox 변환으로) 접근을 다시 시도하는 것입니다. 물론 "의미" 자체 에 대해서는 이야기하지 않지만 가능성에 대한 분석은 여전히 ​​드러날 수 있습니다.
whuber

@ whuber, 나는 그렇게했지만 통과에 대해서만 언급했습니다. (최적의 Box-Cox 변환은 역 제곱근입니다.) 동일한 결과를 얻을 수 있지만 p- 값은 여전히 ​​높지만 덜 중요합니다.
gung-복직 모니카

3
생성 프로세스라고 생각하는 것을 모델링해야한다는 생각이 굉장히 좋습니다. 내 문제는 가우시안 혼합물이 잘 작동하더라도 실질적인 해석이 필요하다는 생각입니다. OP가 데이터가 무엇인지에 대해 더 많이 알려 주면 더 나은 추측이 가능할 수 있습니다.
Nick Cox

10

닉의 답변과 의견 @의 아이디어까지 다음, 당신이하는 방법에 대해 폭 넓은 대역폭 요구에 볼 수있는 단지 보조 모드를 평평 :

여기에 이미지 설명을 입력하십시오

이 커널 밀도 추정값은 데이터에 가장 근접한 분포이지만 단봉 형 모집단의 표본이라는 귀무 가설과 여전히 일치하는 근위 널 (proximal null)로 간주하여 시뮬레이션합니다. 시뮬레이션 된 샘플에서 2 차 모드는 종종 별개로 보이지 않으며, 평평하게하기 위해 대역폭을 크게 확장 할 필요가 없습니다.

<code> 여기에 이미지 설명을 입력하십시오 </ code>

이 접근법을 공식화하면 Silverman (1981), "모달을 조사하기 위해 커널 밀도 추정값 사용", JRSS B , 43 , 1에 제시된 테스트로 이어집니다 . Schwaiger & Holzmann의 silvermantest패키지 는이 테스트를 구현하고 Hall & York에 의해 설명 된 교정 절차 ( 2001), "Multimodality에 대한 Silverman 검정 테스트 교정", Statistica Sinica , 11 , 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 Cox

@ 닉 : 가우스 커널이지만, 그 이유가 설득력이 있는지 기억이 나지 않습니다. 시뮬레이션 된 각 샘플의 크기가 조정되고 원래 테스트에서 보전 된 편향에 대한 수정이 있습니다.
Scortchi-Monica Monica 복원

@NickCox : 미안, 전혀 Storey가 아닙니다.
Scortchi-Monica Monica 복원

@ Scortchi, 텍스트 및 코드를 약간 조정했습니다. 나는 당신이 상관하지 않기를 바랍니다. +1. 또한 당신은 두려운 오른쪽 화살표 할당 연산자를 사용합니까?! 오 인류 ...
gung-복원 모니카

2
실제로 더 나쁘지는 않지만 프로그래밍의 규칙은 변수를 왼쪽에 표시하고 오른쪽에 지정된 것을 갖는 것입니다. 많은 사람들이 놀랍니다 ->. 나는 단지 기뻐한다.
gung-복직 모니카

7

걱정해야 할 사항은 다음과 같습니다.

  1. 데이터 세트의 크기입니다. 작지 않고 크지 않습니다.

  2. 히스토그램 원점 및 빈 너비에 표시되는 내용의 종속성 단 하나의 선택만으로도 당신과 우리는 민감성을 알지 못합니다.

  3. 커널 유형 및 너비와 밀도 추정에서 사용자가 선택한 다른 항목의 의존성. 단 하나의 선택만으로도 당신과 우리는 민감성을 알지 못합니다.

다른 곳에서는 실질적인 해석과 같은 크기의 다른 데이터 세트에서 동일한 양식을 식별하는 능력에 의해 모드의 신뢰성이 지원되지만 확립되지는 않았다고 잠정적으로 제안했습니다. (더 큰 것도 좋습니다 ....)

우리는 여기에 그들 중 하나에 댓글을 달 수 없습니다. 반복성에 대한 하나의 작은 핸들은 동일한 크기의 부트 스트랩 샘플과 얻은 것을 비교하는 것입니다. 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가 대역폭을 추정하는 방법에 민감한 지 궁금합니다. 나는 추정치가 단조로운 가정에 기반하고 있기 때문에 상대적으로 넓은 대역폭을 제공하기 때문에 저전력 테스트가 발생할 수 있다고 생각합니다. 대역폭이 약간 좁아도 모든 부트 스트랩 샘플에서 두 번째 모드가 더 두드러 질 수 있습니다.
whuber

2
@whuber 감사합니다! 평소와 같이, 귀하는 우리가 걱정해야 할 약점에 계속 집중하며 동의합니다. 커널 대역폭이 증가함에 따라 단일성 (unimodality)의 출현은 불가피한 경향이 있습니다. 반대로, 작은 대역폭은 종종 반복 불가능하거나 사소한 스퓨리어스 모드를 나타냅니다. 절충은 실제로 섬세합니다. 이 접근법의 주된 장점은 "우리가 흔들리면 복제 할 수 있는가?"의 수사법이라고 생각합니다. 소프트웨어 사용자가 기본 결과를 반영하지 않고 복사 할 의사가있는 경우가 종종 있습니다.
Nick Cox

2
대역폭을 점진적으로 수정하고 대역폭이 변함에 따라 모드의 모양과 소멸을 추적하여이 문제에 대한 체계적인 접근 방식이 있습니다. 본질적으로 신뢰할 수있는 모드는 유지되고 신뢰할 수없는 모드는 유지되지 않습니다. 그것은 귀여운 접근 방법이지만 때로는 스페이드가 작동 할 때 터널 생성자를 시작하는 경우가 있습니다. 예를 들어 히스토그램 선택을 돌리고 보조 모드가 너무 쉽게 사라지거나 이동하는 경우 믿지 마십시오.
Nick Cox

2

LP 비모수 적 모드 식별

LP 비모수 적 모드 식별 (알고리즘 LPMode의 이름 , 논문의 참조는 아래에 나와 있습니다)

MaxEnt 모드 [플롯의 빨간색 삼각형] : 12783.36 및 24654.28.

L2 모드 [플롯의 녹색 삼각형] : 13054.70 및 24111.61.

모달 모양, 특히 상당한 왜도 를 나타내는 두 번째 모양에 주목하는 것이 흥미 롭습니다 (전통 가우스 혼합 모델은 여기서 실패 할 수 있음).

Mukhopadhyay, S. (2016) 대규모 모드 식별 및 데이터 중심 과학. https://arxiv.org/abs/1509.06428


1
이러한 방법을 소개하고 설명 할 수있는 컨텍스트를 정교하게 제공 할 수 있습니까? 논문에 대한 링크를 갖는 것이 좋지만, 특히 링크가 끊어지면 여기에 답변이 포함되어있는 것이 좋습니다.
gung-모니 티 복원

문맥은 원래의 질문이다 : 다중 양식이 있는가? 그렇다면 위치. 새로운 방법의 관련성은 비모수 적 방식으로 범프 사냥이 어려운 모델링 문제라는 사실에서 비롯됩니다.
Deep Mukherjee

@gung은 답을 넓히라고 요청합니다. 예를 들어, 결과는 공개 버전이없는 논문에 설명 된 방법에서 나온 것입니다.
Nick Cox

2
아니요, "LP 비모수 모드 식별"이란 무엇입니까? "MaxEnt"는 무엇입니까? 기타 몇 문장에서, 이것은 어떻게 작동합니까? 왜 / 언제 다른 방법보다 선호됩니까? 등 나는 당신이 그것들을 설명하는 논문에 링크한다는 것을 알고 있지만, 특히 링크가 죽었을 때, 비록 미래 독자들에게 그들이 이 방법을 추구하고 싶습니다.
gung-모니 티 복원

2
@ DeepMukherjee, 당신은 확실히 당신의 게시물에 전체 논문을 다시 쓸 필요가 없습니다. 그것이 무엇이며 어떻게 작동하는지 말하는 몇 문장을 추가하십시오.
gung-모니 티 복원
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.