2016-03-23 15 views
7

Sto cercando di replicare in R un po 'di codice che qualcun altro ha scritto in Stata e ho colpito un muro cercando di prevedere il comportamento del loro p-RNG.Replicare le impostazioni dei semi da Stata

Il loro codice ha questo frammento:

set seed 123456 

Purtroppo, è un po 'nebulosa esattamente l'algoritmo utilizzato da Stata. La domanda This suggerisce che si tratta di un algoritmo KISS, ma alla fine non è riuscito a replicare (e alcuni link sembrano morti/obsoleti). E the manual di Stata per set seed non menziona nulla sugli algoritmi. Anche la domanda This non sembra essere stata completata.

È una commissione da scemo provare a replicare i numeri casuali di Stata?

Non so quale versione di Stata è stata utilizzata per creare questo.

+4

Se non si conosce quale versione è stata utilizzata, il problema è effettivamente più difficile in quanto si desidera replicare un programma ma non è possibile essere precisi su quale programma. http://blog.stata.com/2016/03/10/how-to-generate-random-numbers-in-stata/ fornisce una panoramica e sottolinea che il metodo predefinito è cambiato in Stata 14. http: // www .stata.com/manuals14/fn.pdf dice di più. –

+0

Una domanda che hai citato http: // StackOverflow.it/questions/35139808/make-prngs-agree-across-software non è stato contrassegnato come "Stata" e non ha incluso il codice Stata. Ha appena citato Stata di passaggio. Quindi, non sorprende che non abbia ricevuto risposta in termini di Stata. –

+0

@NickCox grazie mille per i collegamenti, davvero molto utile. Ho modificato la risposta qui sotto, penso che sia molto più canonico ora, dovresti sentirti libero di aggiungere/modificare se lo ritieni opportuno. – MichaelChirico

risposta

8

In breve: Sì, è un compito da pazzi.

Stata, essendo un software proprietario, non ha rilasciato tutti i dettagli dei suoi componenti principali, come il suo generatore di numeri casuali. Tuttavia, documentation is available (collegamento per Stata 14), più pertinente:

runiform() è alla base di tutte le altre funzioni di numeri casuali per tutte le altre funzioni random- numero trasformano uniforme (0 1) numeri casuali per la distribuzione specificata.

runiform() implementa il Mersenne Twister 64 bit (MT64) ei “mantenerlo semplice stupido” algoritmi 32 bit (KISS32) per generare uniforme (0, 1) numeri casuali. runiform() utilizza l'algoritmo MT64 per impostazione predefinita.

runiform() utilizza l'algoritmo KISS32 solo quando la versione utente è inferiore a 14 o quando il generatore di numeri casuali è stato impostato a kiss32 ...

Ricordiamo anche da ?Random in R che, per Mersenne twister:

Il "seme" è un insieme 624-dimensionale di numeri interi a 32 bit più una posizione corrente in tale serie.

Stata controlla internamente il set 624-dimensionale, che dovrebbe essere quasi impossibile da indovinare.

Suggerisco di esportare questi numeri casuali da Stata e leggerli in un vettore/matrice/ecc. in R utilizzando

library(haven) 
mydata <- read_dta("mydata.dta") 
+0

Grazie. Sfortunatamente non ho una versione locale di Stata, quindi andrò avanti. – MichaelChirico