从 R 中的重复测量双向 ANOVA 中删除交互项:汽车包中的 Anova() 函数

机器算法验证 r 方差分析 重复测量 相互作用
2022-04-05 00:44:42

Anova()我的问题涉及使用包中的函数在双向重复测量方差分析中排除交互项(一旦被认为是微不足道的)car这个问题的动机是:

  1. 试图更好地理解Anova()函数是如何工作的
  2. 好奇心
  3. 希望与我教授其他类型的 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()函数的设置方式,是否无法解决这个问题。

1个回答

虽然我不是重复测量方差分析方面的专家,但我Anova()car.

Type I或顺序方差分析以有效的任意顺序估计一系列模型,每次都从后续步骤中永久删除先前测试的回归量。它的许多步骤不一定很有趣,因为在测试中没有考虑完整的模型。虽然Type IIIAnova 总体上看起来像一个蛇坑,但除非您绝对知道自己在做什么(例如指定正确的对比、正确解释系数和各种哲学难题),否则您不会触摸它。

至于Type II方差分析,在我的理解和一般原则中,它通过精心选择的测试估计一系列模型,每次从模型中删除一个回归量,同时尊重边际原则“边际原则”要求在将包含变量的模型与不包含变量的模型进行比较时,应从两个模型中删除包含所述变量(例如交互作用)的所有高阶项。在不违反边际原则的情况下,每一步都使用完整模型。Anova(..., type=2)有关工作原理及其理论基础的更详细说明,请参阅Fox 和 Weisberg (2011)Fox (2016)甚至Venables 和 Ripley (2002)(处理边缘性原则的相关章节相对较短)。

因此,在没有任何其他信息的情况下(除非?Anova这些特定型号有相反的指示),通过查看上表,我会假设:

  • 通过将完整模型与不包含交互项的模型(如往常一样)进行比较来估计F-test与交互项相关的项。diet:time_fac
  • 与主效应回归量F-test相关的time_fac是通过比较两个都删除了交互项的模型来估计的:包含两者 diet的模型和time_fac仅包含 的模型diet
  • 主效应回归量相关的 与上述类似:包含F-test模型与仅包含 的模型diet diettime_factime_fac

因此,为了回答您的问题,交互项会根据边际原则的要求自动删除,因此在没有交互项的混杂效应的情况下测试了主效应。如果交互项显着,则忽略主效应;否则,您只考虑主效应。