Referências e práticas recomendadas para definir sementes na geração de números pseudo-aleatórios

11

No presente documento , que as preocupações do comando "set semente", Stata pessoas discutem questões relacionadas com a definição de sementes ao gerar números pseudo-aleatórios.

Um notável "não" é "não use em série a sequência de números naturais como sementes, porque isso tem um padrão e põe em risco a pseudo-aleatoriedade".

Um "fazer" de apenas um quarto e de brincadeira é definir apenas uma semente durante sua vida útil e depois registrar o "estado" do processo gerado no final de cada experimento, para que o próximo experimento continue no ponto onde o processo parou.

Obviamente, o conselho acima depende da contagem esperada de números pseudo-aleatórios que um irá gerar em sua vida útil de pesquisa. Talvez um twister de Mersenne cubra as necessidades da vida de muitos pesquisadores ...

Agora, como não tenho muita experiência com PRNGs, na teoria ou na prática, não posso argumentar sobre essas sugestões - elas devem ser comprovadamente válidas ou inválidas por razões teóricas e estatísticas matemáticas difíceis.

Então, minhas perguntas são

1) Você pode ajudar a explicar ou invalidar os conselhos fornecidos acima, ou apontar para uma referência que lida com esses problemas?

2) Você pode fornecer referências que ofereçam "melhores práticas" na definição de sementes?

3) Como você faz isso em seu próprio trabalho e por quê?

Como exemplo para a pergunta 3), suponha que, para um estudo de Monte Carlo, você queira gerar amostras cada uma com tamanho , e que seu tenha um período suficientemente maior que . Você geraria todos os números pseudo-aleatórios com uma semente ou você tem o hábito de mudar as sementes, por exemplo, por amostra? (mas isso é apenas para ilustração - acredito que respostas mais gerais valem a pena aqui). mnPRNGmnmn

Um encadeamento relacionado (embora muito mais focado) é
Definir semente antes de cada bloco de código ou uma vez por projeto?

Eu tenho a sensação de que talvez isso deva ser um wiki da comunidade, os mods decidem sobre isso.

Alecos Papadopoulos
fonte
4
Essa página do manual Stata faz suposições implícitas importantes sobre o motivo pelo qual alguém está usando uma semente. A principal razão pela qual eu uso sementes (nas minhas postagens aqui no CV) é criar exemplos reproduzíveis. Para demonstrar que não brinquei com a semente até que o exemplo fosse do meu agrado (!), Eu (quase) sempre uso a mesma semente. Isso contradiz tão flagrantemente os conselhos da Stata porque tenho um propósito diferente do que eles devem ter em mente (o que não é declarado). A moral aqui é que as melhores práticas dependem do objetivo.
whuber
@whuber Meu sentimento é que o conselho dado no documento que mencione visa preservar a "aleatoriedade" e a reprodutibilidade das séries utilizadas (através da gravação do "estado" do processo, como se costuma dizer). Esses objetivos parecem valer a pena perseguir em qualquer organização, seja qual for o objetivo da pesquisa, não?
Alecos Papadopoulos
11
Certamente eles valem a pena - mas isso não justifica transformá-los em "prós e contras" definidos, conforme expresso nessa página de manual. O problema com esses dicta não- categoriais é que outros - como advogados - serão levados a pensar que qualquer prática contrária é inerentemente errada, independentemente do objetivo ou das circunstâncias. É importante deixar espaço para julgamento na prática da estatística! Em particular, não confundamos recomendações para o uso de software com "melhores práticas".
whuber
@whuber O fato de eu ter usado como "estímulo" um documento vinculado a um software específico não faz com que minha pergunta seja sobre "recomendações para o uso de software". As perguntas colocadas são obviamente sobre políticas usadas pelos pesquisadores na condução de pesquisas estatísticas , portanto não vejo confusão aqui.
Alecos Papadopoulos
3
Supondo que o seu PRNG seja bom, por que definir sementes com um padrão faria alguma diferença, não é esse o objetivo dos PRNGs?
quer

Respostas:

3

Pelo que vale, isso se baseia na experiência e não na análise matemática:

Eu acho que, a menos que você esteja fazendo criptografia, onde padrões sutis podem ser muito ruins, qual semente você define não faz diferença, desde que você use bons PRNGs aceitos como Mersenne Twister e não antigos como geradores congruenciais lineares. Tanto quanto eu sei, não há nenhuma maneira que você pode dizer o número aleatório vai sair de uma determinada semente sem realmente executar o PRNG (assumindo que é um decente), caso contrário, você teria apenas que tomar esse novo algoritmo eo uso que como seu gerador de números aleatórios.

Outra perspectiva: você acha que quaisquer padrões sutis em sua simulação de Monte-Carlo provavelmente têm uma magnitude maior do que todos os erros, confusões e erros de medição introduzidos por outras suposições de modelagem?

Eu usaria apenas uma semente aleatória no início para reprodutibilidade, e não a definiria antes de cada chamada, a menos que esteja fazendo depuração, onde preciso garantir que dois algoritmos diferentes produzam o mesmo resultado para os mesmos dados de entrada.

Isenção de responsabilidade: se você simular reatores nucleares, sistemas de controle de mísseis ou previsão do tempo, é melhor consultar especialistas em domínio, não me responsabilizo nesse caso.

purple51
fonte