В качестве примера, предположим, что у вас есть упорядоченный набор, в котором каждая позиция имеет одинаковую вероятность быть любой из строчных букв в алфавите. В этом случае я сделаю упорядоченный набор, содержащий элементов.1000
# generate a possible sequence of letters
s <- sample(x = letters, size = 1000, replace = TRUE)
Оказывается, что если каждая из позиций упорядоченного множества следует равномерное распределение строчных букв алфавита, то расстояние между двумя вхождений одного и того же письма следует геометрическое распределение с параметром . В свете этой информации давайте вычислим расстояние между последовательными вхождениями одной и той же буквы.р = 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)
Красные точки представляют реальную функцию массы вероятности расстояния, которое мы ожидаем, если бы каждая из позиций упорядоченного набора следовала за равномерным распределением по буквам, а столбцы гистограммы представляют эмпирическую функцию массы вероятности расстояния, связанного с упорядоченным устанавливать.
Надеемся, что изображение выше убедительно, что геометрическое распределение является подходящим.
р = 1 / 260∞
Как d.flat
сверху сравнить с ожидаемым геометрическим распределением по расстоянию Бхаттачарья?
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))
Теперь мы можем вычислить вероятность наблюдения расстояния Бхаттачарьи, наблюдаемого выше, или еще одного экстремума, если упорядоченное множество было сгенерировано таким образом, что каждая из его позиций следует равномерному распределению по буквам.
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