Par exemple, supposons que vous ayez un ensemble ordonné dans lequel chaque position a une probabilité égale d'être l'une des lettres minuscules de l'alphabet. Dans ce cas, je ferai en sorte que l'ensemble commandé contienne éléments.1000
# generate a possible sequence of letters
s <- sample(x = letters, size = 1000, replace = TRUE)
Il se trouve que si chacune des positions de l'ensemble ordonné suit une distribution uniforme sur les lettres minuscules de l'alphabet, la distance entre deux occurrences de la même lettre suit une loi géométrique de paramètre . À la lumière de ces informations, calculons la distance entre les occurrences consécutives de la même lettre.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)
Regardons un histogramme des distances entre les occurrences de la même lettre et comparons-le à la fonction de masse de probabilité associée à la distribution géométrique mentionnée ci-dessus.
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)
Les points rouges représentent la fonction de masse de probabilité réelle de la distance à laquelle nous nous attendrions si chacune des positions de l'ensemble ordonné suivait une distribution uniforme sur les lettres et les barres de l'histogramme représentent la fonction de masse de probabilité empirique de la distance associée à l'ordre ensemble.
J'espère que l'image ci-dessus est convaincante que la distribution géométrique est appropriée.
p = 1 / 260∞
Comment se d.flat
compare-t-on à la distribution géométrique attendue en termes de distance de 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
ÉDITER:
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))
Maintenant, nous pouvons calculer la probabilité d'observer la distance de Bhattacharyya observée ci-dessus, ou une autre extrême, si l'ensemble ordonné a été généré de telle manière que chacune de ses positions suit une distribution uniforme sur les lettres.
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