Gostaria de encontrar uma maneira de quantificar a intensidade da bimodalidade de algumas distribuições que recebi empiricamente. Pelo que li, ainda há algum debate sobre a maneira de quantificar a bimodalidade. Eu escolhi usar o teste de imersão de Hartigans, que parece ser o único disponível em R (artigo original: http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). O teste de mergulho de Hartigans é definido como: "O teste de mergulho mede a multimodalidade em uma amostra pela diferença máxima, em todos os pontos da amostra, entre a função de distribuição empírica e a função de distribuição unimodal que minimiza essa diferença máxima" .
Eu gostaria de entender completamente como devo interpretar essas estatísticas antes de usá-las. Eu esperava que o teste de mergulho aumentasse se a distribuição fosse multimodal (como é definida como "a diferença máxima da distribuição unimodal"). Mas : você pode ler na página da wikipedia sobre distribuição multimodal que "Valores menores que 0,05 indicam bimodalidade significativa e valores maiores que 0,05, mas menores que 0,10 sugerem bimodalidade com significância marginal". . Essa afirmação vem deste artigo (Fig. 2). De acordo com este artigo, o índice de teste de mergulho é próximo de 0 quando a distribuição é bimodal. Isso me confunde.
Para interpretar corretamente o teste de imersão dos Hartigans, construí algumas distribuições (o código original é daqui ) e aumentei o valor de exp (mu2) (chamado 'Intensidade de bimodularidade' a partir de agora - Edit: Eu deveria ter chamado de 'Intensidade da bimodalidade ' ) para obter a bimodalidade. No primeiro gráfico, você pode ver alguns exemplos de distribuições. Em seguida, estimei o índice diptest (segundo gráfico) e o valor p (terceiro graphe) associado ( diptest do pacote ) às diferentes distribuições simuladas. O código R usado está no final da minha postagem.
O que mostro aqui é que o índice do teste de mergulho é alto e o Pvalue é baixo quando as distribuições são bimodais. O que é contrário ao que você pode ler na internet.
Não sou especialista em estatística, de modo que mal entendi o trabalho de Hartigans. Gostaria de receber alguns comentários sobre a maneira correta de interpretar o teste de imersão de Hartigans. Estou errado em algum lugar?
Obrigado a todos. Saudações,
TA
Exemplo de distribuição simulada:
O índice de teste de mergulho de Hartigan associado:
Valor do teste de mergulho de Hartigan associado 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