non egalite des variances et anova

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

Iris Chanay
Messages : 15
Enregistré le : 25 Avr 2007, 09:02

non egalite des variances et anova

Messagepar Iris Chanay » 03 Mai 2007, 13:15

Bonjour, j'etudie les resultats d'un test de choix.
Deux aliments etaient presentes en double choix, pour chaque periode j'obtiens donc une consommation de l'aliment1 et une consommation de l'aliment2.
Voici une presentation de mes donnees:
cage periode dia conso
308 J15-J18 d2.5 0,13
308 J18-J22 d2.5 0,95
308 J15-J18 d3.5 0,27
308 J18-J22 d3.5 0,90
...
410 J38-J41 d2.5 103,87
410 J32-J35 d3.5 17,67

"dia" etant le facteur differenciant les 2aliments.
Je voulais effectuer une anova a un facteur et en mesures repetees. Mais en testant la normalite et l'homoscédasticité par periode, je trouve que les variances ne sont pas egales pour 2 de mes periodes (par var.test).

Existe-t-il un test non parametrique qui prenne en compte les mesures repetees?
Comment puis-je analyser ce type de donnees?

Merci d'avance pour votre aide.

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

Messagepar Renaud Lancelot » 04 Mai 2007, 05:20

Vous avez deux réponses observées simultanément ==> vous êtes dans un cadre d'analyse multivariée (bivariée en l'occurrence). Voir ?manova, mais j'ai peur que les choses ne soient plus compliquées que cela avec des observations répétées sur les mêmes unités. Cela nous amène vers du modèle mixte multivarié. Je n'ai pas connaissance de méthodes programmées dans R. Il faudrait alors se tourner vers des logiciels spécialisés (MLwiN peut faire ce genre de choses). Quelqu'un a-t-il d'autres suggestions ?

Renaud

Iris Chanay
Messages : 15
Enregistré le : 25 Avr 2007, 09:02

Messagepar Iris Chanay » 04 Mai 2007, 08:19

ouhlala..
Ca devient bien complique!

Que pensez vous de faire la difference des deux consommations (ex: conso(d2.5)-conso(d3.5) ) et tester cette difference par rapport a zero?
Si la difference est differente de zero, j'aurai bien prouve qu'un des aliments est + consomme que l'autre et donc prefere?!

Iris

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 04 Mai 2007, 08:35

Pour les modèles mixtes avec R, tu peux utiliser "lme" de la library "nlme".

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

Messagepar Logez Maxime » 04 Mai 2007, 09:41

Bonjour,

Tu peux peut être utilisé un test non paramétrique : le test de friedman, pour comparer tes deux aliments avec en bloc les périodes et en traitement les aliments.

Maxime

Iris Chanay
Messages : 15
Enregistré le : 25 Avr 2007, 09:02

Messagepar Iris Chanay » 04 Mai 2007, 15:27

cool, merci beaucoup pour cette idee!
Je vais regarder la procedure de ce test et essayer!

Iris Chanay
Messages : 15
Enregistré le : 25 Avr 2007, 09:02

Test de friedman

Messagepar Iris Chanay » 07 Mai 2007, 08:35

