Fonction sur une liste de modele

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

Morgane Labadie
Messages : 12
Enregistré le : 11 Oct 2016, 20:32

Fonction sur une liste de modele

Messagepar Morgane Labadie » 12 Fév 2017, 03:54

Bonjour a tous,

Je vous écris car je dois avouer ne pas savoir trop comment monter une fonction qui me permettra d'extraire certaine donnée de plusieurs modèles que j'ai fait rouler.
Je m'explique, je veux faire de l'inférence multimodale mais pour cela je dois aller récupérer le n, LL, K, SE et estimate dans 8 modeles différents.

Par exemple pour mon modele 1, je dois aller récupérer les informations suivantes :

Code : Tout sélectionner

"n"=mod1$results$n, "LL"=mod1$results$lnl*(-1), "K"=mod1$results$npar, "SE[1]"= mod1$results$real$se[1], "SE[2]"=mod1$results$real$se[2], "Estimate[1]"=mod1$results$real$estimate[1], "Estimate[2]"=mod1$results$real$estimate[2]


J'ai essaye cette commande :

Code : Tout sélectionner

Mod.real <-apply(Cand.models.124ind, FUN = function(i) {subset(i, c("n"= i$results$n, "LL"=i$results$lnl*(-1), "K"=i$results$npar, "SE[1]"= i$results$real$se[1], "SE[2]"=i$results$real$se[2], "Estimate[1]"=i$results$real$estimate[1], "Estimate[2]"=i$results$real$estimate[2]))})

ou Cand.models.124ind = liste de mes modeles

Il me met ensuite le message d'erreur suivant : Error in apply(Cand.models.124ind, FUN = function(i) { :
  dim(X) doit avoir un longueur positive


Malheureusement je comprends que j'ai une erreur mais je ne vois pas trop quoi modifier ^^

Merci d'avance pour vos commentaires et votre aide

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Fonction sur une liste de modele

Messagepar Logez Maxime » 14 Fév 2017, 08:23

Bonjour,

l'erreur vient du fait que la fonction apply s'applique à un objet à deux dimensions ou plus (data.frame, matrice, array) et pas sur un vecteur ou une liste. Pour ton souci, si tes modèles ont tous la même structure, pourquoi ne pas créer une fonction générique qui récupère toutes les infos qui t'intéressent et l'appliquer par la suite à chacun de tes modèles ? Quelque chose comme ça :

Code : Tout sélectionner

#pour l'exemple
x <- rnorm(100)
y <- 3*x-2+rnorm(100,0,2)

mod0 <- lm(y ~1)
mod1 <- lm(y ~x)

fun <- function(model) {
  n <- model$rank
  cfs <- model$coefficients
  r2 <- summary(model)$adj.r.squared
  res <- list(n =n, coef = cfs, R2 = r2)
  res
  }
 
# la liste des modèles
l1 <- ls(pattern = "^mod")

resultats <- lapply(l1, function(x) eval(substitute(fun(X), list(X=as.name(x)))))
names(resultats) <- l1
Cordialement,
Maxime

Morgane Labadie
Messages : 12
Enregistré le : 11 Oct 2016, 20:32

Re: Fonction sur une liste de modele

Messagepar Morgane Labadie » 17 Fév 2017, 15:01

Merci en effet c'est une très bonne idée.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité