Anova()我的问题涉及使用包中的函数在双向重复测量方差分析中排除交互项(一旦被认为是微不足道的)car。这个问题的动机是:
- 试图更好地理解
Anova()函数是如何工作的 - 好奇心
- 希望与我教授其他类型的 ANOVA 的方式保持一致(我告诉我的学生删除一个无关紧要的交互项并重新调整模型以评估主效应)
注意:我知道该Anova()函数有一个type=选项,可以请求 II 型或 III 型 SS,因此我们可以简单地运行模型type=2并评估主效应p值,即使交互不显着。但是,由于上面列出的原因,我仍然很想知道是否有任何方法可以实际删除交互项并拟合仅主要影响的模型。
数据描述:以下示例来自 UCLA 网站,是重复测量的双向 ANOVA,其中一个受试者内因素和一个受试者间因素调用的数据exer由随机分配到两种不同饮食的人组成:低脂和不低脂和三种不同类型的运动:休息、慢走和跑步。他们在指定锻炼期间的三个不同时间点测量他们的脉搏率:1 分钟、15 分钟和 30 分钟。
在这里,我只考虑时间和饮食作为预测因素(为简单起见,忽略锻炼)。请注意,时间是受试者内部因素和饮食,是介于两者之间的因素。
数据重新创建示例:
exer <- read.csv("http://www.ats.ucla.edu/stat/data/exer.csv")
# Convert variables to factor
exer <- within(exer, {diet <- factor(diet)
exertype <- factor(exertype)
time <- factor(time)
id <- factor(id)
}
)
# Convert data to wide format for sake of Anova() function
exer_wide <- reshape(exer,
v.names="pulse", # Outcome variable
timevar="time", # Repeated measures
idvar=c("id", "diet"), # ID variable and non-time-varying predictors
direction="wide")
此时数据的快照:
exer_wide
# id diet exertype pulse.1 pulse.2 pulse.3
# 1 1 1 1 85 85 88
# 4 2 1 1 90 92 93
# 7 3 1 1 97 97 94
# 10 4 1 1 80 82 83
# 13 5 1 1 91 92 91
# 16 6 2 1 83 83 84
# 19 7 2 1 87 88 90
# 22 8 2 1 92 94 95
# 25 9 2 1 97 99 96
# 28 10 2 1 100 97 100
拟合重复测量双向方差分析:
第 1 步:创建线性模型对象(注意右侧的主体间因子):
exer_lm <- lm(cbind(pulse.1, pulse.2, pulse.3) ~ diet, data=exer_wide)
第 2 步:创建时间因子:
time_fac <- factor(c("1","2","3"), ordered=F)
第 3 步:运行 ANOVA(使用 II 型 SS):
library(car)
exer_aov <- Anova(exer_lm, idata=data.frame(time_fac), idesign=~time_fac, type=2)
summary(exer_aov)
# Univariate Type II Repeated-Measures ANOVA Assuming Sphericity
# SS num Df Error SS den Df F Pr(>F)
# (Intercept) 894608 1 11227.0 28 2231.1372 < 2.2e-16 ***
# diet 1262 1 11227.0 28 3.1471 0.08694 .
# time_fac 2067 2 4900.6 56 11.8078 5.264e-05 ***
# diet:time_fac 193 2 4900.6 56 1.1017 0.33940
请注意,单变量和多变量结果都表明交互作用不显着。
现在,我的问题是是否有一种方法可以指定我们不希望交互项适合模型,或者考虑到Anova()函数的设置方式,是否无法解决这个问题。