我知道这篇文章的答案已经被选择了。但我仍然希望指出如何在拟合多次重复测量数据的aov
或lmer
模型时,如何指定正确的误差项/随机效应。我假设两个自变量(IVs)是固定的,并且交叉和与受试者一起,这意味着所有受试者都暴露于IVs的所有组合中。我将使用Kirk的《Experimental Design: Procedures for the Behavioral Sciences》(2013年)中的数据。
library(lme4)
library(foreign)
library(lmerTest)
library(dplyr)
file_name <- "http://www.ats.ucla.edu/stat/stata/examples/kirk/rbf33.dta"
d <- read.dta(file_name) %>%
mutate(a_f = factor(a), b_f = factor(b), s_f = factor(s))
head(d)
本研究对5个受试者(s)进行了2种不同的处理方式,包括节奏类型(a)和训练时长(b),每种处理方式各有3个水平。结果变量是对少数族裔的态度。在第3步中,我将a,b和s转化为因子变量a_f,b_f和s_f。设p和q分别为a_f和b_f的水平数量(均为3),n为样本量(5)。
在这个例子中,对于a_f,b_f以及它们的交互作用的检验应该分别使用自由度(dfs)为p-1=2、q-1=2和(p-1)*(q-1)=4。s_f误差项的df为(n-1)=4,而Within (s_f:a_f:b_f)误差项的df为(n-1) * (pq-1)=32。因此正确的模型应该给出这些dfs。
使用aov
现在让我们尝试使用不同的模型规范来使用aov:
aov(y ~ a_f*b_f + Error(s_f), data=d)
aov(y ~ a_f*b_f + Error(s_f/a_f:b_f), data=d)
aov(y ~ a_f*b_f + Error(s_f/a_f*b_f), data=d)
在m1中将错误简单地指定为Error(s_f)
,可以得到与书中数值相匹配的正确dfs和F-比值。m2也给出了与m1相同的值,但还有臭名昭著的“警告:Error()模型是奇异的”。m3正在做一些奇怪的事情。它在m1(634.9)中进一步将Within残差分成三个错误项的残差:s_f:a_f (174.2)、s_f:b_f (173.6)和s_f:a_f:b_f (287.1)。这是错误的,因为当我们运行2因素组间方差分析时,我们不会得到三个错误项!多个错误项也与使用块级因子设计的目的不符,该设计允许我们对A、B和AB的测试使用相同的错误项,而分割区组设计则需要2个错误项。
使用lmer
如果数据是平衡的,那么lmerTest
中使用的Kenward-Roger近似方法将给出精确的dfs和F-比值。
lmer(y ~ a_f*b_f + (1|s_f), data=d)
lmer(y ~ a_f*b_f + (1|s_f/a_f:b_f), data=d)
lmer(y ~ a_f*b_f + (1|s_f/a_f*b_f), data=d)
lmer(y ~ a_f*b_f + (1|s_f:a_f:b_f), data=d)
lmer(y ~ a_f*b_f + (a_f*b_f|s_f), data=d)
仅将随机效应指定为(1|s_f)
即可获得正确的dfs和F-比率(mem1)。mem2-5甚至没有给出结果,可能需要估计的随机效应数量大于样本大小。