Ampirik olarak aldığım bazı dağılımların bimodalite yoğunluğunu ölçmek için bir yol bulmak istiyorum. Okuduğum kadarıyla, bimodaliteyi ölçmenin yolu hakkında hala bazı tartışmalar var. R üzerinde mevcut olan Hartigans'ın daldırma testini kullanmayı seçtim (orijinal kağıt: http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). Hartigans'ın daldırma testi şu şekilde tanımlanır: "Dip testi, bir örnekte ampirik dağılım fonksiyonu ile bu maksimum farkı en aza indiren tek modlu dağılım fonksiyonu arasındaki tüm numune noktalarında maksimum farklılıkla ölçülür" .
Bu istatistikleri kullanmadan önce nasıl yorumlamam gerektiğini tamamen anlamak istiyorum. Dağılım multimodal ("unimodal dağılımından maksimum fark" olarak tanımlandığı gibi) daldırma testi artacağını bekliyordum. Ancak : wikipedia sayfasında multimodal dağılım hakkında okuyabilirsiniz . . Böyle bir ifade bu makaleden gelir (Şekil 2). Bu yazıda, dağılım bimodal olduğunda daldırma testi endeksi 0'a yakındır. Kafamı karıştırıyor.
Hartigans'ın daldırma testini doğru bir şekilde yorumlamak için bazı dağıtımlar yaptım (orijinal kod buradan ) ve exp (mu2) değerini arttırdım (bundan sonra 'Bimodülerliğin şiddeti' olarak adlandırılır) - Düzenleme: Buna 'Yoğunluk' demeliydim bimodality ' ). İlk grafikte, bazı dağıtım örneklerini görebilirsiniz. Sonra farklı benzetilmiş dağılımlar ile ilgili diptest indeksini (ikinci grafik) ve p değerini (üçüncü graphe) tahmin ettim . Kullanılan R kodu yazımın sonunda.
Burada gösterdiğim, daldırma testi endeksinin yüksek ve dağılımlar bimodal olduğunda Pvalue düşük. Hangi internette okuyabilirsiniz ne aksine.
İstatistik konusunda uzman değilim, böylece Hartigans'ın makalesini zar zor anladım. Hartigans'ın daldırma testini yorumlamamız gereken doğru yol hakkında bazı yorumlar almak istiyorum. Bir yerde yanlış mıyım?
Hepinize teşekkür ederim. Saygılarımızla,
TA
Simüle edilen dağıtım örneği:
İlişkili Hartigan'ın daldırma testi endeksi:
Hartigan'ın daldırma testi p. Değeri:
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