Come posso generare manualmente un numero casuale da una determinata distribuzione, come ad esempio 10 realizzazioni dalla distribuzione normale standard?
Come posso generare manualmente un numero casuale da una determinata distribuzione, come ad esempio 10 realizzazioni dalla distribuzione normale standard?
Risposte:
Se "manualmente" include "meccanico" allora hai molte opzioni a tua disposizione. Per simulare una variabile di Bernoulli con metà probabilità, possiamo lanciare una moneta: per le code, 1 per le teste. Per simulare una distribuzione geometrica possiamo contare quanti lanci di monete sono necessari prima di ottenere le teste. Per simulare una distribuzione binomiale, possiamo lanciare la nostra moneta n volte (o semplicemente lanciare n monete) e contare le teste. La "quincunx" o "macchina per fagioli" o "scatola di Galton" è un'alternativa più cinetica - perché non metterne in azione e vedere di persona ? Sembra che non esista una "moneta ponderata"ma se desideriamo variare il parametro di probabilità del nostro Bernoulli o variabile binomiale su valori diversi da , l'ago di Georges-Louis Leclerc, il conte di Buffon ci permetterà di farlo. Per simulare la distribuzione uniforme e discreta su { 1 , 2 , 3 , 4 , 5 , 6 } lanciamo un dado a sei facce. I fan dei giochi di ruolo avranno incontrato dadi più esotici , ad esempio dadi tetraedrici per campionare uniformemente da { 1 , 2 , 3 , 4 }, mentre con un filatore o una ruota della roulette si può andare ancora più lontano. ( Credito immagine )
Dovremmo essere pazzi per generare numeri casuali in questo modo oggi, quando è solo un comando di distanza su una console di computer - o, se abbiamo una tabella adatta di numeri casuali disponibile, una incursione negli angoli più polverosi dello scaffale? Bene forse, anche se c'è qualcosa di piacevolmente tattile in un esperimento fisico. Ma per le persone che lavoravano prima dell'era del computer, anzi prima delle tabelle numeriche casuali su larga scala ampiamente disponibili (di cui più avanti), la simulazione manuale delle variabili casuali aveva un'importanza pratica. Quando Buffon indagò sul paradosso di San Pietroburgo- il famoso gioco del lancio delle monete in cui la quantità che il giocatore vince raddoppia ogni volta che viene lanciata una testa, il giocatore perde sulle prime code e il cui rendimento atteso è controintuitivamente infinito - doveva simulare la distribuzione geometrica con . Per fare ciò, sembra che abbia assunto un bambino per lanciare una moneta per simulare 2048 partite del gioco di San Pietroburgo, registrando quanti tiri prima della fine del gioco. Questa distribuzione geometrica simulata è riprodotta in Stigler (1991) :
Tosses Frequency
1 1061
2 494
3 232
4 137
5 56
6 29
7 25
8 8
9 6
Nello stesso saggio in cui pubblicò questa indagine empirica sul paradosso di San Pietroburgo, Buffon introdusse anche il famoso " ago di Buffon ". Se un piano è diviso in strisce da linee parallele distanti una distanza , e un ago di lunghezza l ≤ d viene lasciato cadere su di esso, la probabilità che l'ago attraversi una delle linee è di 2 l .
L'ago di Buffon può quindi essere usato per simulare una variabile casuale oX∼Binomiale(n,2l, e possiamo regolare la probabilità di successo alterando la lunghezza dei nostri aghi o (forse più convenientemente) la distanza alla quale governiamo le linee. Un uso alternativo degli aghi di Buffon è un modo terribilmente inefficiente per trovare un'approssimazione probabilistica diπ. L'immagine (credito) mostra 17 fiammiferi, di cui 11 attraversano una linea. Quando la distanza tra le linee rette è impostata uguale alla lunghezza del fiammifero, come qui, la proporzione prevista di fiammiferi incrociati è2 e quindi si può stimare π come due volte il reciproco della frazione osservato: qui otteniamo π =2⋅17. Nel 1901 Mario Lazzarini ha affermato di aver eseguito l'esperimento utilizzando aghi di 2,5 cm con linee 3 cm di distanza, e dopo 3408 lanci ottenuti π =355 . Questo è un razionale ben noto aπ, preciso con sei decimali. Badger (1994) fornisce prove convincenti che ciò era fraudolento, non ultimo quello di essere fiducioso al 95% di sei cifre decimali di precisione usando l'apparato di Lazzarini, bisogna lanciare 134 trilioni di aghi che sbalzano la pazienza! Certamente l'ago di Buffon è più utile come generatore di numeri casuali che come metodo per stimareπ .
Finora i nostri generatori sono stati deludentemente discreti. E se volessimo simulare una distribuzione normale? Un'opzione è ottenere cifre casuali e usarle per formare buone approssimazioni discrete a una distribuzione uniforme su , quindi eseguire alcuni calcoli per trasformarle in deviazioni normali casuali. Uno spinner o una roulette potrebbero fornire cifre decimali da zero a nove; un dado può generare cifre binarie; se le nostre abilità aritmetiche sono in grado di far fronte a una base più funkier, farebbe anche un set standard di dadi. Altre risposte hanno coperto questo tipo di approccio basato sulla trasformazione in modo più dettagliato; Rinvio ogni ulteriore discussione al riguardo fino alla fine.
Alla fine del diciannovesimo secolo l'utilità della distribuzione normale era ben nota, e quindi c'erano statistici desiderosi di simulare deviati normali casuali. Inutile dire che i lunghi calcoli manuali non sarebbero stati adatti se non per impostare il processo di simulazione in primo luogo. Una volta stabilito ciò, la generazione dei numeri casuali doveva essere relativamente semplice e veloce. Stigler (1991) elenca i metodi impiegati da tre statistici di questa era. Tutti studiavano tecniche di livellamento: deviatori normali casuali erano di evidente interesse, ad esempio per simulare errori di misurazione che dovevano essere livellati.
Il notevole statistico americano Erastus Lyman De Forest era interessato a smussare le tabelle di vita e incontrò un problema che richiedeva la simulazione dei valori assoluti dei deviati normali. In quello che si dimostrerà un tema corrente, De Forest stava davvero campionando da una distribuzione quasi normale . Inoltre, anziché usare una deviazione standard di uno (la che siamo abituati a chiamare "standard"), De Forest voleva un "probabile errore" (deviazione mediana) di uno. Questa era la forma data nella tabella di "Probabilità di errori" nelle appendici di "Un manuale di astronomia sferica e pratica, volume II" diWilliam Chauvenet . Da questa tabella, De Forest ha interpolato i quantili di una distribuzione semi-normale, da a p = 0,995 , che ha ritenuto essere "errori di uguale frequenza".
Se desideri simulare la distribuzione normale, seguendo De Forest, puoi stampare questa tabella e tagliarla. De Forest (1876) scrisse che gli errori "sono stati incisi su 100 pezzi di cartoncino di uguali dimensioni, che sono stati scossi in una scatola e tutti estratti uno per uno".
L'astronomo e meteorologo Sir George Howard Darwin (figlio del naturalista Charles) ha dato una svolta diversa alle cose, sviluppando quella che ha chiamato una "roulette" per generare deviati normali casuali. Darwin (1877) descrive come:
Un pezzo di carta circolare è stato graduato radialmente, quindi una graduazione contrassegnata con era 720gradi distante da un raggio fisso. La carta è stata fatta girare attorno al suo centro vicino a un indice fisso. È stato quindi girato più volte e, interrompendolo, è stato letto il numero opposto all'indice. [Darwin aggiunge in una nota a piè di pagina: è meglio fermare il disco quando gira così velocemente che le graduazioni sono invisibili, piuttosto che lasciarlo scorrere.] Dalla natura della laurea i numeri così ottenuti si verificheranno esattamente allo stesso modo in cui si verificano nella pratica errori di osservazione; ma non hanno segni di addizione o sottrazione con prefisso. Quindi lanciando una moneta ancora e ancora e chiamando teste+e code-, i segni o - sono assegnati per caso a questa serie di errori.
"Indice" dovrebbe essere letto qui come "puntatore" o "indicatore" (vedi "dito indice"). Stigler sottolinea che Darwin, come De Forest, stava usando una distribuzione cumulativa quasi normale attorno al disco. Successivamente l'uso di una moneta per attaccare un segno a caso rende questa una distribuzione completamente normale. Stigler osserva che non è chiaro quanto finemente sia stata graduata la bilancia, ma presume che l'istruzione per arrestare manualmente il mid-spin del disco fosse "per ridurre la potenziale propensione verso una sezione del disco e accelerare la procedura".
Sir Francis Galton , tra l'altro mezzo cugino di Charles Darwin, è già stato menzionato in relazione al suo quinconce. Mentre questo simula meccanicamente una distribuzione binomiale che, secondo il teorema di De Moivre – Laplace assomiglia in modo sorprendente alla distribuzione normale (e viene occasionalmente usata come supporto didattico per quell'argomento), Galton ha effettivamente prodotto uno schema molto più elaborato quando desiderava campione da una distribuzione normale. Ancora più straordinario degli esempi non convenzionali in cima a questa risposta, Galton ha sviluppato dadi distribuiti normalmente- o più precisamente, una serie di dadi che producono un'eccellente approssimazione discreta a una distribuzione normale con una deviazione mediana. Questi dadi, risalenti al 1890, sono conservati nella Collezione Galton presso l'University College di Londra.
In un articolo del 1890 su Nature, Galton scrisse che:
Come strumento per selezionare a caso, non ho trovato nulla di meglio dei dadi. È più noioso mescolare accuratamente le carte tra ogni estrazione successiva, e il metodo di mescolare e mescolare le palline segnate in una borsa è ancora più noioso. A questi è preferibile un astemio o una qualche forma di roulette, ma i dadi sono migliori di tutti. Quando vengono scossi e gettati in un cesto, si scuotono in modo così vario l'uno contro l'altro e contro le costole del cesto che si agitano selvaggiamente, e le loro posizioni all'inizio non forniscono alcun indizio percettibile su ciò che saranno anche dopo un unico buon scuotimento e lancio. Le possibilità offerte da un dado sono più diverse di quanto si pensi comunemente; ci sono 24 pari possibilità, e non solo 6, perché ogni faccia ha quattro spigoli che possono essere utilizzati, come mostrerò.
Raazesh Sainudiin's Laboratory for Mathematical Statistical Experiments include un progetto studentesco dell'Università di Canterbury, in Nuova Zelanda, che riproduce i dadi di Galton . Il progetto include un'indagine empirica dal lancio dei dadi molte volte (incluso un CDF empirico che sembra rassicurantemente "normale") e un adattamento dei punteggi dei dadi in modo che seguano la distribuzione normale standard. Usando i punteggi originali di Galton, c'è anche un grafico della distribuzione normale discretizzata che i punteggi dei dadi seguono effettivamente.
Su vasta scala, se sei pronto ad allungare il "meccanico" all'elettrico, nota che l'epico RAND A Million Random Digits con 100.000 Normal Deviates si basava su una sorta di simulazione elettronica di una ruota della roulette. Dal rapporto tecnico (di George W. Brown, originariamente giugno 1949) troviamo:
Così motivato, il personale RAND, con l'assistenza del personale tecnico della Douglas Aircraft Company, ha progettato una ruota per roulette elettronica basata su una variante di una proposta fatta da Cecil Hastings. Ai fini di questo discorso sarà sufficiente una breve descrizione. Una sorgente di impulsi di frequenza casuale era controllata da un impulso di frequenza costante, circa una volta al secondo, che forniva in media circa 100.000 impulsi in un secondo. I circuiti di standardizzazione degli impulsi hanno passato gli impulsi a un contatore binario a cinque posizioni, in modo che in linea di principio la macchina sia come una ruota della roulette con 32 posizioni, realizzando in media circa 3000 giri per giro. È stata utilizzata una conversione binaria in decimale, eliminando 12 delle 32 posizioni e la cifra casuale risultante è stata inserita in un punzone IBM, producendo tabelle di schede perforate di cifre casuali.
i test sulle frequenze delle cifre pari e dispari hanno rivelato che alcuni lotti presentavano un leggero squilibrio. Questo è stato peggio in alcuni lotti rispetto ad altri, suggerendo che "la macchina si stava esaurendo nel mese dalla sua messa a punto ... Le indicazioni su questa macchina hanno richiesto una manutenzione eccessiva per mantenerlo in perfetta forma". Tuttavia, è stato trovato un modo statistico per risolvere questi problemi:
A questo punto avevamo le nostre milioni originali di cifre, 20.000 carte IBM con 50 cifre su una carta, con il piccolo ma percettibile pregiudizio pari-dispari rivelato dall'analisi statistica. Ora è stato deciso di randomizzare il tavolo, o almeno di modificarlo, con un po 'di roulette giocando con esso, per eliminare il pregiudizio dispari-pari. Abbiamo aggiunto (mod 10) le cifre in ogni carta, cifra per cifra, alle cifre corrispondenti della carta precedente. La tabella derivata di un milione di cifre è stata quindi sottoposta a vari test standard, test di frequenza, test seriali, test di poker, ecc. Questi milioni di cifre hanno un buono stato di salute e sono stati adottati come la moderna tabella di cifre casuali di RAND.
Naturalmente c'erano buone ragioni per credere che il processo di aggiunta avrebbe fatto del bene. In generale, il meccanismo sottostante è l'approccio limitante di somme di variabili casuali modulo l'intervallo unitario nella distribuzione rettangolare, allo stesso modo in cui somme illimitate di variabili casuali si avvicinano alla normalità. Questo metodo è stato utilizzato da Horton e Smith, dell'Interstate Commerce Commission, per ottenere alcuni buoni lotti di numeri apparentemente casuali da lotti più grandi di numeri gravemente non casuali.
Riferimenti
Badger, L. (1994). " Lazzarini's Lucky Approximation of π ". Rivista di matematica . Associazione matematica dell'America. 67 (2): 83–91.
Darwin, GH (1877). " Sulle misure fallibili di quantità variabili e sul trattamento delle osservazioni meteorologiche. " Philosophical Magazine , 4 (22), 1–14
De Forest, EL (1876). Interpolazione e regolazione delle serie . Tuttle, Morehouse e Taylor, New Haven, Conn.
Galton, F. (1890). "Dadi per esperimenti statistici". Natura , 42 , 13-14
Stigler, SM (1991). "Simulazione stocastica nel diciannovesimo secolo". Statistical Science , 6 (1), 89-97.
"Chiunque consideri i metodi aritmetici per produrre cifre casuali è, ovviamente, in uno stato di peccato. Perché, come è stato sottolineato più volte, non esiste un numero casuale - ci sono solo metodi per produrre numeri casuali e ovviamente una rigorosa procedura aritmetica non è un tale metodo. "
Ad esempio, sul mio sistema operativo Linux, posso verificare
$ date +%s.%N
1479733744.077762986
$ date +%s.%N
1479733980.615056616
> sqrt(-2*log(.077762986))*cos(2*pi*.615056616)
[1] -1.694815
Addendum: poiché i logaritmi di calcolo e i coseni possono essere considerati non abbastanza manuali , esiste una variante di Box-Müller che evita di usare quelle funzioni trascendentali (vedi Esercizio 2.9 nel nostro libro Metodi statistici di Monte Carlo ):
Ora, si può discutere contro questa versione a causa dei variati esponenziali. Ma esiste anche un modo molto intelligente di simulare quei variati senza un richiamo alle funzioni trascendentali , dovuto a von Neumann, come riassunto in questo algoritmo riprodotto dai variati casuali non uniformi di Luc Devroye :
Certo, richiede il calcolo di 1 / e, ma solo una volta.
Se non hai accesso a questo orologio, puoi sostituire questo generatore uniforme con un generatore uniforme meccanico , come lanciare un dardo su una superficie con un gran numero di quadrati di unità o rotolare una palla su un intervallo di unità con abbastanza rimbalzi [come nell'esperimento concettuale del biliardo di Thomas Bayes] o ancora lanciando fiammiferi su un pavimento di legno con assi di larghezza unitaria e contando la distanza fino alla separazione più a sinistra più vicina [come nell'esperimento di Buffon] o ancora per avviare una ruota della roulette con il numero 1 il più basso e trasforma l'angolo risultante di 1 con l'orientamento iniziale in uniforme disegnare.
Utilizzando il CLT alla normalità approssimativa è di certo non è un metodo che avrei mai consigliare come (1) è ancora necessario altro variates per alimentare la media, quindi potrebbe anche utilizzare uniformi nell'algoritmo Box-Müller, e (2) l'accuratezza cresce abbastanza lentamente con il numero di simulazioni. Soprattutto se si utilizza una variabile casuale discreta come il risultato di un dado, anche con più di sei facce . Per citare da Thomas et al. (2007), un sondaggio sui pro e contro dei generatori casuali gaussiani:
Il teorema del limite centrale ovviamente è un esempio di un metodo "approssimativo" - anche se si usa l'aritmetica perfetta, per K finita l'output non sarà gaussiano.
Ecco un breve esperimento per illustrare il problema: ho generato 100 volte la media di 30 esiti di die:
dies=apply(matrix(sample(1:6,30*100,rep=TRUE),ncol=30),1,mean)
poi ha normalizzato quelle medie in varianza zero media variando una
stdies=(dies-3.5)/sqrt(35/12/30)
e esaminato l'adattamento normale [o la mancanza di esso] di questo campione:
In primo luogo, l'adattamento non è eccezionale, specialmente nelle code, e in secondo luogo, piuttosto ovviamente, l'immagine conferma che il numero di valori presi dal campione è imbarazzantemente finito. (In questo particolare esperimento, c'erano solo 34 valori diversi presi da dies
, tra 76/30
e 122/30
.) In confronto, se sfruttassi gli stessi 3000 esiti di dado per creare abbastanza cifre di una pseudo-uniforme come
dies=matrix(apply(matrix(sample(0:5,15*200,rep=TRUE),nrow=15)/6^(1:15),2,sum),ncol=2)
norma=sqrt(-2*log(dies[,1]))*c(cos(2*pi*dies[,2]),sin(2*pi*dies[,2]))
l'adattamento è buono come ci si può aspettare per un campione normale di dimensione 200 (basta tracciare un altro per un campione normale vero norma=rnorm(100)
):
come ulteriormente dimostrato da un test di Kolmogorov-Smirnov:
> ks.test(norma,pnorm)
One-sample Kolmogorov-Smirnov test
data: norma
D = 0.06439, p-value = 0.3783
alternative hypothesis: two-sided
Questo non è esattamente casuale, ma dovrebbe essere abbastanza vicino, poiché sembra che tu voglia un esperimento approssimativo.
Usa il tuo telefono per configurare un cronometro. Dopo ben 10 secondi, fermalo (Più aspetti, più ti avvicini a un risultato veramente "casuale", ma 10 secondi vanno bene). Prendi le ultime cifre (ad esempio, 10,67 secondi ti daranno 67). Applicare la tabella percentile per la distribuzione normale. In questo esempio, devi solo cercare 0.67 e troverai il numero. In questo caso, il tuo valore è di circa 0,45. Questo non è perfettamente preciso, ma ti darà una stima solida.
Se passi sotto 50, fai solo 100- [Il tuo risultato] e usa la tabella. Il risultato sarà lo stesso, con un segno meno, a causa della simmetria di N (0,1).
Lanciamo una moneta imparziale volte. A partire da zero, contiamo se esce testa, se croce. Dopo lancio della moneta, dividiamo il contatore per . Utilizzando il teorema del limite centrale , se è sufficientemente grande, quindi dovremmo avere una "realizzazione approssimativa" del gaussiano normalizzato .
Perché? Permettere
tra le variabili casuali di Bernoulli con . Quindi,
Permettere . Quindi,
normalizzazione,
otteniamo una variabile casuale con varianza unitaria
Vale la pena notare che una volta che è possibile generare un'uniforme (0,1), è possibile generare qualsiasi variabile casuale per la quale il cdf inverso è calcolabile semplicemente collegando la variabile casuale uniforme nel CDF inverso.
Quindi, come si può calcolare manualmente un'uniforme (0,1)? Bene, come menzionato da @Silverfish, ci sono una varietà di dadi usati dai tradizionali giocatori di ruolo. Uno dei quali è un dado a dieci facce. Supponendo che questo sia un dado equo, ora possiamo generare un'uniforme discreta (0, 9).
Possiamo anche usare questa uniforme (0,9) per rappresentare una singola cifra di una variabile casuale. Quindi se usiamo due dadi, otteniamo una variabile casuale uniforme che può assumere valori. Con tre dadi, possiamo ottenere una distribuzione uniforme su.
Quindi possiamo avvicinarci molto a un'uniforme continua (0,1) approssimandola con una distribuzione uniforme discreta finemente grigliata con alcuni dadi a 10 facce. Questo può quindi essere inserito in un CDF inverso per produrre la variabile casuale di interesse.