Saya ingin menemukan cara untuk mengukur intensitas bimodality dari beberapa distribusi yang saya dapatkan secara empiris. Dari apa yang saya baca, masih ada beberapa perdebatan tentang cara mengukur bimodality. Saya memilih untuk menggunakan tes dip Hartigans 'yang tampaknya menjadi satu-satunya yang tersedia di R (kertas asli: http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). Uji celup Hartigans didefinisikan sebagai: "Tes celup mengukur multimodality dalam sampel dengan perbedaan maksimum, di atas semua titik sampel, antara fungsi distribusi empiris, dan fungsi distribusi unimodal yang meminimalkan perbedaan maksimum" .
Saya ingin memahami sepenuhnya bagaimana saya harus menafsirkan statistik ini sebelum menggunakannya. Saya berharap bahwa tes dip akan meningkat jika distribusinya multimodal (seperti yang didefinisikan sebagai "perbedaan maksimum dari distribusi unimodal"). Tetapi : Anda dapat membaca di halaman wikipedia tentang distribusi multimoda bahwa "Nilai kurang dari 0,05 menunjukkan bimodalitas yang signifikan dan nilai lebih dari 0,05 tetapi kurang dari 0,10 menyarankan bimodalitas dengan signifikansi marjinal." . Pernyataan seperti itu berasal dari makalah ini (Gbr. 2). Menurut makalah ini, indeks uji celup mendekati 0 ketika distribusi bimodal. Itu membingungkan saya.
Untuk menginterpretasikan dengan benar uji celup Hartigans, saya membuat beberapa distribusi (kode asli dari sini ) dan saya meningkatkan nilai exp (mu2) (disebut 'Intensitas bimodularitas' mulai sekarang - Edit: Seharusnya saya menyebutnya 'Intensitas dari bimodality ' ) untuk mendapatkan bimodality. Pada grafik pertama, Anda dapat melihat beberapa contoh distribusi. Kemudian saya memperkirakan indeks diptest (grafik kedua) dan nilai p (grafik ketiga) yang terkait (package diptest ) untuk distribusi simulasi yang berbeda. Kode R yang digunakan adalah di akhir posting saya.
Apa yang saya tunjukkan di sini adalah bahwa indeks uji celup tinggi dan nilai Pv rendah ketika distribusinya bimodal. Yang bertentangan dengan apa yang dapat Anda baca di internet.
Saya bukan ahli dalam bidang statistik, sehingga saya hampir tidak mengerti makalah Hartigans. Saya ingin mendapatkan beberapa komentar tentang cara yang benar kita harus menginterpretasikan tes celup Hartigans. Apakah saya salah di suatu tempat?
Terima kasih semua. Salam,
TA
Contoh distribusi yang disimulasikan:
Indeks uji celup Hartigan terkait:
Hart dip's dip test p.value terkait:
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