Je n'ai jamais suivi de cours de statistiques et j'espère donc poser mes questions au bon endroit ici.
Supposons que je ne dispose que de deux données décrivant une distribution normale: la moyenne et la variance . Je souhaite utiliser un ordinateur pour échantillonner de manière aléatoire cette distribution, de manière à respecter ces deux statistiques.σ 2
Il est assez évident que je puisse gérer la moyenne en normalisant simplement autour de 0: ajoutez simplement à chaque échantillon avant de le sortir en sortie. Mais je ne vois pas comment générer par programme des échantillons pour respecter .σ 2
Mon programme sera dans un langage de programmation conventionnel; Je n'ai accès à aucun logiciel statistique.
Réponses:
Si vous pouvez échantillonner à partir d'une distribution donnée avec une moyenne 0 et une variance 1, vous pouvez facilement échantillonner à partir d'une transformation d' échelle-emplacement de cette distribution, qui a une moyenne et une variance . Si est un échantillon d'une distribution moyenne 0 et de variance 1 alors est un échantillon avec la moyenne et la variance . Donc, tout ce que vous avez à faire est d’adapter la variable à l’écart-type (racine carrée de la variance) avant d’ ajouter la moyenne .σ 2 x σ x + μ μ σ 2 σ μμ σ2 X
Comment vous obtenez réellement une simulation à partir d'une distribution normale avec une moyenne de 0 et une variance 1 est une autre histoire. C'est amusant et intéressant de savoir comment implémenter de telles choses, mais que vous utilisiez un logiciel de statistiques ou un langage de programmation ou non, je vous recommanderai d'obtenir et d'utiliser une fonction ou une bibliothèque appropriée pour la génération de nombres aléatoires. Si vous souhaitez des conseils sur la bibliothèque à utiliser, vous pouvez ajouter des informations spécifiques sur le ou les langages de programmation que vous utilisez.
Edit: À la lumière des commentaires, d’autres réponses et du fait que Fixee a accepté cette réponse, je vais donner quelques détails supplémentaires sur la manière dont on peut utiliser les transformations de variables uniformes pour produire des variables normales.
À la fin de la journée, une méthode correctement mise en œuvre n'est pas meilleure que le générateur de nombre pseudo aléatoire uniforme utilisé. Personnellement, je préfère faire appel à des bibliothèques spécialisées qui, à mon avis, sont fiables. Je me base presque toujours sur les méthodes implémentées dans R, soit directement dans R, soit via l’API en C / C ++. Évidemment, ce n'est pas une solution pour tout le monde, mais je ne connais pas suffisamment les autres bibliothèques pour recommander des alternatives.
la source
Ceci est vraiment un commentaire sur la réponse de Michael Lew et celui de Fixee, mais est posté comme réponse car je n'ai pas la réputation sur ce site pour commenter.
la source
Outre la réponse de NRH, si vous ne disposez toujours pas des moyens de générer des échantillons aléatoires à partir d'une "distribution normale standard" N (0,1), voici un moyen simple et bon (puisque vous indiquez que vous ne possédez pas de statistiques les fonctions ci-dessous devraient être disponibles dans la plupart des langages de programmation standard).
1. Générez u et v sous forme de deux nombres aléatoires uniformément répartis allant de -1 à 1, par
u = 2 r1 - 1
etv = 2 r2 - 1
2.calculer
w = u^2 + v^2
si w> 1 le retour à 13.retournez u * z et y = v * z avec
z= sqrt(-2ln(w)/w)
Un exemple de code ressemblerait à ceci:utilisez ensuite ce que MHR a suggéré ci-dessus pour obtenir les écarts aléatoires
N(mu, sigma^2)
.la source
La distribution normale émerge quand on additionne beaucoup de valeurs aléatoires de distribution similaire (similaires les unes aux autres, je veux dire). Si vous additionnez au moins dix valeurs aléatoires uniformément réparties, la somme est presque normalement distribuée. (Ajoutez plus de dix si vous voulez que ce soit encore plus normal, mais dix suffisent à presque toutes les fins.)
Supposons que vos valeurs aléatoires uniformes soient uniformément réparties entre 0 et 1. La somme sera alors comprise entre 0 et 10. Soustrayez 5 de la somme et la moyenne de la distribution résultante sera 0. Vous divisez maintenant le résultat par l'écart type de la distribution (presque) normale et multipliez le résultat par l'écart type souhaité. Malheureusement, je ne sais pas quel est l'écart-type de la somme de dix écarts aléatoires uniformes, mais si nous avons de la chance, quelqu'un nous le dira dans un commentaire!
Je préfère parler aux étudiants de la distribution normale en ces termes car l'utilité de l'hypothèse d'une distribution normale dans de nombreux systèmes provient entièrement de la propriété que la somme de nombreuses influences aléatoires conduit à une distribution normale.
la source