Les posteurs les plus actifs de la semaine
Eric Wajnberg
 
zezima
 
Nik
 
margotte185
 
c@ssoulet
 
Coco
 
Ayana
 


Une fonction pour simuler un modèle Non-Linéaire

Voir le sujet précédent Voir le sujet suivant Aller en bas

Une fonction pour simuler un modèle Non-Linéaire

Message par zezima le Ven 27 Oct 2017 - 8:58

Bonjour,


Je suis à la recherche d'une fonction R qui simulerait des jeux de données aléatoires en fonction de la structure d'une fonction non-linéaire.

J'ai cherché au niveau de la fonction simulate() mais elle n'est adaptée que aux données linéaires.
J'ai également cherché au niveau de MCPMod::genDFdata() mais elle n'est adaptée qu'à un nombre restreint de modèle.

Mon modèle NL n'est pas assez connu pour être dans une fonction, je l'ai écrit dans R et j'ai réussi à le faire fitter et à avoir une estimation des paramètres.
C'est à partir de ces paramètres que j'aimerais faire des simulations aléatoires.


Si quelqu'un sait comment faire ceci, ça m'aiderait beaucoup.

Merci d'avance
avatar
zezima

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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Une fonction pour simuler un modèle Non-Linéaire

Message par zezima le Ven 27 Oct 2017 - 9:30

J'ai trouvé cette fonction qui semble répondre à la problématique, reste à vérifier si on peut la manier comme on le souhaite :

simulate.nls(), du package "investr"

Elle n'est disponible que sous R 3.3.3 donc si comme moi vous n'avez pas cette version de R, voici le code de la fonction :
Code:

simulate.nls <- function (object, nsim = 1, seed = NULL, ...) {
  
  # Initialize random number generator
  if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE))
    runif(1)
  if (is.null(seed))
    RNGstate <- get(".Random.seed", envir = .GlobalEnv)
  else {
    R.seed <- get(".Random.seed", envir = .GlobalEnv)
    set.seed(seed)
    RNGstate <- structure(seed, kind = as.list(RNGkind()))
    on.exit(assign(".Random.seed", R.seed, envir = .GlobalEnv))
  }
  
  # Simulate new response values
  ftd <- fitted(object)  # fitted values
  nm <- names(ftd)  # row names
  n <- length(ftd)  # number of observations
  ntot <- n * nsim  # number of observations to simulate
  vars <- deviance(object) / df.residual(object)  # residual variance
  if (!is.null(object$weights)) {
    vars <- vars/object$weights
  }
  val <- ftd + rnorm(ntot, sd = sqrt(vars))  # simulated response values
  
  # Return simulated response values with appropriate dimension, class, etc.
  if (!is.list(val)) {
    dim(val) <- c(n, nsim)  # assign dimensions (should b n-by-nsim)
    val <- as.data.frame(val)  # convert to data frame
  } else {
    class(val) <- "data.frame"
  }
  names(val) <- paste("sim", seq_len(nsim), sep = "_")
  if (!is.null(nm)) {
    row.names(val) <- nm
  }
  attr(val, "seed") <- RNGstate
  val
  
}

Précision : les données simulées seront non-appariées, il est également possible de manier la fonction pour choisir nous-même la variabilité pour chaque point simulé
avatar
zezima

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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Une fonction pour simuler un modèle Non-Linéaire

Message par Eric Wajnberg le Ven 27 Oct 2017 - 13:46

zezima a écrit:J'ai cherché au niveau de la fonction simulate() mais elle n'est adaptée que aux données linéaires.
Pourtant, les exemples donnés dans la doc on-line de simulate() inclue un exemple avec une régression logistique, qui est loin d'être un modèle linéaire.

Eric.
avatar
Eric Wajnberg

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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Une fonction pour simuler un modèle Non-Linéaire

Message par zezima le Ven 27 Oct 2017 - 13:55

Oui en effet, je faisais référence aux données continues.
avatar
zezima

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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Une fonction pour simuler un modèle Non-Linéaire

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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