J'utilise lmer dans R pour vérifier l'effet de condition ( cond
) sur un résultat. Voici quelques données composées, où s est l'identifiant du sujet et a
, b
et c
sont des conditions.
library("tidyr")
library("dplyr")
set.seed(123)
temp <- data.frame(s = paste0("S", 1:30),
a = rnorm(30, -2, 1),
b = rnorm(30, -3, 1),
c = rnorm(30, -4, 1))
Je voudrais comparer
- niveau
a
à la moyenne des niveauxb
etc
et - niveau
b
à niveauc
.
Ma question est la suivante: comment puis-je définir les contrastes de manière à ce que l'ordonnée à l'origine reflète la moyenne des trois conditions et que les deux estimations calculées reflètent directement les différences définies en 1. et 2.?
J'ai essayé avec
c1 <- cbind(c(-0.5, 0.25, 0.25), c(0, -0.5, 0.5))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c1))
où cond2
semble être OK, mais cond1
ne l'est pas.
Suite Comment interpréter ces contrastes personnalisés? , J'ai essayé d'utiliser l'inverse généralisé à la place, mais ces estimations n'ont pas de sens non plus.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
J'ai aussi essayé les contrastes Helmert, mais les moyens ne correspondent toujours pas.
gather(temp, cond, result, a, b, c) %>%
mutate(cond = factor(cond, levels = c("c", "b", "a"))) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = contr.helmert))
Quelle est la bonne façon de procéder?
Réponses:
Pour les étapes suivantes, nous avons besoin de la trame de données au format long. La trame de données
dat
contient la variable dépendanteresult
, le prédicteur catégoriquecond
(niveaux:a
,b
, etc
), et le facteur aléatoires
.Dans ce qui suit, je vais illustrer deux approches pour créer une matrice de contraste correspondant aux conditions que vous souhaitez comparer:
Contrastes personnalisés
La matrice
mat
correspond aux différences de niveau.Pour créer la matrice de contraste réelle, nous calculons l'inverse généralisé avec
ginv
(à partir deMASS
).Cette matrice de contraste
cMat
peut être utilisée danslmer
.Comme vous pouvez le voir, les estimations à effet fixe correspondent aux différences spécifiées ci-dessus. De plus, l'ordonnée à l'origine représente la moyenne globale.
Helmert contraste avec
contr.helmert
Vous pouvez également utiliser la
contr.helmert
fonction intégrée pour créer la matrice de contraste.Cependant, la commande ne correspond pas à celle que vous avez spécifiée dans la question. Par conséquent, nous devons inverser l'ordre des colonnes et des lignes. La première colonne correspond à
b
vsa
et la seconde correspond àc
vs la moyenne deb
eta
.Comparez la matrice de contraste
cHelmert2
àcMat
. Vous remarquerez que les colonnes sont des versions à l'échelle de l'autre matrice.Le résultat
lmer
est de:la source
mat
seraitc(1, -1/3, -1/3, -1/3)
? J'ai donc toujours défini les nombres tels qu'ils seraient dans la formule (a + (b + c + d) / 3), puis je les aiginv
ajustés de manière appropriée afin que les coefficients reflètent directement la différence. Et lorsque vous avez changé l'ordre dans l'exemple Helmert, c'était juste pour répondre à la question? Sinon, les résultats devraient être les mêmes, quel que soit l'ordre des contrastes, non?