dummy.coef

Questions sur les fonctions statistiques de R

Modérateur : Groupe des modérateurs

Claire Bissery
Messages : 11
Enregistré le : 19 Juin 2006, 06:31

dummy.coef

Messagepar Claire Bissery » 17 Aoû 2006, 10:50

Bonjour,
Je réalise des analyses de covariance avec la fonction lm(). Pour recupérer les coefficients j'utilise les fonctions coef() et dummy.coef().
La fonction dummy.coef me donne automatiquement 0 comme valeur de pente alors que mes pentes sont non nulles (verifié avec coef()).
Je ne sais pas si cela est en lien mais je rencontre ce problème depuis que j'ai installée la nouvelle version de R.
Merci pour vote aide
Claire

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

Messagepar Renaud Lancelot » 17 Aoû 2006, 11:26

Bonjour Claire,

Je n'utilise jamais cette fct ==> pas d'expérience pratique. Cependant, je lis dans l'aide:

Details

A fitted linear model has coefficients for the contrasts of the factor terms, usually one less in number than the number of levels. This function re-expresses the coefficients in the original coding; as the coefficients will have been fitted in the reduced basis, any implied constraints (e.g., zero sum for contr.helmert or contr.sum will be respected. There will be little point in using dummy.coef for contr.treatment contrasts, as the missing coefficients are by definition zero.

The method used has some limitations, and will give incomplete results for terms such as poly(x, 2)). However, it is adequate for its main purpose, aov models.


Cette fct a été développée spécifiquement pour aov, avec des cas non traités comme ceux indiqués dans le dernier paragraphe des détails. D'autre part, si vous utilisez le contraste par défaut pour les facteurs (contr.treatment), les résultats devraient être les mêmes par qu'avec coef. Pouvez-vous nous montrer un exemple de ce que vous obtenez, si possible avec le code R et les données ?

Cordialement,

Renaud

Claire Bissery
Messages : 11
Enregistré le : 19 Juin 2006, 06:31

Messagepar Claire Bissery » 17 Aoû 2006, 12:56

Des données sont toujours disponible à cette adresse:
ftp://ftp.cirad.fr/pub/group-r/groupe-r ... metrie.txt

J'utilise les contrasts "contr.sum"

Sur ce jeu de données on peut regarder le modèle suivant :
lm1<-lm(log(mstoter)~log(dbm)+variete)

Je n’étudie pas ce modèle en raison du déséquilibre du nombre de mesures mais à titre d’exemple cela permet de voir le problème rencontré avec la fonction dummy.coef().

> coef(lm1)
(Intercept) log(dbm) variete1 variete2 variete3 variete4 variete5
-2.93441516 2.68139874 0.15415229 -0.15055904 0.12163052 -0.12665775 -0.01721356

>dummy.coef(lm1)
Full coefficients are
(Intercept): -2.934415
log(dbm): 0
variete: jose irwi cogs kens tomm kent
0.15415229 -0.15055904 0.12163052 -0.12665775 -0.01721356 0.01864755

Lorsque je lançait un modèle similaire sur l’ancienne version de R la valeur de log(dbm) apparaissait dans les dummy.coef() comme dans la fonction coef().
Je ne sais pas si cela a un rapport avec la nouvelle version de R mais à part ça je n’ai rien changé ni à mes analyses ni à mes données.
Est ce qu’il existe une autre fonction que dummy.coef() pour récupérer tous les coefficients ?
Je vous remercie de votre aide.
Bien Cordialement
Claire

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

Messagepar Renaud Lancelot » 17 Aoû 2006, 13:39

Je pense qu'il s'agit d'un bug car on obtient la valeur souhaitée quand on code explicitement la variable en log:

Code : Tout sélectionner

> m1 <- lm(log(mstoter) ~ log(dbm) + variete, data = Data)
> coef(m1)
(Intercept)    log(dbm) varieteirwi varietejose varietekens varietekent varietetomm
-2.79897993  2.67531226 -0.29375104  0.03238632 -0.24625898 -0.10321947 -0.13775390
> dummy.coef(m1)
Full coefficients are
                                                                                       
(Intercept):       -2.79898                                                           
log(dbm):                 0                                                           
variete:               cogs        irwi        jose        kens        kent        tomm
                 0.00000000 -0.29375104  0.03238632 -0.24625898 -0.10321947 -0.13775390
