Quale sarebbe il modo migliore per campionare dalla distribuzione Cantor ? Ha solo cdf e non possiamo invertirlo.
Quale sarebbe il modo migliore per campionare dalla distribuzione Cantor ? Ha solo cdf e non possiamo invertirlo.
Risposte:
Facile: campiona da una distribuzione Uniforme e ricodifica da binario a ternario, interpretando ogni "1" come "2". (Questo è l'approccio di trasformazione di probabilità inversa: in effetti inverte il CDF!)
Ecco R
un'implementazione, scritta in un modo che dovrebbe essere facilmente trasferibile in quasi tutti gli ambienti informatici.
binary.to.ternary <- function(x) {
y <- 0
x <- round(2^52 * x)
for (i in 1:52) {
y <- y + 2*(x %% 2)
y <- y/3
x <- floor(x/2)
}
y
}
n <- 1000
x <- runif(n)
y <- binary.to.ternary(x)
plot(ecdf(y), pch=".")
rCantor()
, qCantor()
, pCantor()
e un meno significativodCantor()
dcantor
implementerebbe? Come osserva Tim, questa distribuzione non ha densità. Non ha neppure atomi discreti. È l'esempio archetipico di una distribuzione continua ma non assolutamente continua. (Mi piace l'implementazione di qcantor
BTW - è probabilmente veloce in virtù del suo sfruttamento della moltiplicazione della matrice.)