Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Algorithme pour générer une loi Béta

Posté par
ThT12
25-02-09 à 14:03

Bonjour à tous !

Voilà mon problème : J'ai besoin d'écrire un script (C++) qui me permette de générer une loi Beta(a,b). Après quelque recherche j'ai trouvé un méthode simple qui fonctionne bien :

il suffit de générer 2 loi X1=gamma(a,1) et X2=gamma(b,1) et ainsi en faisant X1/(X1+X2) j'obtiens un nombre tirée dans la loi Beta(a,b)

Et pour générer les loi gamma(x,1) il suffit de faire le log de x fois le produit d'une loi uniforme :log(U(0,1)). C'est donc impect tant que a et b sont supérieur à 1 !

En gros tout mon soucie est là a et b doivent être supérieur à 1 : moi je voudrais générer une loi beta(0.5,0.5), par exemple. Dans ce cas l'algorithme ci dessus ne fonctionne plus du tout !

J'ai beau eu chercher j'ai rien trouvé! Quelqu'un se serait-il déjà penché sur le problème et/ou à une solution ?

Merci beaucoup!
ThT12

Edit : La méthode de rejet peut-elle être utiliser dans ce cas ?

Posté par
ThT12
re : Algorithme pour générer une loi Béta 26-02-09 à 12:44

Personne n'a une petite idée ?

Merci

ThT12

Posté par
pythamede
re : Algorithme pour générer une loi Béta 26-02-09 à 12:59

Je ne connais pas la loi béta. Mais j'ai un algorithme qui permet de générer d'importe quelle loi, pourvu qu'on connaisse la fonction caractéristique de cete loi.

Posté par
ThT12
re : Algorithme pour générer une loi Béta 26-02-09 à 13:59

Bonjour Pythamede,

Merci pour ta réponse.
Là comme ça je n'ai pas la fonction caractéristique de la loi Beta, mais je devrais pouvoir trouver ça (bien qu'elle semble relativement compliquée). Je suis donc preneur de ton algorithme si tu le veux bien!

Merci

ThT12

Posté par
pythamede
re : Algorithme pour générer une loi Béta 27-02-09 à 09:49

L'idéal est d'avoir la réciproque de la fonction caractéristique. Si cette dernière est compliquée, il y a des chances que la réciproque soit bien pire donc on va se contenter de la fonction caractéristique elle-même.

Soit p la densité de probabilité d'une VA.

La fonction caractéristique est donnée par : P(x)=\int_{-\infty}^x\,\,p(t) dt

\lim_{x \to -\infty}\,\,P(x)=0  et \lim_{x \to +\infty}\,\,P(x)=1

Pour obtenir une VA de loi p, je propose de tirer aléatoirement un nombre avec une fonction pseudo aléatoire du type de celles qui sont proposées couramment dans divers langages, et qui fournit une variable y équirépartie sur [0,1[.

Alors la variable X définie par P(X)=y a pour loi p.

Si l'on dispose de la fonction réciproque de la fonction caractéristique, il suffit de calculer X=P^{-1}(y). Dans le cas contraire, on peut tabuler P de -\infty à +\infty (ben, on fait ce que l'on peut dans un ordinateur !) dans un tableau tab et pour chaque tirage de r sorti de la fonction random on cherche k tel que tab[k]\le r < tab[k+1]. Le résultat sera évidemment d'autant plus fidèle que le tableau K sera grand. Je l'ai fait moi-même sur une gaussienne : mon tableau tab contenait un million de réels.

Posté par
ThT12
re : Algorithme pour générer une loi Béta 27-02-09 à 11:07

Merci pour ton algorithme.

Mais la fonction caractéristique que tu donne n'est pas plutôt la fonction de répartition ?
Enfin en tout cas ton algo fonctionne effectivement bien avec la fonction de répartition. C'est d'ailleurs avec X=P^{-1}(y) que sont simuler la plus part des lois.

Ici, effectivement, je n'ai pas la fonction inverse, et en faite je n'avais même pas trouvé jusque là la fonction de répartition (je viens juste de la trouver).

Du coup, avec la fonction de répartition, il me semble qu'il est possible d'utiliser un algorithme du rejet, qui est probablement moins lourd en calcule que celui que tu proposes et probablement plus précis. Je vais regarder ça!

Merci de ton aide!
ThT12

Posté par
ThT12
re : Algorithme pour générer une loi Béta 27-02-09 à 11:30

Autant pour moi, l'algorithme du rejet de nécessite uniquement d'avoir la fonction de densité... Mais que celle ci soit bornée.
Cela devrait marché pour moi bien que je ne sais pas réellement si la fonction de densité de la loi béta soit bornée.

Merci

ThT12

Posté par
pythamede
re : Algorithme pour générer une loi Béta 27-02-09 à 15:30

Citation :
Mais la fonction caractéristique que tu donne n'est pas plutôt la fonction de répartition ?


Si, bien sûr ! Au temps pour moi ! Il s'agit bien de la fonction de répartition... Grosse erreur de terme !

Posté par
stokastik
re : Algorithme pour générer une loi Béta 09-03-09 à 21:17


Bonjour,

  Pour simuler tes Beta proprement, il y a probablement ton bonheur dans l'excellent 'Handbook on Statistical Distributions' de Christian Walck : .

Posté par
Camélia Correcteur
re : Algorithme pour générer une loi Béta 10-03-09 à 16:22

Un revenant! Bonjour stokastik

Posté par
stokastik
re : Algorithme pour générer une loi Béta 10-03-09 à 21:01

Salut Camélia ouais tu me manquais lol

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !