Ad esempio, supponiamo di avere un set ordinato in cui ogni posizione ha la stessa probabilità di essere una delle lettere minuscole dell'alfabeto. In questo caso, farò in modo che l'insieme ordinato contenga elementi.1000
# generate a possible sequence of letters
s <- sample(x = letters, size = 1000, replace = TRUE)
Si scopre che se ciascuna delle posizioni del insieme ordinato segue una distribuzione uniforme sopra le lettere minuscole dell'alfabeto, allora la distanza tra due occorrenze della stessa lettera segue una distribuzione geometrica di parametro . Alla luce di queste informazioni, calcoliamo la distanza tra occorrenze consecutive della stessa lettera.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)
Diamo un'occhiata a un istogramma delle distanze tra occorrenze della stessa lettera e confrontiamolo con la funzione di massa di probabilità associata alla distribuzione geometrica sopra menzionata.
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)
I punti rossi rappresentano la funzione di massa di probabilità effettiva della distanza che ci aspetteremmo se ciascuna delle posizioni dell'insieme ordinato seguisse una distribuzione uniforme sulle lettere e le barre dell'istogramma rappresentino la funzione di massa di probabilità empirica della distanza associata all'ordine ordinato impostato.
Speriamo che l'immagine qui sopra sia convincente che la distribuzione geometrica sia appropriata.
p = 1 / 260∞
Come si d.flat
confronta dall'alto con la distribuzione geometrica attesa in termini di distanza di 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
MODIFICARE:
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))
Ora possiamo calcolare la probabilità di osservare la distanza di Bhattacharyya osservata sopra, o un altro estremo, se l'insieme ordinato è stato generato in modo tale che ciascuna delle sue posizioni segua una distribuzione uniforme sulle lettere.
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