Question:
How do I get "V-shaped" distributed random numbers from uniformly distributed numbers?
user137425
2014-03-23 22:53:39 UTC
view on stackexchange narkive permalink

J'ai 1000 nombres aléatoires uniformément répartis. Comment les manipuler pour obtenir un histogramme en forme de V?

«En forme de V» n'est pas un terme précis. Il n'y a aucun moyen pour nous de savoir si vous voulez dire quelque chose qui ressemble à $ f (x) = | x | $ sur $ x \ in [-1,1] $, ou $ f (x) = 1- | x | $ sur $ x \ in [-1,1] $, par exemple.
Je veux dire quelque chose comme le $ f (x) = | x | $
$ f (x) = | x | $ ne fonctionnera pas si vos données sont $ \ mathcal U (0,1) $. Vos données sont-elles uniformes sur (-1, 1)? Avez-vous simplement essayé de soustraire 0,5, de multiplier par 2 et de prendre ensuite la valeur absolue? Avez-vous besoin des données réelles pour avoir la distribution en «V», ou simplement l'histogramme?
Je veux juste l'histogramme des nombres uniformément distribués. Je n'ai pas de données réelles.
Est-ce pour un sujet?
Oui. Je dois générer des variables aléatoires uniformément distribuées dans Excel, puis les transformer en nombres aléatoires à partir de ce type de distribution.
Cinq réponses:
Szabolcs
2014-03-24 04:08:26 UTC
view on stackexchange narkive permalink

Recherchez la "méthode de transformation" ou la "méthode de transformation inverse", qui est un moyen de générer des nombres aléatoires avec une distribution arbitraire. Vous trouverez de nombreuses notes de cours décrivant l'idée. Voici la page wikipedia: Échantillonnage par transformée inverse. Il contient des liens vers des ressources plus détaillées en bas.

Le résultat de base est cette recette: si vous avez besoin d'une distribution $ D $, alors

  1. trouvez son CDF et inversez il.
  2. générer des nombres aléatoires uniformément répartis entre 0 et 1
  3. transformer ces nombres avec l'inverse CDF pour obtenir des nombres distribués selon $ D $

Le calcul ne peut pas être effectué de manière analytique pour chaque distribution. Pour votre distribution, c'est possible. Si le domaine du "V" est $ [- 1,1] $, alors le PDF est $ | x | $, le CDF est $ (1+ \ operatorname {sign} (x) x ^ 2) / 2 $ , et le CDF inverse sera $$ \ operatorname {sign} (2x-1) \ sqrt {| 1-2x |} $$

Par exemple, dans Mathematica

Ilmari Karonen
2014-03-24 04:18:44 UTC
view on stackexchange narkive permalink

Si $ X $ et $ Y $ sont des variables aléatoires indépendantes uniformément distribuées sur $ [0,1] $, alors $ X + Y $ a une distribution en forme de pyramide ou en "V inversé" sur $ [0,2] $ .

Tout ce que nous devons faire pour transformer cette pyramide en un V est d'échanger les deux moitiés de la distribution.

Ainsi, étant donné $ X, Y \ sim \ mathcal U indépendant (0,1) $, soit $$ Z = \ begin {cases} X + Y & \ text {if} X + Y < 1 \\ X + Y-2 & \ text {sinon.} \ End {cases} $$

La variable aléatoire $ Z $ aura alors la forme en V de la distribution que vous voulez sur $ [- 1,1] $.

D'où vient votre $ Y $?
@NickStauner: À partir du générateur de nombres aléatoires, identique à $ X $. Je ne suis pas sûr de comprendre votre question.
Francis Smart
2014-03-24 04:26:50 UTC
view on stackexchange narkive permalink

Cela devrait vraiment être un commentaire sous la réponse ci-dessus. Mais comme je n'ai pas assez de réputation pour faire ce commentaire je le posterai ici. Dans la question que vous avez initialement demandé comment faire cela dans "Excel". Cela devrait le faire,

=SIGN(2*RAND()-1)*(ABS(1-2*RAND()))^0.5 

Une note intéressante à la réponse précédente est qu'elle ne change pas du tout la distribution de la variable créée si vous utilisez une variable aléatoire uniforme (la même pour les deux) pour générer la distribution en V ou deux (pour le signe fonction et la fonction abs).

Ben Elizabeth Ward
2014-03-24 02:42:45 UTC
view on stackexchange narkive permalink

Vous voulez utiliser $ U \ sim \ text {Uniform} (0,1) $. Vous recherchez quelque chose qui s'appelle Probability Integral Transform (PIT).

Si $ X \ sim F $ alors, $ F (X) \ sim \ text {Uniforme} (0,1) $. Par conséquent, vous trouverez d'abord le CDF pour la distribution qui vous intéresse, puis vous vous transformerez. Par exemple, si vous voulez $ f (x) = | x | $, $ x \ in (-1,1) $, intégrez pour obtenir $ F (x) = P (X \ leq x) = \ begin {cases} \ frac {-x ^ 2} {2} + \ frac {1} {2} & x \ leq 0 \\ \ frac {x ^ 2} {2} + \ frac {1} {2} & x> 0 \ end {cases} $. Ensuite, $ F ^ {- 1} (u) \ sim F $

Glen_b
2014-03-24 02:49:09 UTC
view on stackexchange narkive permalink

Il existe une variété d'approches qui pourraient convenir.

Même avec les commentaires, vous ne l'avez pas vraiment assez épinglé (vous donnez un exemple de ce que vous voulez, mais pas de la gamme de cas que vous voulez considérer), mais voici quelques exemples d'approches:

1) échantillonnage de rejet. Générez un uniforme sur la plage souhaitée et utilisez le rejet pour obtenir la distribution souhaitée. Cela fonctionne assez généralement et peut être rendu raisonnablement efficace même pour des cas assez généraux. Les variantes d'échantillonnage par rejet, comme l'approche ziggurat, peuvent être très rapides, mais peuvent être assez fastidieuses à mettre en place si vous ne voulez que quelques nombres.

2) Pour le cas de $ f (x) = | x | $ sur $ (- 1,1) $. Soit $ U_1, U_2 $ un uniforme standard iid. Alors $ \ text {max} (U_1, U_2) $ a une distribution comme la moitié positive de la densité désirée. Soit $ Z $ un signe aléatoire - c'est-à-dire $ \ {- 1, +1 \} $ avec une probabilité égale. Alors $ X = Z \, \ text {max} (U_1, U_2) $ a la distribution désirée.

3) (suivant la même configuration que dans (2)): Soit $ V = \ sqrt {U_1} $, et attachez-y un signe aléatoire, $ X = Z \, V $. (Ceci utilise la transformation intégrale de probabilité pour obtenir V de la bonne forme.)

Il existe d'innombrables autres approches avec des mélanges variés de commodité et de vitesse. Par exemple, l’approche de (2) peut être utilisée pour générer deux ces variables à la fois, et si la vitesse est primordiale, le bit requis pour un signe aléatoire peut être pris dans l’un des uniformes utilisés. (de préférence avant de normaliser à (0,1), puis le décalage de bits ou un facteur de mise à l'échelle plus petit utilisé pour prendre ce qui reste encore uniforme); cette approche ultérieure pourrait être utilisée dans (3) par exemple, ou dans une version modifiée de (1).



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...