Як перевірити, чи мій розподіл мультимодальний?


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 -Встановити Моніку

1
У цій відповіді згадується дев'ять різних тестів , деякі з яких можуть бути відповідні вашій ситуації.
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

Це свідчить про те, що дані, настільки далекі від одномодальних, як ваші, мали б дуже малоймовірність, якби вони надходили з єдиного справжнього нормального розподілу.

Деякі люди не відчувають себе комфортно, використовуючи параметричний тест тут (хоча якщо припущення виконані, я не знаю жодної проблеми). Одним із дуже широко застосованих методів є використання методу параметричного перехресного завантаження (я описую тут алгоритм ). Ми можемо спробувати застосувати їх до цих даних:

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% часу. Вони є дуже дискримінаційними. Якщо, з іншого боку, ви вирішили використовувати однокомпонентну модель як нульову гіпотезу, ваш спостережуваний результат є достатньо малим, щоб не відображатися в емпіричному розподілі вибірки в 10000 ітерацій. Ми можемо використовувати правило 3 (див Тут ) для розміщення верхньої межі p-значення, а саме ми вважаємо, що ваше p-значення менше, ніж .0003. Тобто це дуже суттєво.

p<.000001p<.001 ). Однак дані ніколи не бувають нормальними (пор., Ця відома цитата), а також базові компоненти, якщо вони існують, також не гарантуються абсолютно нормальними. Якщо ви вважаєте розумним, що ваші дані можуть надходити з позитивно перекошеного розподілу, а не з нормального, цей рівень бімодальності цілком може бути в межах типового діапазону варіацій, про що я підозрюю, що говорить тест.


1
Проблема такого підходу полягає в тому, що альтернатива, з якою ви порівнюєте суміш Гаусса, не дуже розумна. Більш розумним було б те, що дистрибуція - це якась права коса, наприклад Гамма. Майже з огляду на те, що суміш підходить майже до будь-якого перекошеного набору даних "значно" краще, ніж один гауссів підходить до неї.
whuber

Ти маєш рацію, @whuber. Я намагався висловити це явно. Я не впевнений, як зробити гамма-FMM, але це було б краще.
gung - Відновіть Моніку

1
Оскільки це дослідницьке дослідження, однією думкою було б спробувати перетворити оригінальний розподіл на симетрію (можливо, за допомогою зміщення трансформації Box-Cox, грубо оцінену з кількох квантових даних) і спробувати свій підхід ще раз. Звичайно, ви б не говорили про "значущість" , але аналіз ймовірності все ще може виявити.
whuber

@whuber, я це робив, але згадував це лише мимохідь. (Оптимальне перетворення Box-Cox - це зворотний квадратний корінь.) Ви отримуєте той самий результат, але значення p (все ще високо, але) менш значущі.
gung - Відновити Моніку

3
Мені дуже подобається думка, що ви повинні моделювати те, що, на вашу думку, є процесом генерації. Моя проблема полягає в тому, що навіть коли гауссові суміші працюють добре, я вважаю, що має бути суттєве тлумачення. Якби ОП розповіла нам більше, навіть про те, які дані, можливі більш які здогадки.
Нік Кокс

10

Дотримуючись ідей у ​​відповіді та коментарях @ Nick, ви можете бачити, наскільки широкою є смуга пропускання, щоб просто вирівняти вторинний режим:

введіть тут опис зображення

Прийміть цю оцінку щільності ядра як проксимальну нуль - розподіл, найближчий до даних, але все ще відповідає нульовій гіпотезі про те, що це вибірка з одномовної популяції - та моделюйте з неї. У модельованих зразках вторинний режим часто не виглядає настільки виразним, і вам не потрібно розширювати пропускну здатність настільки, щоб вирівняти його.

<code> введіть сюди опис зображення </code>

Формалізація цього підходу призводить до тесту, наведеного в Silverman (1981), "Використання оцінок щільності ядра для дослідження модальності", JRSS B , 43 , 1. silvermantestПакет Schwaiger & Holzmann реалізує цей тест, а також процедуру калібрування, описану Hall & York ( 2001 р.), "Про калібрування тесту Сільвермена на мультимодальність", 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: Ядро Гаусса, але я не можу згадати, чи є для цього вагома причина. Кожен модельований зразок масштабується, і є корекція на консервативне зміщення оригінального тесту - опрацював хтось на ім’я Storey, я думаю.
Scortchi

@NickCox: Вибачте, зовсім не поверховий.
Scortchi

@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 Дякую! Як завжди, ви безпомилково зосереджуєтесь на слабких місцях, про які ми повинні турбуватися, і я згоден. Зі збільшенням пропускної здатності ядра збільшується поява унімодальності до неминучості. І навпаки, невелика пропускна здатність часто просто вказує на хибні режими, які є повторюваними та / або тривіальними. Компроміс справді делікатний. Я думаю, що головна заслуга такого підходу - риторика "Чи можна це повторити, якщо ми дзиґовуємо?" Мене часто хвилює бажання користувачів програмного забезпечення копіювати результати за замовчуванням без роздумів.
Нік Кокс

2
Існують систематичні підходи до цієї проблеми, що базуються на поступовому зміні пропускної здатності та відстеженні появи та зникнення режимів у міру зміни пропускної здатності. По суті, надійний режим зберігається, а менш надійний режим - ні. Це милий підхід, але іноді було б розпалити конструктор тунелів, коли лопата зробить. Наприклад, якщо ви подвійне вибору гістограми, а вторинний режим занадто легко зникає (або переміщується), не вірите.
Нік Кокс

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 - Відновіть Моніку

Контекст є вихідним питанням: чи існує мультимодальність? якщо так позиції. актуальність нового методу випливає з того, що полювання на шипунів непараметричним способом є важкою проблемою моделювання.
Глибокий Мукерджі

@gung просить розширити свою відповідь. Наприклад, результат отриманий з методу, поясненого в роботі, яка не має публічної версії.
Нік Кокс

2
Ні, я маю на увазі що таке "непараметрична ідентифікація режиму LP"? Що таке "MaxEnt"? І т. Д. У кількох реченнях, як це працює? Чому / коли це може бути кращим перед іншими методами? І т. Д. Я знаю, що ви посилаєтесь на папір, яка пояснює їх, але було б непогано мати пару речень, щоб ввести їх сюди, особливо якщо посилання загине, але навіть якщо не дати майбутнім читачам зрозуміти, чи вони хочуть дотримуватися цього методу.
gung - Відновіть Моніку

2
@DeepMukherjee, вам, звичайно, не потрібно переписувати весь документ у своєму дописі. Просто додайте кілька речень, що говорять, що це таке і як це працює.
gung - Відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.