Sto usando lmer in R per verificare l'effetto di condition ( cond
) su alcuni risultati. Ecco alcuni dati inventati, dove s è l'identificatore del soggetto e a
, b
e c
sono le condizioni.
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))
Vorrei confrontare
- livello
a
alla media dei livellib
ec
e - livello
b
per livelloc
.
La mia domanda è: come posso impostare i contrasti per farlo in modo tale che l'intercettazione rifletta la media delle tre condizioni e le due stime calcolate riflettano direttamente le differenze come definite in 1. e 2.?
Ci ho provato
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))
dove cond2
sembra essere OK, ma cond1
non lo è.
Seguendo Come interpretare questi contrasti personalizzati? , Ho cercato di utilizzare invece l'inverso generalizzato, ma queste stime non hanno nemmeno senso.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
Ho provato anche i contrasti di Helmert, ma i mezzi non corrispondono ancora.
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 è il modo corretto per farlo?