Références et meilleures pratiques pour définir des germes dans la génération de nombres pseudo-aléatoires

11

Dans ce document , qui concerne la commande "set seed", les gens de Stata discutent des problèmes liés à la définition des graines lors de la génération de nombres pseudo-aléatoires.

Un "non" notable est "ne pas utiliser en série la séquence de nombres naturels comme graines, car cela a un modèle et met en danger le pseudo-aléatoire".

Un «quart » notable, en plaisantant , consiste à définir une seule graine au cours de votre vie , puis à enregistrer «l'état» du processus généré à la fin de chaque expérience, afin que l'expérience suivante se poursuive au point où le processus s'est arrêté.

De toute évidence, les conseils ci-dessus dépendent du nombre attendu de nombres pseudo-aléatoires que l'on générera au cours de sa vie de recherche. Un twister de Mersenne couvrirait peut-être les besoins à vie de nombreux chercheurs ...

Maintenant, je n'ai pas beaucoup d'expérience en ce qui concerne les PRNG en théorie ou en pratique, donc je ne peux pas discuter de ces suggestions - elles devraient être prouvées valides ou invalides pour des raisons théoriques et des statistiques mathématiques dures.

Donc, mes questions sont

1) Pouvez-vous aider à expliquer ou à invalider les conseils donnés ci-dessus, ou indiquer une référence qui traite de ces questions?

2) Pouvez-vous fournir des références qui proposent des "meilleures pratiques" pour la création de graines?

3) Comment procédez-vous dans votre propre travail et pourquoi?

mnPRNGmnmn

Un thread connexe (bien que beaucoup plus ciblé) est
Set seed avant chaque bloc de code ou une fois par projet?

J'ai le sentiment que cela devrait peut-être être un wiki communautaire, les mods s'il vous plaît décider à ce sujet.

Alecos Papadopoulos
la source
4
Cette page de manuel Stata fait des hypothèses implicites importantes sur la raison pour laquelle on utilise une graine. La principale raison pour laquelle j'utilise des graines (dans mes publications ici sur CV) est de créer des exemples reproductibles. Afin de démontrer que je n'ai pas joué avec la graine jusqu'à ce que l'exemple soit à mon goût (!), J'utilise (presque) toujours la même graine. Cela contredit de manière flagrante les conseils de Stata parce que j'ai un objectif différent de celui qu'ils doivent avoir à l'esprit (qui n'est pas déclaré). La morale ici est que les meilleures pratiques dépendent du but.
whuber
@whuber Mon sentiment est que les conseils donnés dans le document que je mentionne visent à préserver à la fois le "hasard" et la reproductibilité des séries utilisées (à travers l'enregistrement de "l'état" du processus, comme on dit). Ces objectifs semblent mériter d'être poursuivis dans n'importe quelle configuration, quel que soit le but de la recherche, non?
Alecos Papadopoulos
1
Bien sûr, ils en valent la peine - mais cela ne justifie pas de les transformer en «dos» et «à ne pas faire» tels qu'exprimés par cette page de manuel. Le problème avec une telle uncategorical dicta est que d' autres - comme les avocats - seront amenés à penser que toute pratique contraire est intrinsèquement mauvais, quel que but ou circonstances. Il est important de laisser une place au jugement dans la pratique de la statistique! En particulier, ne confondons pas les recommandations d'utilisation des logiciels avec les "meilleures pratiques".
whuber
@whuber Le fait que j'utilise comme "stimulus" un document lié à un logiciel spécifique ne fait pas que ma question porte sur les "recommandations d'utilisation d'un logiciel". Les questions posées concernent évidemment les politiques utilisées par les chercheurs pour mener des recherches statistiques , je ne vois donc pas de confusion ici.
Alecos Papadopoulos
3
En supposant que votre PRNG est bon, pourquoi la définition de graines avec un motif ferait-il une différence, n'est-ce pas tout l'intérêt des PRNG?
purple51

Réponses:

3

Pour ce que ça vaut, c'est basé sur l'expérience et non sur l'analyse mathématique:

Je pense qu'à moins que vous ne fassiez de la cryptographie, où les modèles subtils peuvent être très mauvais, la graine que vous définissez ne fait aucune différence, tant que vous utilisez de bons PRNG acceptés comme Mersenne Twister et pas d'anciens comme des générateurs linéaires congruents. Pour autant que je sache, il n'y a aucun moyen que vous pouvez dire ce nombre aléatoire sortira d'une graine donnée sans réellement en cours d' exécution PRNG ( en supposant qu'il est un décent), sinon vous simplement prendre ce nouvel algorithme et l' utilisation que comme générateur de nombres aléatoires.

Autre perspective: pensez-vous que des motifs subtils dans votre simulation Monte-Carlo sont susceptibles d'être d'une ampleur plus grande que toutes les erreurs de mesure, confondantes et erreurs introduites par d'autres hypothèses de modélisation?

Je voudrais simplement utiliser une graine aléatoire au début pour la reproductibilité, et ne pas en définir une avant chaque appel, sauf si je fais du débogage, où je dois m'assurer que deux algorithmes différents produisent le même résultat pour les mêmes données d'entrée exactes.

Avertissement: si vous simulez des réacteurs nucléaires ou des systèmes de contrôle de missiles ou des prévisions météorologiques, il est préférable de consulter des experts du domaine, je ne prends aucune responsabilité dans ce cas.

violet51
la source