Come identificare una distribuzione bimodale?


48

Capisco che una volta che tracciamo i valori come un grafico, possiamo identificare una distribuzione bimodale osservando i picchi gemelli, ma come si trova in modo programmatico? (Sto cercando un algoritmo.)


5
Domanda intrigante. Non ne so nulla, quindi non tenterò una risposta, ma gocciolare la bimodalità + test fornisce parecchi promettenti contatti. google.co.uk/search?q=bimodality+test
onestop

un codice programmatico per verificare la multimodalità è disponibile su www.estima.com e si chiama MODES.SRC. Puoi facilmente convertirlo in Matlab, R o altri software. Saluti, guido.

1
Non puoi identificare il numero di modalità (non c'è limite al numero di piccole oscillazioni che una distribuzione potrebbe avere), ma puoi ottenere un limite inferiore. es. vedere qui projecteuclid.org/euclid.aos/1176351045
Glen_b

Risposte:


27

L'identificazione di una modalità per una distribuzione continua richiede il livellamento o il binning dei dati.

Il binning è in genere troppo procrustean: i risultati dipendono spesso da dove si posizionano i punti di taglio del bin.

Il smoothing del kernel (in particolare, sotto forma di stima della densità del kernel ) è una buona scelta. Sebbene siano possibili molte forme del kernel, in genere il risultato non dipende molto dalla forma. Dipende dalla larghezza di banda del kernel. Pertanto, le persone utilizzano un kernel adattivo o conducono una sequenza di smoothing del kernel per variare le larghezze di banda fisse al fine di verificare la stabilità delle modalità identificate. Sebbene l'utilizzo di un adattivo o "ottimale" sia più attraente, tenere presente che la maggior parte (tutte?) Di queste sono progettate per raggiungere un equilibrio tra precisione e accuratezza media: non sono progettate per ottimizzare la stima della posizione delle modalità.

Per quanto riguarda l'implementazione, i smoother del kernel spostano e scalano localmente una funzione predeterminata per adattarsi ai dati. A condizione che questa funzione di base sia differenziabile - i gaussiani sono una buona scelta perché puoi differenziarli tutte le volte che vuoi - quindi tutto ciò che devi fare è sostituirlo con il suo derivato per ottenere il derivato del liscio. Quindi si tratta semplicemente di applicare una procedura standard di ricerca zero per rilevare e testare i punti critici. ( Il metodo di Brent funziona bene.) Naturalmente puoi fare lo stesso trucco con la seconda derivata per ottenere una rapida verifica se un punto critico è un massimo locale, cioè una modalità.


2
@venkasub, potresti anche esaminare il metodo di Muller per la ricerca delle radici. È più semplice del metodo di Brent e "quasi" efficiente come il metodo di Newton, ma senza la necessità di conoscere i derivati ​​della funzione target.
cardinale il

25

C'è un noto documento di Silverman che tratta questo problema. Impiega una stima della densità del kernel. Vedere

BW Silverman, Utilizzando le stime della densità del kernel per indagare sulla multimodalità , J. Royal Stat. Soc. B , vol. 43, n. 1, 1981, pagg. 97-99.

Si noti che ci sono alcuni errori nelle tabelle del documento. Questo è solo un punto di partenza, ma piuttosto buono. Fornisce un algoritmo ben definito da utilizzare, nel caso sia quello che stai cercando. Potresti guardare su Google Scholar documenti che lo citano per approcci più "moderni".


4
+1 Questo documento sfrutta le informazioni su come il numero di modalità apparenti dipende dalla larghezza del kernel (per i kernel gaussiani) per selezionare una larghezza appropriata e quindi continua come descritto nella mia risposta.
whuber

2

Sono arrivato in ritardo alla festa, ma se sei interessato solo al fatto che sia multimodale o meno, nel senso che non sei interessato al numero di modalità, dovresti guardare il diptest .

Nel Rpacchetto viene chiamato diptest.


2
Il nome completo è Dip Test of Unimodality di Hartigan. Il documento originale descrive questa descrizione: il dip test misura la multimodalità in un campione in base alla differenza massima, su tutti i punti del campione, tra la funzione di distribuzione empirica e la funzione di distribuzione unimodale che minimizza quella differenza massima. L'algoritmo non è banale, ma puoi facilmente trovare C, Python, MATLAB e moderne traduzioni di Fortran basate sull'implementazione originale di Fortran in Calcolo della statistica dip per testare l'unimodalità .
mortehu


0

La definizione in wiki mi confonde leggermente. La probabilità che un set di dati continuo abbia una sola modalità è zero. Un modo semplice per programmare un distrubiton bimodale è con due distribuzioni normali separate centrate diversamente. Questo crea due picchi o ciò che wiki chiama modalità. In realtà è possibile utilizzare quasi due distribuzioni, ma una delle opportunità statistiche più difficili è scoprire come è stato formato il set di dati dopo aver combinato le due distribuzioni casuali di dati.


Come identificherai i centri delle due distribuzioni normali?
Venkasub,

@venkasub, il centro della distribuzione normale è la sua media. Se sai che la bimodalità proviene da due distribuzioni normali, puoi adattare il modello di miscela per stimare le medie, che saranno due modalità.
mpiktas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.