Bonjour,
suite a vos conseils, j'ai essaye de faire un test de friedman. Je me suis basee sur l'aide R mais aussi sur un document de lyon1 (http://pbil.univ-lyon1.fr/R/archives/br3.pdf)
En suivant leur exemple voici ma procedure:

conso.vec=as.vector(conso)
traitement=as.factor(dia)
bloc=as.factor(periode)
friedman.test(conso.vec,traitement,bloc)

mais voici le message d'erreur qui apparait quand j'execute la procedure:
Erreur dans friedman.test.default(conso.vec, traitement, bloc) :
ce n'est pas un plan en bloc complet sans répétitions

Que dois-je faire pour avoir un bloc complet sans repetitions? Mes donnees sont-elles rangees correctement?

Encore une fois merci beaucoup pour votre aide.

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

Messagepar Logez Maxime » 08 Mai 2007, 08:42

Bonjour,

Pour mettre en place le test de friedman tu as plusieurs façon de faire, soit tu le fais comme spécifié dans la fiche du site pbil.univ-lyon1.fr/R/archives/br3.pdf soit tu peux rentrer directement un tableau qui contient en ligne les blocs et en colonne les traitements. Dans ton cas il faut que les périodes soient en lignes et les deux aliments en colonne. Tu peux faire ça à partir de ton tableau de départ de la manière suivante :

Code : Tout sélectionner

#l'exemple de la fiche br3 je pense qu'il y a une autre fiche plus détaillée
pomme<-matrix(0,nrow=5,ncol=4)
pomme[1,]<-c(527,604,606,533)
pomme[2,]<-c(633,600,650,567)
pomme[3,]<-c(642,708,662,504)
pomme[4,]<-c(623,550,562,667)
pomme[5,]<-c(377,408,500,333)
colnames(pomme) <- paste("bloc.",1:4,sep="")
rownames(pomme) <- paste("traitement.",1:5,sep="")

pomme
             bloc.1 bloc.2 bloc.3 bloc.4
traitement.1    527    604    606    533
traitement.2    633    600    650    567
traitement.3    642    708    662    504
traitement.4    623    550    562    667
traitement.5    377    408    500    333

pomme.vec<-as.vector(pomme)

traitement<-as.factor(row(pomme))
traitement
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
Levels: 1 2 3 4 5

bloc<-as.factor(col(pomme))
bloc
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
Levels: 1 2 3 4

friedman.test(pomme.vec,traitement,bloc)
        Friedman rank sum test

data:  pomme.vec, traitement and bloc
Friedman chi-squared = 9.8, df = 4, p-value = 0.04393

# ce qui équivaut à mettre en ligne les blocs et en colonne les traitements :
pomme <- t(pomme)
pomme
       traitement.1 traitement.2 traitement.3 traitement.4 traitement.5
bloc.1          527          633          642          623          377
bloc.2          604          600          708          550          408
bloc.3          606          650          662          562          500
bloc.4          533          567          504          667          333

friedman.test(pomme)
        Friedman rank sum test

data:  pomme
Friedman chi-squared = 9.8, df = 4, p-value = 0.04393

# pour ton cas à toi, il faut commencer par vérifier que pour une période donnée tu n'as qu'une seule valeur pour les aliments :
aliments <- read.table("friedman.txt",dec=",",h=T)
aliments
  age periode  dia conso
1 308 J15-J18 d2.5  0.13
2 308 J18-J22 d2.5  0.95
3 308 J15-J18 d3.5  0.27
4 308 J18-J22 d3.5  0.90

table(aliments$periode,aliments$dia)
          d2.5 d3.5
  J15-J18    1    1
  J18-J22    1    1

# jusque la ça va, il te faut ensuite mettre en forme le tableau :

aliments <- reshape(aliments,direction="wide",idvar="periode",timevar="dia",drop="age")
rownames(aliments) <- aliments[,1]
aliments <- aliments[,-1]
aliments <- as.matrix(aliments)
aliments
        conso.d2.5 conso.d3.5
J15-J18       0.13       0.27
J18-J22       0.95       0.90

# après tu n'as plus qu'a faire le test
friedman.test(aliments)


En espérant t'avoir aidé un peu.

Maxime

Iris Chanay
Messages : 15
Enregistré le : 25 Avr 2007, 09:02

Messagepar Iris Chanay » 09 Mai 2007, 06:31

Bonjour, merci beaucoup pour cette explication c'etait tres clair et jai donc compris pourquoi ca ne fonctionne pas:
Pour chaque periode, j'ai plusieurs valeurs de consommation!
En effet j'ai effectue ce test de choix sur 14 unites experimentales, donc au final j'ai, pour chaque periode, 14 valeurs pour l'aliment1 et 14 valeurs pour l'aliment2.

D'ou:
> table(aliment$periode, aliment$dia)

d2.5 d3.5
J15-J18 14 14
J18-J22 14 14
J22-J25 14 14
J25-J29 14 14
J29-J32 14 14
J32-J35 14 14
J35-J38 14 14
J38-J41 14 14

Le test de friedman est-il realisable quand meme?

Iris

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

Messagepar Renaud Lancelot » 09 Mai 2007, 07:09

Sur le fond des choses, vouloir résumer un jeu de données aussi complexe par une seule statistique est à la fois illusoire et très insuffisant. Il est (à mon avis...) nécessaire de faire une analyse exploratoire soigneuse afin de * voir * quelles sont les structures importantes et ensuite les représenter par un modèle, un ou plusieurs tests, etc.

Dans votre cas, les graphes de type Trellis me semblent bien indiqués. Voir:

Cleveland, W.S., 1993. Visualizing data. Hobart Press, Summit, New Jersey, 360 p.

pour une présentation très didactique (et très peu technique). Vous pourrez en trouver les idées (mais dispersées), les données, les graphes et le code sur le site:

http://cm.bell-labs.com/cm/ms/departments/sia/project/trellis/wwww.html

Ces méthodes sont mises en oeuvre dans le package lattice qui fait partie de la distribution standard de R.

Personnellement, je commencerais par des boxplots:

Code : Tout sélectionner

library(lattice)
bwplot(dia ~ conso | periode, data = aliment, layout = c(1, 8))


Just my 2 cents...

Renaud

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

Messagepar Logez Maxime » 09 Mai 2007, 07:47

Bonjour,

Pour répondre à la question d'Iris, le test de friedman n'est pas adapté en cas de répétitions des valeurs. Une autre voie possible pour revenir vers des modèles est de transformer tes données afin d'obtenir l'égalité des variances. Je suis d'accord avec Renaud quand il dit que de vouloir simplifier un jeu de données a une statistique est parfois illusoire et insuffisant néanmoins tout dépend du niveau de la personne en statistique et du but qu'elle poursuit Il est parfois bien plus parlant de mettre un graphique qui explique une structure de données qu'une multitude de tests.

Maxime

Iris Chanay
Messages : 15
Enregistré le : 25 Avr 2007, 09:02

Messagepar Iris Chanay » 09 Mai 2007, 08:25

Merci beaucoup pour toutes vos suggestions. Cela m'est tres util pour avancer dans mon travail.
En realite avant de realiser un test sur toutes mes donnees, j'avais regroupe mes donnees par semaine (4semaines au lieu de 8periodes) et effectue des tests t apparies lorsque les donnees par semaine etaient normales et les variances egales et des tests de wilcoxon dans les cas ou les variances n'etaient pas egales. Le tout avec des graphes de type de boxplot.
J'observais des differences significatives de consommation pour les 3 dernieres semaines.

Je voulais juste ajouter le facteur "temps" a cette premiere etude. Mais je vais etudier les graphes de type trellis pour avoir un autre apercu!

Iris


Retourner vers « Questions en cours »

Qui est en ligne

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