ตัวอย่างเช่นสมมติว่าคุณมีชุดคำสั่งที่แต่ละตำแหน่งมีความน่าจะเป็นเท่ากับการเป็นตัวอักษรตัวเล็กในตัวอักษร ในกรณีนี้ฉันจะทำให้ชุดที่สั่งซื้อมีองค์ประกอบรายการ1000
# generate a possible sequence of letters
s <- sample(x = letters, size = 1000, replace = TRUE)
แต่กลับกลายเป็นว่าถ้าแต่ละตำแหน่งของชุดสั่งดังต่อไปนี้การกระจายสม่ำเสมอทั่วอักษรตัวพิมพ์เล็กของตัวอักษรแล้วระยะห่างระหว่างสองเกิดขึ้นของตัวอักษรเดียวกันดังต่อไปนี้การกระจายเรขาคณิตกับพารามิเตอร์ 26 ในแง่ของข้อมูลนี้ลองคำนวณระยะห่างระหว่างการเกิดจดหมายติดต่อกันต่อเนื่องกันP = 1 / 26
# find the distance between occurences of the same letters
d <- vector(mode = 'list', length = length(unique(letters)))
for(i in 1:length(unique(letters))) {
d[[i]] <- diff(which(s == letters[i]))
}
d.flat <- unlist(x = d)
ลองดูฮิสโตแกรมของระยะทางระหว่างการเกิดขึ้นของตัวอักษรเดียวกันและเปรียบเทียบกับฟังก์ชันมวลความน่าจะเป็นที่เกี่ยวข้องกับการกระจายตัวทางเรขาคณิตที่กล่าวถึงข้างต้น
hist(x = d.flat, prob = TRUE, main = 'Histogram of Distances', xlab = 'Distance',
ylab = 'Probability')
x <- range(d.flat)
x <- x[1]:x[2]
y <- dgeom(x = x - 1, prob = 1/26)
points(x = x, y = y, pch = '.', col = 'red', cex = 2)
จุดสีแดงแสดงถึงฟังก์ชันมวลความน่าจะเป็นจริงของระยะทางที่เราคาดหวังว่าแต่ละตำแหน่งของชุดคำสั่งจะตามด้วยการแจกแจงแบบสม่ำเสมอเหนือตัวอักษรและแท่งกราฟฮิสโตแกรมแสดงถึงฟังก์ชันมวลความน่าจะเป็นเชิงประจักษ์ของระยะทาง ชุด
หวังว่าภาพด้านบนจะทำให้เชื่อได้ว่าการกระจายตัวทางเรขาคณิตนั้นเหมาะสม
P = 1 / 260∞
อย่างไรd.flat
จากข้างต้นเมื่อเทียบกับการกระจายเรขาคณิตคาดว่าในแง่ของการ Bhattacharyya ระยะทาง?
b.dist <- 0
for(i in x) {
b.dist <- b.dist + sqrt((sum(d.flat == i) / length(d.flat)) * dgeom(x = i - 1,
prob = 1/26))
}
b.dist <- -1 * log(x = b.dist)
0.0260
แก้ไข:
0.026010 , 000
gen.bhat <- function(set, size) {
new.seq <- sample(x = set, size = size, replace = TRUE)
d <- vector(mode = 'list', length = length(unique(set)))
for(i in 1:length(unique(set))) {
d[[i]] <- diff(which(new.seq == set[i]))
}
d.flat <- unlist(x = d)
x <- range(d.flat)
x <- x[1]:x[2]
b.dist <- 0
for(i in x) {
b.dist <- b.dist + sqrt((sum(d.flat == i) / length(d.flat)) * dgeom(x = i -1,
prob = 1/length(unique(set))))
}
b.dist <- -1 * log(x = b.dist)
return(b.dist)
}
dist.bhat <- replicate(n = 10000, expr = gen.bhat(set = letters, size = 1000))
ตอนนี้เราอาจคำนวณความน่าจะเป็นของการสังเกตระยะทาง Bhattacharyya ที่สังเกตไว้ข้างต้นหรืออีกหนึ่งจุดสุดยอดหากชุดที่ได้รับคำสั่งถูกสร้างขึ้นในลักษณะที่แต่ละตำแหน่งของมันตามการกระจายตัวแบบสม่ำเสมอ
p <- ifelse(b.dist <= mean(dist.bhat), sum(dist.bhat <= b.dist) / length(dist.bhat),
sum(dist.bhat > b.dist) / length(dist.bhat))
0.38
0999