Comment échantillonner à partir de la distribution Cantor?

19

Quelle serait la meilleure façon d'échantillonner à partir de la distribution Cantor ? Il n'a que du cdf et nous ne pouvons pas l'inverser.

Tim
la source
4
En fait, quelqu'un a demandé sur les mathématiques: math.stackexchange.com/questions/1115907/...
RUser4512
Voici quelques questions de suivi intéressantes: quel est l'écart-type? Quelle est la fonction de génération de moment? Comment se comparent-ils à leurs homologues pour la distribution uniforme ? :-)(0,1)
whuber
5
J'aime la boucle infinie que vous avez créée en référençant le post math.stackexchange, qui renvoie ici: p
Tasos Papastylianou

Réponses:

23

Facile: échantillonnage à partir d'une distribution uniforme et recodage du binaire au ternaire, interprétant chaque "1" comme un "2". (C'est l'approche de la transformée de probabilité inverse: elle inverse en effet le CDF!)(0,1)

Figure

Voici une Rimplémentation, écrite d'une manière qui devrait facilement être portée sur presque n'importe quel environnement informatique.

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=".")
whuber
la source
3
Plus tôt cette année , j'ai commencé une mise en œuvre plus complète peu à github.com/Henrygb/CantorDist.R avec des fonctions rCantor(), qCantor(), pCantor()et moins significativedCantor()
Henry
1
@Henry Que mettrait en dcantorœuvre? Comme le note Tim, cette distribution n'a pas de densité. Il n'a pas non plus d'atomes discrets. C'est l'exemple archétypal d'une distribution continue mais pas absolument continue. (J'aime l'implémentation de qcantor, BTW - c'est probablement rapide en raison de son exploitation de la multiplication matricielle.)
whuber
1
Nous devons garder à l'esprit que nous n'avons affaire qu'à une approximation finie de la distribution réelle. Disons que nous avions 10 nombres de précision à ternaire (en pratique, ils seront plus longs), et nous avons généré 0,0222020002 pour "représenter" une variable dont les chiffres s'étendent plus loin. Bien que le même commentaire s'applique à tout RV à valeur réelle avec un RV continu, toutes les valeurs "représentées" que l'approximation de longueur finie pourrait représenter sont également "dans l'ensemble". Dans la distribution actuelle de Cantor, presque toutes les «suites» de cette séquence à dix chiffres ne sont pas dans l'ensemble. ... ctd
Glen_b -Reinstate Monica
1
@whuber J'ai clairement reconnu que chaque méthode de génération de nombres aléatoires est d'une précision finie dans ma deuxième phrase. Le fait que vous ayez choisi de le répéter et l'accent que vous lui avez donné donnent à penser que vous avez manqué mon point de vue là; lorsque je représente une variable continue à une précision finie, les valeurs réelles qu'une telle approximation finie pourrait représenter sont "dans l'ensemble" à partir duquel nous voulons générer. Lorsque je représente une variable comme celle-ci avec une précision finie, les valeurs réelles qu'une telle approximation finie pourrait représenter ne sont presque pas toutes dans l'ensemble. C'est plutôt un cas différent. ... ctd
Glen_b -Reinstate Monica
1
ctd ... aucune critique de votre message n'était implicite; c'était un point que les lecteurs pourraient ignorer et pourraient vouloir considérer, en particulier s'ils essayaient de déduire les propriétés de l'ensemble Cantor en simulant à partir de celui-ci.
Glen_b -Reinstate Monica