> Data$ldbm <- log(Data$dbm)
> m2 <- lm(log(mstoter) ~ ldbm + variete, data = Data)
> coef(m2)
(Intercept)        ldbm varieteirwi varietejose varietekens varietekent varietetomm
-2.79897993  2.67531226 -0.29375104  0.03238632 -0.24625898 -0.10321947 -0.13775390
> dummy.coef(m2)
Full coefficients are
                                                                                       
(Intercept):       -2.79898                                                           
ldbm:              2.675312                                                           
variete:               cogs        irwi        jose        kens        kent        tomm
                 0.00000000 -0.29375104  0.03238632 -0.24625898 -0.10321947 -0.13775390


Cependant, le bug est sans conséquence sur l'objectif de dummy.coef, qui est de permettre une comparaison directe des différents coefficients des "dummy variables" issues d'un même facteur: le calcul est sans objet pour les variables numériques.

Amicalement,

Renaud

Claire Bissery
Messages : 11
Enregistré le : 19 Juin 2006, 06:31

Messagepar Claire Bissery » 18 Aoû 2006, 09:57

Bonjour,
Merci pour votre réponse, cela fonctionne en effet lorsque les variables sont définies au préalable.

Je me pose une question toujours par rapport aux coefficients des modalités d’un facteur en analyse de covariance et de variance.
Les coefficients peuvent être retrouvés en tenant compte des contrasts ou à partir de la fonction dummy.coef().
Mais pour les erreurs standard, comment obtenir celles des modalités qui m’apparaissent pas dans le summary ?
Est ce que l’ont peut les déduire ou les recalculer… ?
J’aimerais calculer des intervalles de confiance pour chacun des paramètres de mon modèle.
Pour cela j’utilise la fonction confint(). Mais comme pour les summary toutes les modalités du facteur ne sont pas disponibles.

Merci pour votre aide
Bien Cordialement
Claire Bissery

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

Messagepar Renaud Lancelot » 18 Aoû 2006, 10:33

Les modalités n'apparaissant pas explicitement dans les coefficients du modèle se retrouvent dans la constante (intercept), raison pour laquelle il faut faire attention à l'interprétabilité de cette constante. Vous pouvez demander un modèle sans constante en utilisant une formule du type y ~ -1 + x (le "-1" signifie "sans constante").

Code : Tout sélectionner

> set.seed(1)
> y <- rnorm(10)
> x <- factor(rep(c("A", "B"), 5))
> fm1 <- lm(y ~ x)
> summary(fm1)

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max
-1.0987 -0.6054  0.1244  0.4910  1.3170

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.01387    0.36299  -0.038    0.970
xB           0.29215    0.51334   0.569    0.585

Residual standard error: 0.8117 on 8 degrees of freedom
Multiple R-Squared: 0.03891,    Adjusted R-squared: -0.08123
F-statistic: 0.3239 on 1 and 8 DF,  p-value: 0.5849

> confint(fm1)
                 2.5 %   97.5 %
(Intercept) -0.8509277 0.823182
xB          -0.8916230 1.475926
> fm2 <- lm(y ~ -1 + x)
> summary(fm2)

Call:
lm(formula = y ~ -1 + x)

Residuals:
    Min      1Q  Median      3Q     Max
-1.0987 -0.6054  0.1244  0.4910  1.3170

Coefficients:
   Estimate Std. Error t value Pr(>|t|)
xA -0.01387    0.36299  -0.038    0.970
xB  0.27828    0.36299   0.767    0.465

Residual standard error: 0.8117 on 8 degrees of freedom
Multiple R-Squared: 0.0686,     Adjusted R-squared: -0.1643
F-statistic: 0.2946 on 2 and 8 DF,  p-value: 0.7526

> confint(fm2)
        2.5 %   97.5 %
xA -0.8509277 0.823182
xB -0.5587764 1.115333


Pour ma part, je préfère souvent travailler sur les valeurs prédites par le modèle plutôt que sur les coefficients eux-mêmes dont l'interprétation devient délicate dès qu'il y a des interactions. Les écarts-types des valeurs prédites sont disponibles grâce à la fct predict. Voir ?predict, notamment les arguments se.fit, interval, newdata.

Cordialement,

Renaud


Retourner vers « Archives : Fonctions statistiques »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité