问题描述
我有一个线性模型,按特定顺序输入术语很重要,因为我计划使用 I 型方差分析。我希望模型包含前两个主效应及其在第三个主效应之前的交互作用。
但是,当我将其作为公式输入到 lm()
中时,它仍然会首先给出所有三个主要效应的输出,然后是交互作用。可以改吗?
## Example data:
df <- structure(list(x1 = structure(c(1L,1L,2L,3L,3L),.Label = c("A","B","C"),class = "factor"),x2 = c(0L,0L,0L),x3 = c(1L,4L,5L,6L,2L),y = c(49.5,62.8,46.8,57,59.8,58.5,55.5,56,55.8,69.5,55,62,48.8,45.5,44.2,52,51.5,49.8,57.2,59,53.2,56)),class = "data.frame",row.names = c(NA,-24L))
## formula using desired order:
mod1 <- lm(y ~ x1 + x2 + x1:x2 + x3 + x1:x3 + x2:x3 + x1:x2:x3,data=df)
## standard formula:
mod2 <- lm(y ~ x1*x2*x3,data=df)
## same order in anova output:
anova(mod1)
anova(mod2)
## test to show coefficient order affects outputs:
## (but can only change main effects around)
anova(mod2 <- lm(y ~ x1*x2*x3,data=df))
anova(mod3 <- lm(y ~ x1*x3*x2,data=df))
解决方法
事实证明可以使用 terms
对象:
mod_terms<-terms(y ~ x1 + x2 + x1:x2 + x3 + x1:x3 + x2:x3 + x1:x2:x3,keep.order=T)
mod3 <- lm(mod_terms,data=df)
anova(mod3)