IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Boucle for pour une procédure gls


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 9
    Points : 14
    Points
    14
    Par défaut Boucle for pour une procédure gls
    Bonjour à tous,

    j'ai un soucis pour mettre une boucle for sur une procédure GLS.

    Je vous explique mon problème. J'étudie plusieurs performances sur plusieurs individus au cours du temps.
    Ma gls simple s'écrit de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A<-gls(PERF~LOT*SA, data = DV1, corr=corAR1(form = ~ 1|REP), na.action = na.exclude, method="REML")
    PERF représente la performance
    LOT * SA : les 2 facteurs d'étude (LOT et Semaine d'Age)
    DV1 est le nom de ma base de données
    REP représente la REPétition (ie l'individu dans ce cas).

    Cette procédure tourne très bien et me permet par la suite de sortir une ANOVA de façon simple.

    Petit soucis, j'ai un nombre très important de performances. J'aimerais donc faire une boucle for sur mon code afin d'automatiser tout ça. Mon but étant d'avoir en sortie les anova des différentes performances.

    J'utilise communément la structuration en boucle for avec des lm() par le code qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i in c(5:10))
    { 
      ano<-lm(DV1[,i]~LOT*SA, data=DV1)
      print(Anova(ano))  
      print(summary(ano))
    }
    Je me suis donc d'abord inspiré de cela en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i in c(5:10))
    { 
      ano<-gls(DV1[,i]~LOT*SA, data = DV1, corr=corAR1(form = ~ 1|REP), na.action = na.exclude, method="REML")
      print(Anova(ano)) 
    }
    Et j'obtiens le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error in model.frame.default(formula = ~REP + DV1 + i + LOT + SA, data = list( : 
      type (list) incorrect pour la variable 'DV1'

    J'ai le sentiment qu'il ne comprend pas l'écriture DV1[,i].

    Auriez vous déjà rencontrer ce type de problème et si oui, comment le résoudre ?


    D'avance merci,


    Cléo

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    j'ai eu le même soucis avec glmer, je pense que la solution doit être la même.

    le problème vient que tu donnes un environnement à tes variables, via le "data=DV1". Du coup, il cherche dans DV1, une matrice qui s'appelle aussi DV1, pour en extraire la colonne i. Du coup il ne trouve rien.

    Une petite astuce (qui n'est surement pas la plus efficace mais qui marche), c'est de passer pars des vecteurs intermédiaires, et quitter le data frame, pour ne plus avoir d'environnement dans la fonction :


    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LOT<-DV1$LOT
    SA<-DV1$SA
    REP<-DV1$REP
    for(i in c(5:10))
    { 
      vect<- DV1[,i]
      ano<-gls(vect~LOT*SA,  corr=corAR1(form = ~ 1|REP), na.action = na.exclude, method="REML")
      print(Anova(ano)) 
    }

    J'ai testé chez moi, ça fonctionne.

    De plus, je pense que les formules préfèrent les noms pour appeler les variables, et que passer par les index peut empêcher de tourner.

    Il y a peut être un moyen de faire de la concaténation de nom, avec la fonction paste, puis de transformer le tout avec as.formula, pour obtenir ce qui est attendu par la fonction. à tester..

    J'espère que cela va t'aider.

Discussions similaires

  1. [XL-2016] Réaliser une boucle for pour une donnée qui apparaît plusieurs fois dans un tableau
    Par bangibess dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/02/2016, 16h26
  2. [PHP 5.2] Boucle for pour une date
    Par zemzoum89 dans le forum Langage
    Réponses: 5
    Dernier message: 29/05/2010, 23h20
  3. boucle for pour une requete
    Par MASSAKA dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/04/2010, 18h08
  4. Réponses: 5
    Dernier message: 05/02/2010, 19h04
  5. création d'une boucle for pour interrogation requête sql
    Par philder62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/12/2007, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo