Mesures répétées aov et lm

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

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

Mesures répétées aov et lm

Messagepar Eric Pagot » 05 Mar 2007, 08:29

J'ai un problème avec l'analyse de variance en mesure répétée. J'ai trois groupes A, B, C avec des effectifs différents (38,40,38). Le nombre de mesures est 6 (données de séro).
Si je fais la fonction aov(séro~time*groupe+Error(sujet)) j'ai une sortie stat mais je ne sais pas si le nombre de ddl est exact (je trouve un autre nombre sur un autre logiciel de stat).
Je crois que quand les nombres sont inégaux, il faut appliquer le modèle lm. Le problème est que quand j'applique celui-ci, je ne peux pas spécifier une résiduelle. Comment fait-on ? Et comment avoir la sortie correspondante (effet du groupe, effet du temps intra-sujets) ?
Vétérinaire CTPA

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

Messagepar Renaud Lancelot » 05 Mar 2007, 09:55

Je n'utilise pas l'interface aov ==> je laisse les spécialistes te répondre en détail sur cette fct. Le pb que tu évoques tient aux plans équilibrés et aux données manquantes. L'aide de aov dit:

aov is designed for balanced designs, and the results can be hard to interpret without balance: beware that missing values in the response(s) will likely lose the balance. If there are two or more error strata, the methods used are statistically inefficient without balance, and it may be better to use lme.


Pour ma part, j'utilise toujours lme ou gls dans ce genre d'analyse. Cependant, je pense que les résultats que tu as avec aov sont valides car les données manquantes ne concernent pas les séries de séros intra-individus d'après ce que tu décris. Si tu étais dans ce cas, il faudrait utiliser lme ou gls, les modèles sous-jacents fournissant des estimeteurs non biaisés si les données manquantes (séros) surviennent de manière complètement aléatoire. Le pb des données manquantes est très vaste et ardu en stats.

Avec lme, ton modèle serait:

Code : Tout sélectionner

library(nlme)
fm <- lme(séro ~ time * groupe, random = ~ 1 | sujet)
anova(fm)


Mais attention: ce modèle tient si séro est une variable quantitative. Dans le cas contraire (e.g., variable binaire positif / négatif), il faut utiliser des modèles linéaires généralisés marginaux (GEE, régression béta-binomiale,...) ou individus-spécifiques (modèles linéaires généralisés à effets mixtes). Cela rajoute une belle couche de complexité... Pour info, la fct lmer du package lme4 permet d'ajuster les modèles linéaires mixtes (comme lme du package nlme) et aussi les modèles linéaires généralisés mixtes.

Renaud

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

Messagepar Eric Pagot » 06 Mar 2007, 08:23

Je pense que le plus simple est d'éliminer une série quand il y a au moins une données manquante. C'est ce qui est fait de toute façon dans le logiciel stat que j'utilise couramment (systat).
Je vais essayer d'utiliser cette fonction et vérifier si le nombre de ddl correspond.
Une petite précision : comment fait-on cette barre verticale ? Je n'ai pas la touche sur mon clavier.
Vétérinaire CTPA

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

Messagepar Logez Maxime » 06 Mar 2007, 09:12

Bonjour,


La bare se fait avec alt gr maintenu appuyer et la touche numérique 6 qui se trouve au dessus des lettres du clavier.

Maxime

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

Messagepar Renaud Lancelot » 06 Mar 2007, 22:55

Eric Pagot a écrit :Je pense que le plus simple est d'éliminer une série quand il y a au moins une données manquante. C'est ce qui est fait de toute façon dans le logiciel stat que j'utilise couramment (systat).
Je vais essayer d'utiliser cette fonction et vérifier si le nombre de ddl correspond.


1. Ce serait du gaspillage de faire comme ça, quand on sait ce que coûtent les séros.

2. En éliminant les séries avec des données manquantes, tu diminues la puissance statistique et surtout, tu introduis un biais dans les analyses, susceptibles de modifier les moyennes, les variances et donc les conclusions.

Bref: cette solution est à proscrire.

La question des données manquantes (ou perdus de vue) est centrale en analyse de données longitudinales. Il y a des bouquins entiers qui lui sont consacrés. Il n'y a pas de règle générale pour la résoudre mais un des points fondamentaux est de savoir si les données manquantes surviennent de manière complètement aléatoire (par rapport au phénomène étudié) ou pas. Une présentation claire et relativement intuitive est donnée dans le bouquin:

Diggle, P.J., Liang, K.-Y., Zeger, S.L., 1994. Analysis of longitudinal data, Clarendon Press, Oxford, 253 p.

