나는 경험적으로 얻은 일부 분포의 이형성 강도를 정량화하는 방법을 찾고 싶습니다. 내가 읽은 것으로부터, 바이 모달리티를 정량화하는 방법에 대한 논쟁이 여전히 남아 있습니다. 나는 R에서 사용할 수있는 유일한 것 인 Hartigans의 딥 테스트를 사용하기로 선택했습니다 (원본 : http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). Hartigans의 딥 테스트는 다음과 같이 정의됩니다. " 딥 테스트는 모든 샘플 포인트에 대해 경험적 분포 함수와 최대 차이를 최소화하는 단봉 분포 함수 사이의 최대 차이로 샘플의 다중 양식을 측정 합니다. "
이 통계를 사용하기 전에 어떻게 해석해야하는지 완전히 이해하고 싶습니다. 분포가 다중 모드 일 경우 딥 테스트가 증가 할 것으로 예상했습니다 ( "단일 분포와의 최대 차이"로 정의 됨). 그러나 : 당신은 wikipedia 페이지에서 multimodal distribution에 대해 읽을 수 있습니다 . . 이러한 진술은이 논문 에서 나옵니다 (그림 2). 이 논문에 따르면, 딥 테스트 지수는 분포가 양봉일 때 0에 가깝습니다. 혼란 스러워요.
Hartigans의 딥 테스트를 올바르게 해석하기 위해 일부 배포판을 작성했으며 (원본 코드는 여기에서 제공 ) exp (mu2)의 값을 늘 렸습니다 ( '이중 강도 강도') -편집 : 나는 그것을 '강도'라고 불렀어야합니다 바이 모달리티 ' ) 의 바이 모달리티 를 얻습니다. 첫 번째 그래프에서 분포의 예를 볼 수 있습니다. 그런 다음 I는 diptest 인덱스 (제 그래프) 및 p의 값 (제 3 graphe) 연관 (패키지 추정 diptest 것과 상이한 분포 시뮬레이션을 행). 사용 된 R 코드는 내 게시물의 끝에 있습니다.
여기서 보여주는 것은 딥 테스트 지수가 높고 분포가 양봉일 때 P 값이 낮다는 것입니다. 인터넷에서 읽을 수있는 것과 반대되는 것입니다.
나는 통계 전문가가 아니기 때문에 Hartigans의 논문을 간신히 이해했습니다. Hartigans의 딥 테스트를 올바르게 해석하는 방법에 대한 의견을 듣고 싶습니다. 내가 어딘가에 잘못인가?
모두 감사합니다. 문안 인사,
고마워
시뮬레이션 된 분포의 예 :
Hartigan의 딥 테스트 인덱스 관련 :
Hartigan의 딥 테스트 p. 값 관련 :
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