Come campionare dalla distribuzione Cantor?


19

Quale sarebbe il modo migliore per campionare dalla distribuzione Cantor ? Ha solo cdf e non possiamo invertirlo.


4
In realtà, qualcuno lo ha chiesto in Matematica: math.stackexchange.com/questions/1115907/…
RUser4512

Ecco alcune interessanti domande di follow-up: qual è la deviazione standard? Qual è la funzione generatrice di momenti? Come si confrontano con le loro controparti per la distribuzione Uniform ? :-)(0,1)
whuber

5
Mi piace il ciclo infinito che avete creato facendo riferimento al post math.stackexchange, che rimanda qui: p
Tasos Papastylianou,

Risposte:


23

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!)(0,1)

figura

Ecco Run'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=".")

3
All'inizio di quest'anno ho iniziato un'implementazione leggermente più pieno a github.com/Henrygb/CantorDist.R con le funzioni rCantor(), qCantor(), pCantor()e un meno significativodCantor()
Henry

1
@Henry Cosa dcantorimplementerebbe? 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 qcantorBTW - è probabilmente veloce in virtù del suo sfruttamento della moltiplicazione della matrice.)
whuber

1
Dobbiamo tenere presente che abbiamo a che fare solo con un'approssimazione finita alla distribuzione effettiva. Supponiamo di avere 10 numeri di precisione delle cifre ternarie (in pratica saranno più lunghi) e abbiamo generato 0,0222020002 per "rappresentare" una variabile le cui cifre si estendono ulteriormente. Mentre lo stesso commento si applica a qualsiasi valore reale rv con un valore continuo continuo, tutti i valori "rappresentati" che l'approssimazione della lunghezza finita potrebbe rappresentare sono anche "nell'insieme". Nell'attuale distribuzione di Cantor, quasi tutte le "continuazioni" di quella sequenza di dieci cifre non sono nel set. ... ctd
Glen_b -Reinstate Monica

1
@whuber Ho riconosciuto chiaramente che ogni metodo per generare numeri casuali è una precisione finita nella mia seconda frase. Il fatto che tu abbia scelto di ripeterlo e l'enfasi che hai dato suggerisce che hai perso il mio punto reale lì; quando rappresento una variazione continua a precisione finita, i valori reali che una simile approssimazione finita potrebbe rappresentare sono "nell'insieme" da cui vogliamo generare. Quando rappresento una variabile come questa per una precisione finita, i valori reali che un'approssimazione finita potrebbe rappresentare non sono quasi tutti nell'insieme. È piuttosto un caso diverso. ... ctd
Glen_b -Reinstate Monica

1
ctd ... nessuna critica del tuo post era implicita; è stato un punto che i lettori potrebbero trascurare, e potrebbero voler considerare, in particolare se stanno cercando di inferire le proprietà dell'insieme Cantor simulando da esso.
Glen_b -Restate Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.