Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

Le deal à ne pas rater :
Manga Chainsaw Man : où acheter le Tome 17 édition Collector de ...
19.99 €
Voir le deal

Générer un nombre selon une densité

4 participants

Aller en bas

Générer un nombre selon une densité Empty Générer un nombre selon une densité

Message par AdrienC Jeu 25 Avr 2019 - 12:40

Bonjour Smile

J'ai un petit soucis sur R. En effet, j'ai à ma disposition plusieurs observations (une centaine) et à partir de ça j'ai pu créer un histogramme puis j'ai estimé non paramétriquement la densité qui en découle (avec la commande density). L'objectif est de générer aléatoirement un nombre selon cette densité estimée. J'avais pensé à faire un tirage aléatoire dans ma liste d'observations brutes mais ce n'est pas la même chose que générer un nombre selon une densité de probabilité que j'ai estimée.

Bonne journée

Adrien
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par droopy Ven 26 Avr 2019 - 9:23

Bonjour,

quelque chose comme ça :
Code:
# exemple :
y <- c(runif(10000), rnorm(10000))
d1 <- density(y)
# données générées
N <- 1000
yfit <- approx(cumsum(d1$y)/sum(d1$y), d1$x, runif(N))$y

# représentation graphique
library(ggplot2)
df <- data.frame(Y = c(y, yfit), fac = rep(c("y", "yfit"), c(length(y), length(yfit))))
ggplot(df, aes(Y, color = fac)) + geom_density()
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par AdrienC Ven 26 Avr 2019 - 12:16

merci beaucoup
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par Eric Wajnberg Ven 26 Avr 2019 - 15:01

Plutôt que d'estimer une densité de proba, et de s'en servir pour tirer dedans, pourquoi ne pas tirer directement dans la distribution empirique observée ?

Il y a plusieurs méthodes pour faire ceci. La plus simple (et qui est celle que j'utilise tout le temps), est d'abord de calculer la fonction de répartition empirique. Il y a sous R la fonction ecdf() qui fait ceci. Ensuite, il faut travailler sur le graphe de cette fonction (avec en abscisse x, et en ordonnée la distribution empirique cumulée qui va de 0 à max(x)). L'idée dans ce cas est de tirer uniformément (runif()) une valeur de y (dans l'intervalle [0; max(x)]) et de prendre comme valeur tirée la coordonnée x correspondante, ou plus précisément, la plus petite valeur de x qui vérifie "F(x) supérieur ou égale à y" (ou F(x) est la fonction en question et y est la valeur tirée aléatoirement uniformément).

Ca tient en deux-trois lignes de code. Il y a des exemples ici: https://stephens999.github.io/fiveMinuteStats/inverse_transform_sampling.html (et dans plein d'autres sites web).

HTH, Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par zezima Lun 29 Avr 2019 - 6:59

Bonjour, je trouve le sujet intéressant.

Par curiosité, dans quel cadre as-tu eu besoin de générer ce nombre aléatoire en fonction de la densité de ta population ?
(à quoi ça sert derrière en gros)
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par AdrienC Lun 29 Avr 2019 - 9:52

Bonjour, mon directeur de thèse m'a demandé de faire un algorithme où je dois créer un échantillon synthétique de ma base de données qui me sert de base d'entraînement. Je ne dois pas piocher directement dans les valeurs "brutes" mais bien en tirer une aléatoirement selon la densité estimée.

Ca vient du cadre des forêts aléatoires dans le cadre non supervisés (qui permet d'obtenir une matrice de similarité entre les individus) ==> deux individus sont "proches" s'ils tombent souvent dans la même feuille dans chaque arbre de la forêt. Pour créer la forêt, on suppose que les individus de la base sont de classe A et on crée un échantillon synthétique de classe B.

C'est pour ça que j'avais besoin de générer des individus synthétiques. Ce ne sont pas forcément des individus qui existent dans la base.


Je vous remercie Eric pour votre dernier message, c'est exactement de ça dont j'avais besoin !
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par zezima Lun 29 Avr 2019 - 11:37

D'accord, merci pour ces explications.

Donc c'est une manière de simuler un jeu de données "test" en plus du jeu de données "entrainement" qui existe déjà.
Par contre si je comprends bien, la simulation ne se fait que sur une variable à la fois, c'est bien ça ?
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par Eric Wajnberg Lun 29 Avr 2019 - 12:09

Une référence incontournable ici est le bouquin de Rubinstein :

https://www.wiley.com/en-us/Simulation+and+the+Monte+Carlo+Method%2C+3rd+Edition-p-9781118632161

Un vrai bijou !

Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par AdrienC Lun 29 Avr 2019 - 12:30

Je vous remercie pour les méthodes de Monte Carlo. C'est ça que je cherche à bien comprendre. C'est un outil vraiment incontournable de la statistique.

Oui la simulation se fait qu'une variable par variable. L'idéal serait de le faire de façon multivariée pour que ce soit plus réaliste Smile
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par Eric Wajnberg Lun 29 Avr 2019 - 17:30

AdrienC a écrit:L'idéal serait de le faire de façon multivariée pour que ce soit plus réaliste Smile
Mais on peut faire des tirages en multivarié. Sinon, on néglige les corrélations entre les variables et le schéma de simulation devient faux. Le principe est le même, mais avec un calcul matriciel au milieu (et une décomposition de Cholesky de la matrice de variance-covariance). Ici aussi, il existe pas mal de ressources sur le web.

HTH, Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par AdrienC Mar 30 Avr 2019 - 8:52

Rebonjour, est-ce que la procédure que vous utilisez pour simuler des données à partir d'une méthode de Monte-Carlo basée sur la matrice de variance covariance (avec une décomposition de Choleski) a un nom en particulier ?

Car j'ai vu sur certains articles qu'ils partent souvent du fait que la distribution de mes variables est normale ce qui n'est pas du tout mon cas.

Je vous remercie

Bonne journée

Adrien
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par AdrienC Mar 30 Avr 2019 - 10:25

J'ai trouvé, je vous remercie Smile
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par zezima Mar 30 Avr 2019 - 11:41

Re-bonjour,

Est-ce que c'est possible que tu partages la procédure ? Smile
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par AdrienC Mar 30 Avr 2019 - 12:24

Oui bien sur Smile

Soit X le tableau de données de dimension (n,p). On commence par calculer la matrice de variance-covariance empirique S.

Ensuite, on calcule la décomposition de Choleski où S = t(B)*B avec B est une matrice triangulaire inférieure.

On simule 1000 observations Y selon une loi normale N(0, I_p) avec I_p qui est la matrice identité de dimension (p,p) et avec l'espérance = (0,....,0) ==> p fois.

Le tableau simulé Y* = A + Y*B avec A qui est une matrice (1000,p) simulée selon une loi normale N(0,I_p).

Cette matrice A sert pour rajouter le terme d'erreur


http://www.unit.eu/cours/cyberrisques/etage_3_frederic/co/Module_Etage_3_28.html

Pour la référence
AdrienC
AdrienC

Nombre de messages : 93
Date d'inscription : 15/03/2018

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par zezima Mar 30 Avr 2019 - 14:53

Merci c'est très clair Smile
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Générer un nombre selon une densité Empty Re: Générer un nombre selon une densité

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum