Estoy usando lmer en R para verificar el efecto de la condición ( cond
) en algún resultado. Aquí están algunos hechos de seguridad de datos, donde s es el identificador de objeto y a
, b
y c
son condiciones.
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))
Me gustaria comparar
- el nivel
a
de la media de los nivelesb
yc
y - nivel
b
a nivelc
.
Mi pregunta es, ¿cómo configuro los contrastes para hacer esto de tal manera que la intersección refleje la media de las tres condiciones y las dos estimaciones calculadas reflejen directamente las diferencias definidas en 1. y 2.?
Lo intenté con
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))
donde cond2
parece estar bien, pero cond1
no lo está.
Siguiente ¿Cómo interpretar estos contrastes personalizados? , Intenté usar el inverso generalizado, pero estas estimaciones tampoco tienen sentido.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
También probé los contrastes de Helmert, pero los medios aún no coinciden.
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))
¿Cuál es la forma correcta de hacer esto?
Respuestas:
Para los siguientes pasos, necesitamos el marco de datos en formato largo. La trama de datos
dat
contiene la variable dependienteresult
, el predictor categóricocond
(niveles:a
,b
yc
), y el factor aleatorios
.A continuación, ilustraré dos enfoques para crear una matriz de contraste correspondiente a las condiciones que desea comparar:
Contrastes personalizados
La matriz
mat
corresponde a las diferencias de nivel.Para crear la matriz de contraste real, calculamos el inverso generalizado con
ginv
(desdeMASS
).Esta matriz de contraste
cMat
se puede usar enlmer
.Como puede ver, las estimaciones de efectos fijos corresponden a las diferencias especificadas anteriormente. Además, la intersección representa la media general.
Helmert contrasta con
contr.helmert
También puede usar la
contr.helmert
función incorporada para crear la matriz de contraste.Sin embargo, el pedido no se corresponde con el que especificó en la pregunta. Por lo tanto, tenemos que invertir el orden de las columnas y filas. La primera columna corresponde a
b
vs.a
y la segunda corresponde ac
vs. la media deb
ya
.Compare la matriz de contraste
cHelmert2
concMat
. Notará que las columnas son versiones escaladas de la otra matriz.El resultado de
lmer
es:Esta matriz de contraste permite las mismas comparaciones que la matriz de contraste personalizada. Sin embargo, dado que los valores en la matriz son diferentes, los coeficientes de efectos fijos también son diferentes. No es sorprendente que los valores sean los mismos.t
fuente
mat
lo seríac(1, -1/3, -1/3, -1/3)
? Por lo tanto, siempre establezco los números como estarían en la fórmula (a + (b + c + d) / 3) y luego losginv
escalo adecuadamente para que los coeficientes reflejen directamente la diferencia. Y cuando cambiaste el orden en el ejemplo de Helmert, ¿eso solo coincidía con la pregunta? De lo contrario, los resultados deberían ser los mismos, independientemente del orden de los contrastes, ¿verdad?