Ich möchte einen Weg finden, um die Intensität der Bimodalität einiger Verteilungen zu quantifizieren, die ich empirisch erhalten habe. Nach allem, was ich gelesen habe, gibt es immer noch eine Debatte darüber, wie die Bimodalität quantifiziert werden kann. Ich habe mich für den Hartigans-Dip-Test entschieden, der der einzige auf R verfügbare Test zu sein scheint (Originalpapier: http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). : Hartigans' dip Test ist definiert als ‚die DIP - Test misst Multimodalität in einer Probe durch die maximale Differenz, über alle Abtastpunkte zwischen der empirischen Verteilungsfunktion und die Verteilungsfunktion unimodal dass minimiert , die maximale Differenz‘ .
Ich würde gerne verstehen, wie ich diese Statistiken interpretieren sollte, bevor ich sie verwende. Ich hatte erwartet, dass der Dip-Test zunehmen würde, wenn die Verteilung multimodal ist (wie es als "die maximale Differenz von der unimodalen Verteilung" definiert ist). Aber : Sie können auf der Wikipedia-Seite über die multimodale Verteilung lesen, dass "Werte unter 0,05 auf signifikante Bimodalität hinweisen und Werte über 0,05, aber unter 0,10 auf Bimodalität mit marginaler Signifikanz hinweisen." . Eine solche Aussage stammt aus diesem Papier (Abb. 2). Laut dieser Veröffentlichung liegt der Dip-Test-Index nahe bei 0, wenn die Verteilung bimodal ist. Das verwirrt mich.
Um den Hartigans-Dip-Test richtig zu interpretieren, habe ich einige Verteilungen konstruiert (der ursprüngliche Code stammt von hier ) und den Wert von exp (mu2) erhöht (von nun an 'Intensität der Bimodularität' genannt) - Bearbeiten: Ich hätte es 'Intensität' nennen sollen der Bimodalität ' ), um die Bimodalität zu erhalten. Im ersten Diagramm sehen Sie einige Beispiele für Verteilungen. Dann schätzte ich den Diptest-Index (zweites Diagramm) und den p-Wert (dritte Graphe ), der diesen verschiedenen simulierten Verteilungen zugeordnet ist (Paket- Diptest ). Der verwendete R-Code befindet sich am Ende meines Beitrags.
Was ich hier zeige, ist, dass der Dip-Test-Index hoch und der P-Wert niedrig ist, wenn die Verteilungen bimodal sind. Das widerspricht dem, was Sie im Internet lesen können.
Ich bin kein Statistikexperte, so dass ich Hartigans Papier kaum verstehe. Ich würde gerne einige Kommentare dazu erhalten, wie wir Hartigans Dip-Test richtig interpretieren sollten. Irre ich mich irgendwo
Danke euch allen. Grüße,
TA
Beispiel einer simulierten Verteilung:
Hartigans Dip-Test-Index im Zusammenhang mit:
Hartigan's Dip Test p.value verbunden:
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