1000
# generate a possible sequence of letters
s <- sample(x = letters, size = 1000, replace = TRUE)
p = 1 / 26 de
# 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)
Vejamos um histograma das distâncias entre ocorrências da mesma letra e compare-o com a função de massa de probabilidade associada à distribuição geométrica mencionada acima.
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)
Os pontos vermelhos representam a função de massa de probabilidade real da distância que esperávamos se cada uma das posições do conjunto ordenado seguisse uma distribuição uniforme sobre as letras e as barras do histograma representassem a função de massa de probabilidade empírica da distância associada à ordem conjunto.
Esperamos que a imagem acima seja convincente que a distribuição geométrica seja apropriada.
p = 1 / 26 de0 0∞
Como d.flat
acima se compara à distribuição geométrica esperada em termos de Distância 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
EDITAR:
0,0260 010 , 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))
Agora podemos calcular a probabilidade de observar a Distância Bhattacharyya observada acima, ou mais uma, se o conjunto ordenado for gerado de tal maneira que cada uma de suas posições siga uma distribuição uniforme sobre as letras.
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
0 0999