Ciò introdurrà pregiudizi in quelli che dovrebbero essere numeri casuali?


11

Supponi un file di dati con oltre 80 milioni di zeri e zero, generato casualmente.

Da questo file, vogliamo creare un elenco di numeri decimali casuali.

Questo è il piano per fare questa conversione.

  1. Dividi gli 80 milioni di cifre in gruppi di 4 cifre binarie.
  2. Converti ogni binario di 4 cifre in decimale.
  3. Elimina tutti i valori decimali superiori a 9.

Ciò dovrebbe comportare una stringa di numeri interi casuali da 0-9

Ecco la preoccupazione. Le 24 cifre binarie che comprendono i 6 raggruppamenti di 4 cifre binarie che corrispondono ai valori da 10 a 15 ne contengono 17 e solo 7 zeri. Questo squilibrio influenzerà la distribuzione di numeri pari o dispari o comprometterà in qualche modo la casualità della stringa finale di cifre decimali?

Aggiornamento: dalle risposte pubblicate, sembra che il metodo elencato sopra sia valido. Sono d'accordo con questa conclusione. Tuttavia, non capisco ancora perché rimuovere più del doppio di quanti siano gli zeri dalla stringa binaria non distorce il risultato verso un numero minore di numeri dispari. Cerco spiegazioni.


9
Esistono metodi più efficienti. Ad esempio, è possibile partizionare la stringa di bit in gruppi di 10, convertirli nelle loro rappresentazioni a tre cifre base 10 e scartarne una con valori 1000 o superiori. Ciò utilizzerebbe il 97,6% dei bit anziché solo il 62,5% di essi. Non puoi fare molto meglio di così. (È possibile utilizzare gruppi di 681 e convertirli in stringhe di base 10 di 205 cifre, utilizzando quindi quasi il 99,7% dei bit.)
whuber

Risposte:


18

Contiamo e vediamo. Dalla costruzione del file, tutte le stringhe a 4 bit sono ugualmente probabili. Esistono 16 stringhe di questo tipo. Eccoli:

 0. 0000
 1. 0001
 2. 0010
 3. 0011
 4. 0100
 5. 0101
 6. 0110
 7. 0111
 8. 1000
 9. 1001
10. 1010
11. 1011
12. 1100
13. 1101
14. 1110
15. 1111

La tua procedura elimina le stringhe da 10 a 15. Quindi, nei casi in cui usi effettivamente, sceglierai da 0 a 9, ognuno dei quali è ugualmente probabile, come desiderato. E sappiamo che le cifre decimali generate sono indipendenti l'una dall'altra perché ognuna utilizza una stringa separata di 4 bit e tutti i bit sono indipendenti. La procedura costituisce un tipo semplice di campionamento del rifiuto .


5
Vedo chiaramente questa logica. Tuttavia, sono preoccupato di scartare più 1 binari che 0. Perché questo squilibrio non ha alcun impatto?
Joel W.

5
@JoelW Immagino di non vedere la tua discussione. La distribuzione finale riguarda cifre decimali, non bit, quindi la distribuzione di bit è irrilevante.
Kodiologo il

7
Questo è corretto, ma affronta solo parzialmente la domanda. Per affrontare la "casualità di compromesso ... in qualsiasi modo" parte della domanda, si deve anche stabilire che le cifre decimali risultanti sono, con un'approssimazione eccellente, indipendenti . Per completezza, vale la pena dedicare una frase di spiegazione a quel risultato (ovvio).
whuber

7
Joel, vedo da dove vieni. Potrebbe esserci un malinteso qui: non è possibile invertire il processo. Se volessi ricostruire un flusso di bit dal flusso di cifre decimali, dovresti fare qualcosa come eliminare tutti gli 8 e 9 e convertire le cifre rimanenti in triple binarie. Ciò ripristinerà l'equilibrio. In effetti, è facile vedere che questo "round trip" equivale a spezzare il flusso originale in nybbles a quattro bit e scartare i loro bit più significativi, lasciando una sequenza uniformemente distribuita di 60 milioni di bit.
whuber

1
@whuber Abbastanza giusto; aggiunto.
Kodiologo il

4

Non ci sono errori poiché si simulano solo alcuni valori che vengono scartati e tutti i valori inclusi quelli che vengono mantenuti vengono generati con la stessa probabilità: inserisci qui la descrizione dell'immagine

Il codice R per il grafico sopra è

generza=matrix(sample(0:1,4*1e6,rep=TRUE),ncol=4)
uniz=generza[,1]+2*generza[,2]+4*generza[,3]+8*generza[,4]
barplot(hist(uniz[uniz<10],breaks=seq(-0.5,9.5,le=11))$counts,col="steelblue")
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.