Tôi muốn tìm một cách để định lượng cường độ lưỡng tính của một số phân phối mà tôi có được theo kinh nghiệm. Từ những gì tôi đọc được, vẫn còn một số tranh luận về cách định lượng lưỡng tính. Tôi đã chọn sử dụng thử nghiệm nhúng của Hartigans dường như là thử nghiệm duy nhất có sẵn trên R (giấy gốc: http://www.stat.washington.edu/wxs/Stat593-s03/Literature/hartigan85a.pdf ). Thử nghiệm nhúng của Hartigans được định nghĩa là: "Thử nghiệm nhúng đo đa phương thức trong một mẫu bằng sự khác biệt tối đa, trên tất cả các điểm mẫu, giữa chức năng phân phối theo kinh nghiệm và chức năng phân phối không theo phương thức nhằm giảm thiểu sự khác biệt tối đa đó" .
Tôi muốn hiểu hoàn toàn cách tôi nên diễn giải số liệu thống kê này trước khi sử dụng nó. Tôi đã hy vọng rằng thử nghiệm nhúng sẽ tăng nếu phân phối là đa phương thức (vì nó được định nghĩa là "sự khác biệt tối đa so với phân phối không theo phương thức"). Nhưng : bạn có thể đọc trong trang wikipedia về phân phối đa phương thức rằng "Các giá trị nhỏ hơn 0,05 cho thấy giá trị lưỡng tính đáng kể và các giá trị lớn hơn 0,05 nhưng nhỏ hơn 0,10 cho thấy lưỡng tính có ý nghĩa cận biên". . Tuyên bố như vậy xuất phát từ bài báo này (Hình 2). Theo bài báo này, chỉ số kiểm tra nhúng gần bằng 0 khi phân phối là lưỡng kim. Nó làm tôi bối rối.
Để diễn giải chính xác bài kiểm tra nhúng của Hartigans, tôi đã xây dựng một số bản phân phối (mã gốc là từ đây ) và tôi đã tăng giá trị của exp (mu2) (được gọi là 'Cường độ lưỡng tính' từ bây giờ - Chỉnh sửa: Tôi nên gọi nó là 'Cường độ của bimodality ' ) để có được bimodality. Trong biểu đồ đầu tiên, bạn có thể thấy một số ví dụ về phân phối. Sau đó, tôi ước tính chỉ số diptest (biểu đồ thứ hai) và giá trị p (biểu đồ thứ ba) được liên kết (gói diptest ) với các phân phối mô phỏng khác nhau. Mã R được sử dụng là ở cuối bài viết của tôi.
Những gì tôi chỉ ra ở đây là chỉ số kiểm tra nhúng cao và Pvalue thấp khi độ phân giải là lưỡng kim. Điều này trái ngược với những gì bạn có thể đọc trên internet.
Tôi không phải là chuyên gia về thống kê, do đó tôi hầu như không hiểu bài báo của Hartigans. Tôi muốn nhận được một số ý kiến về cách đúng đắn chúng ta nên diễn giải bài kiểm tra nhúng của Hartigans. Tôi có sai ở đâu không?
Cảm ơn tất cả. Trân trọng,
TA
Ví dụ về phân phối mô phỏng:
Chỉ số kiểm tra nhúng của Hartigan liên quan:
Kiểm tra nhúng của Hartigan p.value liên quan:
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