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.)
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.)
Risposte:
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à.
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".
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 R
pacchetto viene chiamato diptest
.
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.