déclaration de noms

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

E.H. [compte supprimé]

déclaration de noms

Messagepar E.H. [compte supprimé] » 09 Mai 2007, 10:19

Bonjour,

un question qui va peut être vous paraître simple.

Code : Tout sélectionner

> # modèle complet
> a3m0 <- ASRF3~ty*co*ta*an
> a3aov0 <- aov(a3m0, data=fcb)
> monAIC(a3aov0)
                        n  k      nsk          AIC       AICc
a3aovmodele 226 17 13.29412 300.3598 303.3021

> a3m1 <- ASRF3~ty*co*ta*an-ty:co:ta:an
> a3aov1 <- aov(a3m1, data=fcb)
> a3m2a <- ASRF3~ty*co*ta*an-ty:co:ta:an-ty:co:ta # retrait de - ty:co:ta
> a3aov2a <- aov(a3m2a, data=fcb)

etc.etc...


ici je déclare la réponse d'étude comme étant ASRF3.
hors, je dois réaliser le même type d'analyses un grand nombre de fois, sur plusieurs réponses.
j'aurais donc voulu pouvoir déclarer une fois ma réponse et ne pas modifier manuellement dans un éditeur de texte tous les numéros de réponse (ASRF5, ASRF6, etc...)

j'ai essayé :

Code : Tout sélectionner

> Rep <- ASRF3
Erreur : objet "ASRF3" non trouvé


(en effet, ASRF3 n'est pas un objet mais un nom de colonne)

Code : Tout sélectionner

> Rep <- "ASRF3"
> a3m0 <- Rep~ty*co*ta*an
> a3aov0 <- aov(a3m0, data=fcb)
Erreur dans model.frame(formula, rownames, variables, varnames, extras, extranames,  :
        les longueurs des variables diffèrent (trouvé pour 'ty')

> Rep <- 'ASRF3'
> a3m0 <- Rep~ty*co*ta*an
> a3aov0 <- aov(a3m0, data=fcb)
Erreur dans model.frame(formula, rownames, variables, varnames, extras, extranames,  :
        les longueurs des variables diffèrent (trouvé pour 'ty')


Du coup, en raison de cette erreur (dont je ne comprend pas bien la signification), les calculs suivant ne peuvent être effectués...

N'est il pas possible de déclarer spécifiquement ce type d'information ?

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 09 Mai 2007, 11:15

Une approche possible:

Code : Tout sélectionner

> Reponse <- c("r1", "r2", "r3")
> Expli <- "ty*co*ta*an"
> f <- list()
>
> for(i in seq(length(Reponse)))
+   f[[i]] <- paste(Reponse[i], "~", Expli)
>
> f
[[1]]
[1] "r1 ~ ty*co*ta*an"

[[2]]
[1] "r2 ~ ty*co*ta*an"

[[3]]
[1] "r3 ~ ty*co*ta*an"


Il faut bien sûr mettre les "vrais" noms des réponses à la place de r1, r2,...

Il suffit ensuite de récupérer chaque composante de la liste pour s'en servir dans la série de modèles désirée. Par souci de déclaration explicite de la formule dans le premier modèle, il serait peut-être souhaitable de passer par parse pour générer ce modèle:

Code : Tout sélectionner

for(i in seq(length(f))){
  m1 <- eval(parse(text = paste("aov(", f[[i]], ", data = fcb)", sep = "")))
  assign(paste(Reponse[i], "aov", 1, sep = ""), m1)
  assign(paste(Reponse[i], "aov", 2, sep = ""), update(m1, . ~ . - ty:co:ta:an))
  assign(paste(Reponse[i], "aov", 3, sep = ""), update(m1, . ~ . - ty:co:ta:an - ty:co:ta))
  }


Non testé...

Renaud

Eric Pagot
Messages : 195
Enregistré le : 15 Fév 2007, 17:10

Messagepar Eric Pagot » 11 Mai 2007, 15:23

A priori, cela doit être possible d'utiliser la fonction justDoIt de Rcmdr. En effet avec une déclaration de variable comme collection, il est possible de répéter la même fonction. Par ex :

var<-c("r1","r2","r3")
justDoIt(paste("aov(",var,"~facteur)") donnera les 3 combinaisons
Vétérinaire CTPA


Retourner vers « Questions en cours »

Qui est en ligne

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