Estou usando o lmer no R para verificar o efeito da condição ( cond
) em algum resultado. Aqui estão alguns dados compostos, onde s é o identificador de sujeito e a
, b
e c
são condições.
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))
Eu gostaria de comparar
- nível
a
para a média dos níveisb
ec
e - nível
b
para nívelc
.
Minha pergunta é: como defino os contrastes para fazer isso de tal maneira que a interceptação reflita a média das três condições e as duas estimativas computadas reflitam diretamente as diferenças, conforme definido em 1. e 2.?
Eu tentei com
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))
onde cond2
parece estar bem, mas cond1
não está.
A seguir Como interpretar esses contrastes personalizados? , Tentei usar o inverso generalizado, mas essas estimativas também não fazem sentido.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
Também tentei os contrastes de Helmert, mas os meios ainda não combinam.
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))
Qual é a maneira correta de fazer isso?
Respostas:
Para as etapas a seguir, precisamos do quadro de dados no formato longo. A estrutura de dados
dat
contém a variável dependenteresult
, o preditor categóricacond
(níveis:a
,b
, ec
), e o factor aleatórios
.A seguir, ilustrarei duas abordagens para criar uma matriz de contraste correspondente às condições que você deseja comparar:
Contrastes personalizados
A matriz
mat
corresponde às diferenças de nível.Para criar a matriz de contraste real, calculamos o inverso generalizado com
ginv
(deMASS
).Essa matriz de contraste
cMat
pode ser usada emlmer
.Como você pode ver, as estimativas de efeito fixo correspondem às diferenças especificadas acima. Além disso, a interceptação representa a média geral.
Helmert contrasta com
contr.helmert
Você também pode usar a
contr.helmert
função interna para criar a matriz de contraste.No entanto, o pedido não corresponde ao que você especificou na pergunta. Portanto, temos que reverter a ordem das colunas e linhas. A primeira coluna corresponde a
b
vs.a
e a segunda corresponde ac
vs. a média deb
ea
.Compare a matriz de contraste
cHelmert2
comcMat
. Você notará que as colunas são versões em escala da outra matriz.O resultado
lmer
é:fonte
mat
seriac(1, -1/3, -1/3, -1/3)
? Portanto, eu sempre defino os números como estariam na fórmula (a + (b + c + d) / 3) e então osginv
dimensiono adequadamente para que os coeficientes reflitam diretamente a diferença. E quando você mudou a ordem no exemplo Helmert, isso foi apenas para corresponder à pergunta? Caso contrário, os resultados devem ser os mesmos, independentemente da ordem dos contrastes, certo?