dont il existe une édition plus récente.


Pour le nombre de ddl, le calcul peut être très complexe voire sans solution quand on travaille avec des structures aléatoires complexes et des plans déséquilibrés. Une manière de se tirer du guêpier est d'estimer les modèles avec une méthode MCMC et d'utiliser les chaînes de valeurs pour calculer les statistiques d'intérêt et consrtuire les intervalles de confiance. Je ne rentre pas dans les détails. Si tu es intéressé, il y a eu plusieurs discussions récentes à ce sujet sur le forum R-Help. Voir par exemple:

http://finzi.psych.upenn.edu/R/Rhelp02a/archive/82567.html
http://finzi.psych.upenn.edu/R/Rhelp02a/archive/87499.html

Renaud

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

Messagepar Eric Pagot » 07 Mar 2007, 15:09

Merci pour ces précieuses indications.
Donc, si je te suis bien, si l'on applique la méthode lme, il sort un résultat même s'il manque une donnée dans une série (par exemple, un animal est mort avant la fin de l'étude, donc plus d'analyse...) ?
J'ai utilisé cette formule et j'ai effectivement une sortie, mais ce n'est pas encore très clair pour moi.
D'après ce que j'ai compris :
Pour une aov, les sorties sont :
variations inter (par exemple le groupe, et interaction groupe:temps)
variation intra : le temps
signification des p :
inter : il y a évolution différente selon l'appartenance à un groupe
il peut y avoir interaction : cad baisse pour un groupe, hausse pour un autre, etc...
intra : il y a évolution dans le temps (une hausse, une baisse, etc...)

Pour la lme je n'arrive pas à voir ce que signifient les différents p
Vétérinaire CTPA

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

Messagepar Renaud Lancelot » 07 Mar 2007, 18:05

Merci pour ces précieuses indications.
Donc, si je te suis bien, si l'on applique la méthode lme, il sort un résultat même s'il manque une donnée dans une série (par exemple, un animal est mort avant la fin de l'étude, donc plus d'analyse...) ?


Oui, il y a une méthode predict qui permet de calculer les BLUPs: best linear unbiased predictions. Mais comme indiqué, cela suppose que la donnée manquante ne soit pas liée au phénomène étudié. Cette hypothèse est lourde, surtout avec des données de séros !

D'autre part, lme n'est pas utilisable sur des données discrètes comme des réponses en + / -.

J'ai utilisé cette formule et j'ai effectivement une sortie, mais ce n'est pas encore très clair pour moi.
D'après ce que j'ai compris :
Pour une aov, les sorties sont :
variations inter (par exemple le groupe, et interaction groupe:temps)
variation intra : le temps
signification des p :
inter : il y a évolution différente selon l'appartenance à un groupe
il peut y avoir interaction : cad baisse pour un groupe, hausse pour un autre, etc...
intra : il y a évolution dans le temps (une hausse, une baisse, etc...)

Pour la lme je n'arrive pas à voir ce que signifient les différents p


Si fm est ton modèle, summary(fm) te renvoie les informations essentielles dont un tableau avec les coeff des effets fixes, les écart-type, la stat t et la p-value associée.

La fonction anova (avec argument type = "m") te donne un tableau d'analyse de variance à peu près traditionnel (bien que les sommes de carrés ne soient pas calculées: ça ne marche pas comme ça dans la méthode programmée).

Code : Tout sélectionner

> library(nlme)
> fm <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
> ## astuce pour avoir le tableau des effets fixes
> summary(fm)$tTable
                 Value  Std.Error DF   t-value      p-value
(Intercept) 17.7067130 0.83392247 80 21.233044 1.283974e-34
age          0.6601852 0.06160592 80 10.716263 3.952235e-17
SexFemale   -2.3210227 0.76141685 25 -3.048294 5.375056e-03
> ## table d'analyse de variance
> anova(fm, type = "m")
            numDF denDF  F-value p-value
(Intercept)     1    80 450.8422  <.0001
age             1    80 114.8383  <.0001
Sex             1    25   9.2921  0.0054


Mais il faut faire un effort de compréhension de la théorie et des méthodes d'ajustement qui sont ardues. Pour lme, la référence incontournable est

Pinheiro, J.C., Bates, D.M., 2000. Mixed-effect models in S and S-Plus. Springer, New York (USA), 598 p.

Ce sont ces auteurs qui ont écrits le package nlme (et D Bates a écrit le package lme4).

Renaud


Retourner vers « Questions en cours »

Qui est en ligne

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