Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
"Effect coding"
3 participants
Page 1 sur 1
"Effect coding"
Bonjour à tous,
Je travaille actuellement avec les données suivantes : 3 variables qualitatives (A, B et C) pouvant prendre 5 modalités différentes chacune (A1, A2, ..., A5, B1, ..., B5, C1, ..., C5) et une variable réponse binaire (oui/non) Y.
Je dois effectuer une régression logistique et une régression hierarchique bayésienne sur ces variables : Y ~ A + B + C , et pour cela j'étudie les différentes manières de coder mes variables.
J'ai tout d'abord vu le codage disjonctif complet (ou "dummy coding"). Cette méthode me donnerait par exemple pour un individu ayant les valeurs suivantes ( A=2 ; B=1 ; C=5 ) :
Ensuite je devrais par exemple choisir une modalité de référence pour chacune des 3 variables et appliquer ma régression.
J'ai vu également qu'il existait une méthode appelée "effect coding". Il semblerait que se soit celle-là même qui soit à privilégier dans le cas qui m'intéresse (régression hierarchique bayésienne). Cependant, je n'arrive pas bien à saisir comment elle fonctionne J'ai commencé à rechercher sur internet des informations à ce sujet mais je n'arrive pas à les appliquer à mon cas particulier (on me parle de "groupe de référence" mais je ne vois pas bien à quoi cela correspond dans mon cas...).
Voilà, donc si quelqu'un pouvait m'indiquer comment procéder (par exemple avec mon exemple ( A=2 ; B=1 ; C=5 ) ou/et m'indiquer de la doc pertinente sur le sujet, un grand merci par avance
Cordialement,
A.D.
Je travaille actuellement avec les données suivantes : 3 variables qualitatives (A, B et C) pouvant prendre 5 modalités différentes chacune (A1, A2, ..., A5, B1, ..., B5, C1, ..., C5) et une variable réponse binaire (oui/non) Y.
Je dois effectuer une régression logistique et une régression hierarchique bayésienne sur ces variables : Y ~ A + B + C , et pour cela j'étudie les différentes manières de coder mes variables.
J'ai tout d'abord vu le codage disjonctif complet (ou "dummy coding"). Cette méthode me donnerait par exemple pour un individu ayant les valeurs suivantes ( A=2 ; B=1 ; C=5 ) :
A1 | A2 | A3 | A4 | A5 | B1 | B2 | B3 | B4 | B5 | C1 | C2 | C3 | C4 | C5 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
J'ai vu également qu'il existait une méthode appelée "effect coding". Il semblerait que se soit celle-là même qui soit à privilégier dans le cas qui m'intéresse (régression hierarchique bayésienne). Cependant, je n'arrive pas bien à saisir comment elle fonctionne J'ai commencé à rechercher sur internet des informations à ce sujet mais je n'arrive pas à les appliquer à mon cas particulier (on me parle de "groupe de référence" mais je ne vois pas bien à quoi cela correspond dans mon cas...).
Voilà, donc si quelqu'un pouvait m'indiquer comment procéder (par exemple avec mon exemple ( A=2 ; B=1 ; C=5 ) ou/et m'indiquer de la doc pertinente sur le sujet, un grand merci par avance
Cordialement,
A.D.
Dernière édition par A.D. le Jeu 10 Nov 2011 - 16:36, édité 1 fois
Re: "Effect coding"
Bonjour,
le site suivant est clair je trouve :
http://www.ats.ucla.edu/stat/mult_pkg/faq/general/effect.htm
Dans R (car je te sais une utilisatrice assidue) c'est la fonction contr.sum pour utiliser ce genre de contraste.
Cdlt
le site suivant est clair je trouve :
http://www.ats.ucla.edu/stat/mult_pkg/faq/general/effect.htm
Dans R (car je te sais une utilisatrice assidue) c'est la fonction contr.sum pour utiliser ce genre de contraste.
Cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: "Effect coding"
Bonjour droopy,
Tout d'abord, merci pour votre réponse.
J'avais parcouru le site que vous m'indiquez, cependant je ne vois pas bien comment mettre ceci en application dans mon cas d'étude (à quoi correspondent les "groupes", à des variables?).
De même, concernant la fonction R (ma problématique est à mettre en application avec R d'ailleurs ), je ne suis pas sûre de bien saisir comment l'utiliser... Par exemple, si je reprends l'exemple mentionné dans mon premier message, comme mes variables ont 5 modalités, je fais :
Est-ce qu'ici une colonne obtenue correspond au recodage d'une modalité de ma variable? Par exemple, colonne 1 = recodage pour la modalité 1 de ma variable (et la dernière modalité est prise comme "référence" donc écartée)?
Je suis désolée, je n'arrive pas bien à voir comment cela fonctionne...
Cordialement,
A.D.
Tout d'abord, merci pour votre réponse.
J'avais parcouru le site que vous m'indiquez, cependant je ne vois pas bien comment mettre ceci en application dans mon cas d'étude (à quoi correspondent les "groupes", à des variables?).
De même, concernant la fonction R (ma problématique est à mettre en application avec R d'ailleurs ), je ne suis pas sûre de bien saisir comment l'utiliser... Par exemple, si je reprends l'exemple mentionné dans mon premier message, comme mes variables ont 5 modalités, je fais :
- Code:
> contr.sum(5)
[,1] [,2] [,3] [,4]
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
5 -1 -1 -1 -1
Est-ce qu'ici une colonne obtenue correspond au recodage d'une modalité de ma variable? Par exemple, colonne 1 = recodage pour la modalité 1 de ma variable (et la dernière modalité est prise comme "référence" donc écartée)?
Je suis désolée, je n'arrive pas bien à voir comment cela fonctionne...
Cordialement,
A.D.
Re: "Effect coding"
dans l'exemple, les groupes correspondent aux modalités d'une variable catégoriel, R autrement dit à un factor. Il faut attribuer des contrastes à tes facteurs ou alors les spécifier dans la fonction lm. Un exemple avec 4 groupes dont le groupe 4 est le groupe de référence :
Cdlt
- Code:
> x <- gl(4,4)
> y <- rnorm(16)
> lm1 <- lm(y~x)
> lm1 # par défaut les contrastes sont issues de contr.treatment
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept) x2 x3 x4
-0.6419 1.6527 0.3535 0.4694
> mat <- contr.sum(levels(x))
> colnames(mat) <- c(1:3) # parce que la référence est ici le groupe 4
x1 <- x
contrats(x1) <- mat
> lm2 <- lm(y~x1)
> lm2
Call:
lm(formula = y ~ x1)
Coefficients:
(Intercept) x11 x12 x13
-0.02298 -0.61891 1.03380 -0.26537
# ou
> lm3 <- lm(y~x, contr=list(x=mat))
> lm3
Call:
lm(formula = y ~ x, contrasts = list(x = mat))
Coefficients:
(Intercept) x1 x2 x3
-0.02298 -0.61891 1.03380 -0.26537
Cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: "Effect coding"
Bon, j'ai un peu (beaucoup? ) du mal car je ne maîtrise pas bien la gestion des contrastes en régression je crois...
Si je reprends mon exemple avec 3 variables à 5 modalités chacune, on aura à faire la manip' 3 fois et à chaque fois on aura 5 groupes dont un de référence. Jusque là c'est correct?
Mon objectif, avant même de réaliser ma régression (régression hierarchique bayésienne que j'ai programmée moi-même), est que je cherche à recoder mon tableau X à 3 colonnes (= mes 3 variables A, B et C). J'ai lu dans de la documentation qu'il fallait utiliser (de préférence) un "effect coding", seulement je ne vois pas bien comment procéder.
Extrait de ma matrice X :
Je n'arrive pas à voir comment procéder pour la recoder...
Autre question au passage, concernant le vecteur binaire réponse Y, doit-il être codé d'une manière spéciale ou simplement 1/0?
Encore merci pour votre attention concernant mon "problème"
Cordialement,
A.D.
Groupe de référence = modalité de référence (fixée à 0 par exemple)?droopy a écrit:Un exemple avec 4 groupes dont le groupe 4 est le groupe de référence :
Si je reprends mon exemple avec 3 variables à 5 modalités chacune, on aura à faire la manip' 3 fois et à chaque fois on aura 5 groupes dont un de référence. Jusque là c'est correct?
Mon objectif, avant même de réaliser ma régression (régression hierarchique bayésienne que j'ai programmée moi-même), est que je cherche à recoder mon tableau X à 3 colonnes (= mes 3 variables A, B et C). J'ai lu dans de la documentation qu'il fallait utiliser (de préférence) un "effect coding", seulement je ne vois pas bien comment procéder.
Extrait de ma matrice X :
A | B | C |
2 | 1 | 5 |
3 | 1 | 2 |
1 | 1 | 3 |
2 | 5 | 1 |
Autre question au passage, concernant le vecteur binaire réponse Y, doit-il être codé d'une manière spéciale ou simplement 1/0?
Encore merci pour votre attention concernant mon "problème"
Cordialement,
A.D.
Re: "Effect coding"
Re-bonjour,
Est-ce que par exemple pour l'individu ( A=2 ; B=1 ; C=5 ) , on a le recodage en "effect coding" comme suit :
Et si on prend comme modalité de référence la dernière, cela nous donne finalement :
Est-ce correct?
Merci d'avance et bon week-end !
Cordialement,
A.D.
Est-ce que par exemple pour l'individu ( A=2 ; B=1 ; C=5 ) , on a le recodage en "effect coding" comme suit :
A1 | A2 | A3 | A4 | A5 | B1 | B2 | B3 | B4 | B5 | C1 | C2 | C3 | C4 | C5 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -1 | -1 | -1 | -1 | -1 |
A1 | A2 | A3 | A4 | B1 | B2 | B3 | B4 | C1 | C2 | C3 | C4 |
0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | -1 | -1 | -1 | -1 |
Merci d'avance et bon week-end !
Cordialement,
A.D.
Re: "Effect coding"
Salut,
Je ne sais pas ce qu'est le "effect coding" et j'ai pas le temps de regarder en détail. Pour les contrasts appliqué aux individus, regardes la fonction model.matrix(), comme te l'a indiqué Droopy, tu auras le codage de tous tes individus.
Nik
Je ne sais pas ce qu'est le "effect coding" et j'ai pas le temps de regarder en détail. Pour les contrasts appliqué aux individus, regardes la fonction model.matrix(), comme te l'a indiqué Droopy, tu auras le codage de tous tes individus.
Nik
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: "Effect coding"
re,
les contrastes se définissent variable par variable et non pas sur l'intégralité des variables !
Alors pour ton exemple ça donnerait :
les contrastes se définissent variable par variable et non pas sur l'intégralité des variables !
Alors pour ton exemple ça donnerait :
- Code:
tab <- expand.grid(A=factor(1:5), B=factor(1:5), C=factor(1:5)) # ici on crée toutes les combinaisons possibles des modalités des trois facteurs
# la matrice de contrasts
mat <- contr.sum(levels(tab$A))
colnames(mat) <- levels(tab$A)[1:4]
# et la manière dont s'est codé dans un modèle :
mod <- model.matrix(~., data=tab, contr=list(A=mat, B=mat, C=mat))
# pour A=2, B=1, C=5 ça donne :
mod[tab$A=="2"& tab$B=="1"& tab$C=="5",]
(Intercept) A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4
1 0 1 0 0 1 0 0 0 -1 -1 -1 -1
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: "Effect coding"
Bonjour,
Et tout d'abord, merci à tous les deux pour vos réponses
Je pense maintenant avoir compris le principe de ce recodage. Cependant, savez-vous s'il existe une fonction R déjà écrite qui permettrait le recodage de tout mon plan d'expériences selon ce critère? En effet, je pourrais la programmer moi-même en passant par des chose de ce genre :
Encore merci en tout cas
Cordialement,
A.D.
Et tout d'abord, merci à tous les deux pour vos réponses
Je pense maintenant avoir compris le principe de ce recodage. Cependant, savez-vous s'il existe une fonction R déjà écrite qui permettrait le recodage de tout mon plan d'expériences selon ce critère? En effet, je pourrais la programmer moi-même en passant par des chose de ce genre :
- Code:
mod[tab$A=="2"& tab$B=="1"& tab$C=="5",]
Encore merci en tout cas
Cordialement,
A.D.
Re: "Effect coding"
la réponse est déjà contenue dans les précédents posts :
model.matrix(~., data=tab, contr=list(A=mat, B=mat, C=mat)). A la place du ".", tu mets la formule comme dans ton modèle et tu mets les contrasts de tes facteurs dans une liste comme contr=list(...).
Cdlt
model.matrix(~., data=tab, contr=list(A=mat, B=mat, C=mat)). A la place du ".", tu mets la formule comme dans ton modèle et tu mets les contrasts de tes facteurs dans une liste comme contr=list(...).
Cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: "Effect coding"
Merci droopy
J'ai donc procédé ainsi (avec X ma matrice de plan d'expériences telle qu'elle est initialement (cf. mon 1er post)) :
Cependant, cette procédure va être incluse dans une fonction pour laquelle le nombre de variables (ici 3 : A, B et C) est passé en arguments (nvars). Il va donc me falloir définir les contrastes en fonction de ce paramètre. J'ai essayé de procéder comme suit :
Pour info, un extrait de ma matrice X :
Cordialement,
A.D.
J'ai donc procédé ainsi (avec X ma matrice de plan d'expériences telle qu'elle est initialement (cf. mon 1er post)) :
- Code:
P<-model.matrix(~.,data=X,contr=list(A="contr.sum","B="contr.sum",C="contr.sum"))
Cependant, cette procédure va être incluse dans une fonction pour laquelle le nombre de variables (ici 3 : A, B et C) est passé en arguments (nvars). Il va donc me falloir définir les contrastes en fonction de ce paramètre. J'ai essayé de procéder comme suit :
- Code:
v<-NULL
for(k in 1:nvars)
{
v<-c(v,paste(colnames(X)[k],"\"contr.sum\"",sep="=")
}
v
[1] "A=\"contr.sum\"" "B=\"contr.sum\"" "C=\"contr.sum\""
P<-model.matrix(~.,data=X,contr=list(v))
Error in model.matrix.default(~., data = mat, contr = list(v)) :
invalid 'contrasts.arg' argument
v<-paste(v,collapse=",")
v
[1] "A=\"contr.sum\",B=\"contr.sum\",C=\"contr.sum\""
P<-model.matrix(~.,data=X,contr=list(v))
Error in model.matrix.default(~., data = mat, contr = list(v)) :
invalid 'contrasts.arg' argument
P<-model.matrix(~.,data=X,contr=list(eval(v)))
Error in model.matrix.default(~., data = mat, contr = list(eval(v))) :
invalid 'contrasts.arg' argument
Pour info, un extrait de ma matrice X :
- Code:
A B C
4 4 5
2 1 5
3 3 5
5 4 2
5 5 1
Cordialement,
A.D.
Re: "Effect coding"
Salut,
je ne vois pas trop où tu veux en venir...
Si c'est pour toujours mettre la même chose, voir l'appel à options()$contrasts
Si tu veux définir facteur par facteur, voir la fonction C() qui permet de définir les contrastes comme tu veux dans une autre fonction (très pratique dans un glm par exemple)
Nik
je ne vois pas trop où tu veux en venir...
- Code:
v<-NULL
for(k in 1:nvars)
{
v<-c(v,paste(colnames(X)[k],"\"contr.sum\"",sep="=")
}
- Code:
paste(c(A,B,C),"\"contr.sum\"",sep="=")
- Code:
> list(paste(c("A","B","C"),"contr.sum",sep="="))
[[1]]
[1] "A=contr.sum" "B=contr.sum" "C=contr.sum"
> list(A="contr.sum",B="contr.sum",C="contr.sum")
$A
[1] "contr.sum"
$B
[1] "contr.sum"
$C
[1] "contr.sum"
Si c'est pour toujours mettre la même chose, voir l'appel à options()$contrasts
Si tu veux définir facteur par facteur, voir la fonction C() qui permet de définir les contrastes comme tu veux dans une autre fonction (très pratique dans un glm par exemple)
Nik
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: "Effect coding"
Re,
Voila une solution :
Voila une solution :
- Code:
l1 <- eval(parse(text=paste("list(", paste(colnames(tab),"='contr.sum'", collapse=","), ")", sep="")))
model.matrix(~., data=tab, contr=l1)
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: "Effect coding"
Merci beaucoup pour vos réponses à tous les deux !
Je crois que je m'étais un peu compliqué la vie, en effet, je suis parvenue à mes fins avec un "simple" :
Bonne journée !
Cordialement,
A.D.
Je crois que je m'étais un peu compliqué la vie, en effet, je suis parvenue à mes fins avec un "simple" :
- Code:
ll<-as.vector(rep("contr.sum",nvars),mod="list")
names(ll)<-colnames(tab)
Bonne journée !
Cordialement,
A.D.
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|