我想知道在afex和lsmeans包中是否可以像在lmer中一样获得交互作用效应的相同估计值。下面是针对两个具有不同截距和斜率的组的玩具数据。
set.seed(1234)
A0 <- rnorm(4,2,1)
B0 <- rnorm(4,2+3,1)
A1 <- rnorm(4,6,1)
B1 <- rnorm(4,6+2,1)
A2 <- rnorm(4,10,1)
B2 <- rnorm(4,10+1,1)
A3 <- rnorm(4,14,1)
B3 <- rnorm(4,14+0,1)
score <- c(A0,B0,A1,B1,A2,B2,A3,B3)
id <- factor(rep(1:8,times = 4, length = 32))
time <- factor(rep(0:3, each = 8, length = 32))
timeNum <- as.numeric(rep(0:3, each = 8, length = 32))
group <- factor(rep(c("A","B"), times =2, each = 4, length = 32))
df <- data.frame(id, group, time, timeNum, score)
df
这里是情节
(ggplot(df, aes(x = time, y = score, group = group)) +
stat_summary(fun.y = "mean", geom = "line", aes(linetype = group)) +
stat_summary(fun.y = "mean", geom = "point", aes(shape = group), size = 3) +
coord_cartesian(ylim = c(0,18)))
当我在数据上运行标准的
lmer
,寻找group
之间score
变化差异的估计值时。summary(modelLMER <- lmer(score ~ group * timeNum + (timeNum|id), df))
我得到了一个
group*time
的相互作用的估计值为-1.07
,这意味着时间增加一单位时,在group B
比 group A
得分增加少约1分。这个估计值与我在数据集中设置的差异相匹配。我想知道如何在
afex
和 lsmeans
包中做类似的事情。library(afex)
library(lsmeans)
首先,我生成了afex
模型对象。
modelLM <- aov_ez(id="id", dv="score", data=df, between="group", within="time",
type=3, return="lm")
然后将其传递到lsmeans
函数中
lsMeansLM <- lsmeans(modelLM, ~rep.meas:group)
我的目标是在afex和lsmeans中生成一个准确的组*时间
交互估计值。为了实现这一点,需要根据上述lsmeans
函数中指定的拆分来指定自定义对比矩阵。
groupMain = list(c(-1,-1,-1,-1,1,1,1,1)) # group main effect
linTrend = list(c(-3,-1,1,3,-3,-1,1,3)) # linear trend
linXGroup = mapply("*", groupMain, linTrend) # group x linear trend interaction
然后我制作了一个总清单。
contrasts <- list(groupMain=groupMain, linTrend=linTrend, linXGroup=linXGroup)
我把它传递到lsmeans
中的contrast
函数。
contrast(lsMeansLM, contrasts)
输出中的F和p值与在SPSS中生成的混合ANCOVA中的线性趋势自动测试及组别差异的线性趋势相匹配。但是,混合ANCOVA并不生成估计值。
使用上述过程得出的效果估计值,与lmer
中的近似-1(与我内置数据的差异匹配)不同,大约为-10,误差极大。
我认为这与我如何编写对比系数有关。我知道如果将groupMain
矩阵的系数归一化,即通过将所有系数除以四来获得跨所有时间点平均的组主效应的准确估计值。但我不知道如何获得跨组别平均的线性趋势(linTrend
)或跨组别的线性趋势差异(linXGroup
)的准确估计值。
我不确定这个问题更适合发布在哪里,是在这里还是Cross Validated。我首先考虑了这里,因为它似乎与软件有关,但我知道可能涉及更深层次的问题。非常感谢任何帮助。
lstrends()
和.Last.value
,这是我之前不知道的。在modelLM
对象中,我使用了一个因子变量time
,而不是timeNum
变量。我想知道是否有办法生成使用modelLM
对象和我在lsmeans
中指定的对比矩阵之间的线性趋势差异的准确估计(即而不是使用modelLMER
对象)? - llewmillslsmeans(lsmeansLM, interaction = c("poly","pairwise")
是怎么样的呢? - Russ Lenthcontrast()
而不是lsmeans()
。 - Russ Lenth