Je fais une ANOVA à sens unique (par espèce) avec des contrastes personnalisés.
[,1] [,2] [,3] [,4]
0.5 -1 0 0 0
5 1 -1 0 0
12.5 0 1 -1 0
25 0 0 1 -1
50 0 0 0 1
où je compare l'intensité 0,5 contre 5, 5 contre 12,5 et ainsi de suite. Ce sont les données sur lesquelles je travaille
avec les résultats suivants
Generalized least squares fit by REML
Model: dark ~ intensity
Data: skofijski.diurnal[skofijski.diurnal$species == "niphargus", ]
AIC BIC logLik
63.41333 67.66163 -25.70667
Coefficients:
Value Std.Error t-value p-value
(Intercept) 16.95 0.2140872 79.17334 0.0000
intensity1 2.20 0.4281744 5.13809 0.0001
intensity2 1.40 0.5244044 2.66970 0.0175
intensity3 2.10 0.5244044 4.00454 0.0011
intensity4 1.80 0.4281744 4.20389 0.0008
Correlation:
(Intr) intns1 intns2 intns3
intensity1 0.000
intensity2 0.000 0.612
intensity3 0.000 0.408 0.667
intensity4 0.000 0.250 0.408 0.612
Standardized residuals:
Min Q1 Med Q3 Max
-2.3500484 -0.7833495 0.2611165 0.7833495 1.3055824
Residual standard error: 0.9574271
Degrees of freedom: 20 total; 15 residual
16,95 est la moyenne mondiale pour "niphargus". En intensité1, je compare les moyennes de l'intensité 0,5 à 5.
Si j'ai bien compris, le coefficient d'intensité1 de 2,2 devrait être la moitié de la différence entre les moyennes des niveaux d'intensité 0,5 et 5. Cependant, mes calculs manuels ne correspondent pas à ceux du résumé. Quelqu'un peut-il intervenir dans ce que je fais mal?
ce1 <- skofijski.diurnal$intensity
levels(ce1) <- c("0.5", "5", "0", "0", "0")
ce1 <- as.factor(as.character(ce1))
tapply(skofijski.diurnal$dark, ce1, mean)
0 0.5 5
14.500 11.875 13.000
diff(tapply(skofijski.diurnal$dark, ce1, mean))/2
0.5 5
-1.3125 0.5625
r
anova
contrasts
generalized-least-squares
Roman Luštrik
la source
la source
geom_points(position=position_dodge(width=0.75))
corrigera la façon dont les points de votre tracé ne s'alignent pas avec les cases.geom_jitter
, qui est un raccourci pour tous les paramètres geom_point () qui tremblent.geom_jitter(position_dodge)
marche? J'ai utiliségeom_points(position_jitterdodge)
pour ajouter des points aux boxplots avec esquive.geom_jitter
ici . D'après mon expérience depuis ma réponse ci-dessus, je trouve inutile d'utiliser des boîtes à moustaches. Déjà. Si j'ai plusieurs points, j'utilise des tracés de violon qui montrent la densité des points dans des détails beaucoup plus fins que les tracés de boîte. Les boîtes à moustaches ont été inventées lorsque le tracé de nombreux points ou leur densité n'était pas pratique. Il est peut-être temps que nous commencions à penser à abandonner cette visualisation (handicapée).Réponses:
La matrice que vous avez spécifiée pour les contrastes est correcte en principe. Pour le convertir en une matrice de contraste appropriée , vous devez calculer l'inverse généralisé de votre matrice d'origine.
Si
M
est votre matrice:Maintenant, calculez l'inverse généralisé en utilisant
ginv
et transposez le résultat en utilisantt
:Le résultat est identique à celui de @Greg Snow. Utilisez cette matrice pour votre analyse.
C'est un moyen beaucoup plus simple que de le faire manuellement.
Il existe un moyen encore plus simple de générer une matrice de différences glissantes (alias contrastes répétés ). Cela peut être fait avec la fonction
contr.sdif
et le nombre de niveaux de facteur comme paramètre. Si vous avez cinq niveaux de facteurs, comme dans votre exemple:la source
Si la matrice en haut est la façon dont vous encodez les variables fictives (ce que vous passez à la fonction
C
oucontrast
dans R), alors le premier compare le 1er niveau aux autres (en fait, 0,8 fois le 1er soustrait de 0,2 fois le somme des autres).Le deuxième terme compare les 2 premiers niveaux aux 3 derniers. Le 3ème compare les 3 premiers niveaux au dernier2 et le 4ème compare les 4 premiers niveaux au dernier.
Si vous voulez faire les comparaisons que vous décrivez (comparer chaque paire), alors l'encodage de variable fictive que vous voulez est:
la source
aov()
place delm()
? Je pose la question, car j'ai lu plusieurs tutoriels, dans lesquels les matrices de contraste pouraov()
sont construites exactement comme celle donnée par Roman. Par exemple, voir le chapitre 5 dans cran.r-project.org/doc/contrib/Vikneswaran-ED_companion.pdfaov
fonction appelle lalm
fonction pour effectuer les calculs principaux, donc des choses comme les matrices de contraste auront le même effet dans les deux.