Vorrei trovare un modo per quantificare l'intensità della bimodalità di alcune distribuzioni ottenute empiricamente. Da quello che ho letto, c'è ancora qualche dibattito sul modo di quantificare la bimodalità. Ho scelto di utilizzare il dip test di Hartigans che sembra essere l'unico disponibile su R (documento originale: http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). Il dip test di Hartigans è definito come: "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" .
Vorrei capire completamente come dovrei interpretare queste statistiche prima di usarle. Mi aspettavo che il dip test aumentasse se la distribuzione fosse multimodale (poiché è definita come "la differenza massima dalla distribuzione unimodale"). Ma : puoi leggere nella pagina di Wikipedia sulla distribuzione multimodale che "Valori inferiori a 0,05 indicano una bimodalità significativa e valori maggiori di 0,05 ma meno di 0,10 suggeriscono bimodalità con significato marginale." . Tale affermazione proviene da questo documento (Fig. 2). Secondo questo articolo, l'indice del dip test è vicino a 0 quando la distribuzione è bimodale. Mi confonde.
Per interpretare correttamente il dip test degli Hartigani ho costruito alcune distribuzioni (il codice originale è da qui ) e ho aumentato il valore di exp (mu2) (d'ora in poi chiamato "Intensità della bimodularità" - Modifica: avrei dovuto chiamarlo "Intensità" della bimodalità ' ) per ottenere la bimodalità. Nel primo grafico, puoi vedere alcuni esempi di distribuzioni. Quindi ho stimato l'indice diptest (secondo grafico) e il valore p (terzo graphe) associato ( diptest del pacchetto ) a quelle diverse distribuzioni simulate. Il codice R utilizzato è alla fine del mio post.
Quello che mostro qui è che l'indice del dip test è alto e il Pvalue è basso quando le distibuzioni sono bimodali. Il che è contrario a ciò che puoi leggere su Internet.
Non sono un esperto di statistica, quindi ho capito a malapena il documento di Hartigans. Vorrei ricevere alcuni commenti sul modo giusto di interpretare il dip test di Hartigans. Sbaglio da qualche parte?
Grazie a tutti. Saluti,
TA
Esempio di distribuzione simulata:
L'indice del dip test di Hartigan è associato:
Hart test di dip p.value associato a:
library(diptest)
library(ggplot2)
# CONSTANT PARAMETERS
sig1 <- log(3)
sig2 <- log(3)
cpct <- 0.5
N=1000
#CREATING BIMOD DISTRIBUTION
bimodalDistFunc <- function (n,cpct, mu1, mu2, sig1, sig2) {
y0 <- rlnorm(n,mean=mu1, sd = sig1)
y1 <- rlnorm(n,mean=mu2, sd = sig2)
flag <- rbinom(n,size=1,prob=cpct)
y <- y0*(1 - flag) + y1*flag
}
#DIP TEST
DIP_TEST <- function(bimodalData) {
TEST <- dip.test(bimodalData)
return(TEST$statistic[[1]]) # return(TEST$p.value[[1]]) to get the p value
}
DIP_TEST(bimodalData)
# SIMULATION
exp_mu1 = 1
max_exp_mu2 = 100
intervStep = 100
repPerInt = 10
# single distibutions
expMu2Value <- c()
bimodalData <- c()
mu1 <- log(exp_mu1)
mu2 <- log(exp_mu1)
bimodalData <- c(bimodalData,log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2)))
expMu2Value <- c(expMu2Value,rep(exp_mu1,length(log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2)))))
mu1 <- log(exp_mu1)
mu2 <- log(max_exp_mu2)
bimodalData <- c(bimodalData,log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2)))
expMu2Value <- c(expMu2Value,rep(max_exp_mu2,length(log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2)))))
mu1 <- log(exp_mu1)
mu2 <- log(trunc((max_exp_mu2-exp_mu1)/2+1))
bimodalData <- c(bimodalData,log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2)))
expMu2Value <- c(expMu2Value,rep(trunc((max_exp_mu2-exp_mu1)/2+1),length(log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2)))))
tableExamples <- data.frame(expMu2Value,bimodalData)
tableExamples$expMu2Value <- as.factor(tableExamples$expMu2Value)
ExamplePlot <- ggplot(tableExamples)+
geom_histogram(aes(bimodalData),color='white')+
ylab("Count")+
xlab("")+
facet_wrap(~expMu2Value)+
ggtitle("Intensity of bimodularity")
# calculation of the dip test index
exp_mu2Int = seq(from=exp_mu1,to=max_exp_mu2,length.out=intervStep)
expmu2Vec = c()
dipStat = c()
testDone = c()
for(exp_mu2 in exp_mu2Int){
mu1 <- log(exp_mu1)
mu2 <- log(exp_mu2)
for(rep in 1:repPerInt){
bimodalData <- log(bimodalDistFunc(n=N,cpct,mu1,mu2, sig1,sig2))
diptestone = DIP_TEST(bimodalData)
expmu2Vec = c(expmu2Vec,exp_mu2)
dipStat = c(dipStat,diptestone)
testDone = c(testDone,"diptest")
}
}
table = data.frame(expmu2Vec,dipStat,testDone)
IndexPlot <- ggplot(table)+
geom_point(aes(expmu2Vec,dipStat,color=testDone))+
ylab("Index")+
xlab("Intensity of Bimodularity")+
scale_color_discrete(name="Test")
ExamplePlot
IndexPlot