Я использую lmer в R, чтобы проверить влияние условия ( cond
) на некоторый результат. Вот некоторые составные данные, где s - идентификатор субъекта a
, b
и c
- условия.
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))
Я хотел бы сравнить
- уровень
a
до среднего уровняb
иc
и - уровень
b
на уровеньc
.
Мой вопрос состоит в том, как мне установить контрасты таким образом, чтобы пересечение отражало среднее из трех условий, а две вычисленные оценки непосредственно отражали различия, как определено в 1. и 2.?
Я пробовал с
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))
где cond2
вроде бы ок, но cond1
нет.
Следующий Как интерпретировать эти пользовательские контрасты? Я попытался использовать обобщенное обратное вместо этого, но эти оценки также не имеют смысла.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
Я тоже попробовал контрасты Хельмерта, но средства все равно не совпадают.
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))
Как правильно это сделать?
Ответы:
Для следующих шагов нам понадобится фрейм данных в длинном формате. Кадр данных
dat
содержит зависимую переменнуюresult
, категорического предикторcond
(уровни:a
,b
, иc
), а также случайный факторs
.Далее я проиллюстрирую два подхода для создания контрастной матрицы, соответствующей условиям, которые вы хотите сравнить:
Пользовательские контрасты
Матрица
mat
соответствует разности уровней.Чтобы создать фактическую контрастную матрицу, мы вычисляем обобщенное обратное с
ginv
(изMASS
).Эта контрастная матрица
cMat
может быть использована вlmer
.Как видите, оценки с фиксированным эффектом соответствуют различиям, указанным выше. Кроме того, перехват представляет общее среднее.
Гельмерт контрастирует с
contr.helmert
Вы также можете использовать встроенную
contr.helmert
функцию для создания контрастной матрицы.Однако порядок не соответствует указанному в вопросе. Следовательно, мы должны изменить порядок столбцов и строк. Первый соответствует столбцу к
b
VS. ,a
а второй соответствуетc
против среднихb
иa
.Сравните матрицу контрастности
cHelmert2
сcMat
. Вы заметите, что столбцы являются масштабированными версиями другой матрицы.Результатом
lmer
является:источник
mat
было быc(1, -1/3, -1/3, -1/3)
? Поэтому я всегда устанавливаю числа такими, какими они будут в формуле (a + (b + c + d) / 3), а затемginv
масштабирую их соответствующим образом, чтобы коэффициенты напрямую отражали разницу. А когда вы изменили порядок в примере с Гельмертом, это было просто для соответствия вопросу? В противном случае результаты должны быть одинаковыми, независимо от порядка контрастов, верно?