Simulation densité

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

namaa ghassan
Messages : 27
Enregistré le : 15 Déc 2016, 15:56

Simulation densité

Messagepar namaa ghassan » 27 Nov 2021, 16:51

Bonjour ,

j'aimerai simuler la densité suivante : f(x) = (x**α−1 * (1 − x)**β−1) / (δ + (x − 1/2 )**2)

j'ai mis en place ce bout de code mais j'ai des erreurs
avez-vous une idée de comment l'adapter ?

Code : Tout sélectionner

fb_density <- function(x){
    return   ((x^(alpha-1))*((1 - x)^(beta-1)))/ (delta + (x - 1/2)^2)
}

simule.densite0<-function(n, alpha, beta, delta) {
  ok<-FALSE
  while(!ok) {
    x<-runif(n, alpha, beta)
    y<-runif(1, 0, beta(alpha, beta)/delta)
    ok <- y<fb_density(x)
  }
  x
}


l'erreur que j'obtiens
> simule.densite0(3,2,3,3)
Error in fb_density(x) : objet 'alpha' introuvable

Merci pour votre aide

marlyse clement
Messages : 7
Enregistré le : 27 Oct 2021, 17:25

Re: Simulation densité

Messagepar marlyse clement » 27 Nov 2021, 20:21

Bonjour

Pour moi C'est pas fonction qu'il faut appeler après l'avoir creer mais le nom qui a été attribué , pour l'appliquer


simule.densite0<-fb_density(n, alpha, beta, delta) {
ok<-FALSE
while(!ok) {
x<-runif(n, alpha, beta)
y<-runif(1, 0, beta(alpha, beta)/delta)
ok <- y<fb_density(x)
}
x
}

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Simulation densité

Messagepar Serge Rapenne » 28 Nov 2021, 00:12

Bonjour,

la portée d'une variable est par défaut limité à son environnement d’exécution, ce qui signifie, que toutes les variables définis dans une fonction ne sont connues qu'à l’intérieur de cette fonction.
Dans ton code alpha, beta et delta ne sont donc connus que dans la fonction simule.densite0, si tu veux les utiliser dans une autre fonction, le mieux est de le passer comme paramètre :

Code : Tout sélectionner

fb_density <- function(x,alpha,beta,delta){
    return   ((x^(alpha-1))*((1 - x)^(beta-1)))/ (delta + (x - 1/2)^2)
}

puis au moment d’appeler cette fonction dans simule.densite0

Code : Tout sélectionner

ok <- y<fb_density(x,alpha,beta,delta)


Une remarque complémentaire. Utiliser comme nom de variable le nom d'une une fonction est à éviter surtout si tu l’utilises dans ton code. A la 1ere lecture, je me suis dit que la ligne

Code : Tout sélectionner

y<-runif(1, 0, beta(alpha, beta)/delta)
avait un pb, pour moi beta était une variable est donc ce code n'avait pas de sens avant de comprendre qu'il existait aussi une fonction beta dans les fonctions de base de R

Serge


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité