Como ejemplo, suponga que tiene un conjunto ordenado en el que cada posición tiene la misma probabilidad de ser cualquiera de las letras minúsculas del alfabeto. En este caso haré que el conjunto ordenado contenga elementos.1000
# generate a possible sequence of letters
s <- sample(x = letters, size = 1000, replace = TRUE)
Resulta que si cada una de las posiciones del conjunto ordenado sigue una distribución uniforme sobre las letras minúsculas del alfabeto, a continuación, la distancia entre dos ocurrencias de la misma letra sigue una distribución geométrica con parámetro . A la luz de esta información, calculemos la distancia entre ocurrencias consecutivas de la misma letra.pag= 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)
Veamos un histograma de las distancias entre ocurrencias de la misma letra y compárelo con la función de masa de probabilidad asociada con la distribución geométrica mencionada anteriormente.
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)
Los puntos rojos representan la función de masa de probabilidad real de la distancia que esperaríamos si cada una de las posiciones del conjunto ordenado siguiera una distribución uniforme sobre las letras y las barras del histograma representan la función de masa de probabilidad empírica de la distancia asociada con el orden conjunto.
Con suerte, la imagen de arriba es convincente de que la distribución geométrica es apropiada.
p = 1 / 260 0∞
¿Cómo se d.flat
compara desde arriba con la distribución geométrica esperada en términos de distancia 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))
Ahora podemos calcular la probabilidad de observar la distancia Bhattacharyya observada anteriormente, o un extremo más, si el conjunto ordenado se generó de tal manera que cada una de sus posiciones sigue una distribución uniforme sobre las 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