Je travaille actuellement sur ma thèse de master et je prévoyais de faire des statistiques avec SigmaPlot. Cependant, après avoir passé un peu de temps avec mes données, je suis arrivé à la conclusion que SigmaPlot n'était peut-être pas adapté à mon problème (je peux me tromper), alors j'ai commencé mes premières tentatives en R, ce qui ne m'a pas vraiment facilité la tâche.
Le plan était d'exécuter une simple ANOVA BIDIRECTIONNELLE sur mes données qui résulte de 3 protéines différentes et de 8 traitements différents sur celles-ci, donc mes deux facteurs sont les protéines et les traitements. J'ai testé la normalité en utilisant les deux
> shapiro.test(time)
et
> ks.test(time, "norm", mean=mean(time), sd=sqrt(var(time)))
Dans les deux cas (ce qui n'est peut-être pas surprenant), je me suis retrouvé avec une distribution non normale.
Ce qui m'a laissé avec les premières questions de quel test utiliser pour l'égalité des variances. Je suis venu avec
> chisq.test(time)
et le résultat a été que je n'ai pas non plus l'égalité de variance dans mes données.
J'ai essayé différentes transformations de données (log, centre, standardisation), qui n'ont pas toutes résolu mes problèmes avec les variances.
Maintenant, je ne sais plus comment conduire l'ANOVA pour tester quelles protéines et quels traitements diffèrent considérablement les uns des autres. J'ai trouvé quelque chose à propos d'un test Kruskal-Walis, mais seulement pour un facteur (?). J'ai aussi trouvé des choses sur le classement ou la randamisation, mais pas encore comment implémenter ces techniques dans R.
Quelqu'un a-t-il une suggestion à faire?
Edit: merci pour vos réponses, je suis un peu dépassé par la lecture (ça semble de plus en plus au lieu de moins), mais je vais bien sûr continuer.
Voici un exemple de mes données, comme suggéré (je suis désolé pour le format, je n'ai pas pu trouver une autre solution ou un autre endroit pour mettre un fichier. Je suis encore nouveau à tout cela.):
protein treatment time
A con 2329.0
A HY 1072.0
A CL1 4435.0
A CL2 2971.0
A CL1-HY sim 823.5
A CL2-HY sim 491.5
A CL1+HY mix 2510.5
A CL2+HY mix 2484.5
A con 2454.0
A HY 1180.5
A CL1 3249.7
A CL2 2106.7
A CL1-HY sim 993.0
A CL2-HY sim 817.5
A CL1+HY mix 1981.0
A CL2+HY mix 2687.5
B con 1482.0
B HY 2084.7
B CL1 1498.0
B CL2 1258.5
B CL1-HY sim 1795.7
B CL2-HY sim 1804.5
B CL1+HY mix 1633.0
B CL2+HY mix 1416.3
B con 1339.0
B HY 2119.0
B CL1 1093.3
B CL2 1026.5
B CL1-HY sim 2315.5
B CL2-HY sim 2048.5
B CL1+HY mix 1465.0
B CL2+HY mix 2334.5
C con 1614.8
C HY 1525.5
C CL1 426.3
C CL2 1192.0
C CL1-HY sim 1546.0
C CL2-HY sim 874.5
C CL1+HY mix 1386.0
C CL2+HY mix 364.5
C con 1907.5
C HY 1152.5
C CL1 639.7
C CL2 1306.5
C CL1-HY sim 1515.0
C CL2-HY sim 1251.0
C CL1+HY mix 1350.5
C CL2+HY mix 1230.5
?bartlett.test
)Réponses:
Cela peut être plus un commentaire qu'une réponse, mais cela ne correspondra pas à un commentaire. Nous pouvons peut-être vous aider ici, mais cela peut prendre quelques itérations; nous avons besoin de plus d'informations.
D'abord, quelle est votre variable de réponse?
Deuxièmement, notez que la distribution marginale de votre réponse ne doit pas être normale, mais plutôt la distribution conditionnelle au modèle (c.-à-d. Les résidus) - il n'est pas clair que vous ayez examiné vos résidus. De plus, la normalité est l' hypothèse la moins importante d'un modèle linéaire (par exemple, une ANOVA); les résidus peuvent ne pas avoir besoin d'être parfaitement normaux. Les tests de normalité ne valent généralement pas la peine (voir ici pour une discussion sur le CV), les graphiques sont bien meilleurs. Je voudrais essayer un qq-plot de vos résidus. Dans
R
cela se fait avecqqnorm()
, ou essayezqqPlot()
dans lecar
paquet. Il convient également de considérer la manière dont les résidus ne sont pas normaux: l'asymétrie est plus dommageable que l'excès de kurtosis, en particulier si les asymétries alternent les directions entre les groupes.S'il y a vraiment un problème qui mérite d'être inquiété, une transformation est une bonne stratégie. Prendre le journal de vos données brutes est une option, mais pas la seule. Notez que le centrage et la standardisation ne sont pas vraiment des transformations dans ce sens. Vous voulez vous pencher sur la famille de transformations de puissance Box & Cox . Et rappelez-vous, le résultat ne doit pas être parfaitement normal, juste assez bon.
Ensuite, je ne suis pas d'accord avec votre utilisation du test du chi carré pour l'homogénéité de la variance, bien qu'il puisse être parfaitement correct. Je vous suggère d'utiliser le test de Levene (utiliser
leveneTest()
danscar
). L'hétérogénéité est plus dommageable que la non-normalité, mais l'ANOVA est assez robuste si l'hétérogénéité est mineure. Une règle empirique standard est que la plus grande variance de groupe peut être jusqu'à quatre fois la plus petite sans poser de problèmes graves. Une bonne transformation devrait également tenir compte de l'hétérogénéité.Si ces stratégies sont insuffisantes, j'explorerais probablement une régression robuste avant d'essayer une approche non paramétrique.
Si vous pouvez modifier votre question et en dire plus sur vos données, je pourrai peut-être la mettre à jour pour fournir des informations plus spécifiques.
la source
( note: cette réponse a été publiée avant la migration et la fusion de la question depuis SO, donc des détails ont été ajoutés à la question qui ne sont pas abordés ici. Beaucoup sont abordés dans les commentaires et la réponse par @gung).
Il existe de nombreuses approches différentes, et cette question a été abordée ailleurs sur ce site. Voici une liste de quelques approches, avec des liens vers d'autres questions sur le site et quelques références:
adonis
fonction dans le package R Veganla source
adonis
dans leVegan
package R / David 16 mai à 16:20adonis
semble fonctionner même avec des dvs univariés Cependant, j'ai le sentiment qu'il utilise quelque chose comme des sommes de carrés de type 1 lorsque je reçois le messageTerms added sequentially (first to last)
chaque fois qu'il est exécuté. L'avez-vous utilisé ou pouvez-vous en dire quelque chose? - Henrik 16 mai à