我在 R 中使用 lmer 来检查条件 ( 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))
我也尝试过 Helmert 对比,但方法仍然不匹配。
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))
这样做的正确方法是什么?