Je recherche un algorithme pour générer un tableau de N nombres aléatoires, tel que la somme des N nombres soit 1, et tous les nombres se situent entre 0 et 1. Par exemple, N = 3, le point aléatoire (x, y, z) doit se trouver dans le triangle:
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
Idéalement, je veux que chaque point dans la zone ait une probabilité égale. Si c'est trop difficile, je peux supprimer l'exigence. Merci.
Réponses:
Supposons d'abord que vous souhaitez échantillonner dans
Cela ne fait pas une grande différence, car le point d'échantillonnage se trouvera toujours dans votre zone demandée avec une forte probabilité.
Il vous reste maintenant à échantillonner un point d'un simplexe . Dans l'exemple 3D, vous obtenez un simplexe 2D (triangle) réalisé en 3D.
Comment choisir un point uniformément au hasard a été discuté dans ce billet de blog (voir les commentaires).
Pour votre problème, cela signifierait que vous prenez nombres aléatoires de l'intervalle ( 0 , 1 ) , puis vous ajoutez un 0 et 1 pour obtenir une liste de n + 1 nombres. Vous triez la liste, puis vous enregistrez les différences entre deux éléments consécutifs. Cela vous donne une liste de n nombres qui totalisera 1 . De plus, cet échantillonnage est uniforme. Cette idée peut être trouvée dans Donald B. Rubin, The Bayesian bootstrap Ann. Statist. 9, 1981, 130-134.n - 1 ( 0 , 1 ) 0 1 n + 1 n 1
Par exemple ( ) vous avez les trois nombres aléatoires puis vous obtenez la séquence triée et cela donne les différences , et par construction ces quatre nombres résument à 1.n = 4
0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Une autre approche est la suivante: premier échantillon de l'hypercube (c'est-à-dire que vous oubliezré d−1 . Par conséquent, si vous échantillonnez uniformément à partir de l'hypercube, cela ne vous donnera pas un échantillonnage uniforme dans le simplex. Cependant, si vous échantillonnez à partir de l'hypercube avec une distribution exponentielle appropriée, cet effet s'annule. La figure vous donne une idée de la façon dont les deux méthodes seront échantillonnées. Cependant, je préfère la méthode de "tri" en raison de sa forme simple. Il est également plus facile à mettre en œuvre.
x+y+z=1
), puis normaliser le point d'échantillonnage. La normalisation est une projection du hypercube au d - 1- simplex. Il devrait être intuitivement clair que les points au centre du simplex ont plus de "points de pré-image" qu'à l' extérieurla source
Il s'agit d'ajouter aux réponses existantes.
Devroye est une excellente référence pour des questions de ce genre. Le chapitre 7 donne les algorithmes nécessaires pour générer des statistiques d'ordre uniforme, que l'OP recherche.
la source
Ici,
uniform(0,1)
renvoie un nombre réel indépendamment et uniformément réparti entre 0 et 1.la source
Voir cet article : Smith, N. et Tromble, R., échantillonnage uniforme à partir de l'unité simplex .
la source