因斯托拉的Anova

时间:2014-11-23 19:40:45

标签: r anova

我很难理解R中的factorial anova的总结 我不明白为什么我只得到第一个变量的Df为2。 A,B,C和D都有3个等级,所以在我的理解中我应该得到2个Df用于那些和那些的相互作用。 请帮我修改代码或理解结果。

P.S。我在哪里可以找到summary()的选项列表?我看到一个示例在sig级别之后移除了*,我想看看我有哪些选项。

提前谢谢

这是我的数据

我有完整的数据集

 Runs I  A  B  C  D AB  E AD BC  F  G  H  J  K B1 B2     y
1     1 1 -1 -1 -1 -1  1  1  1  1  1  1 -1 -1 -1 -1  1 190.9
2     2 1  1 -1 -1 -1 -1 -1 -1  1  1  1  1  1  1 -1 -1 436.2
3     3 1 -1  1 -1 -1 -1  1  1 -1 -1  1  1  1 -1  1 -1 480.3
4     4 1  1  1 -1 -1  1 -1 -1 -1 -1  1 -1 -1  1  1  1 406.3
5     5 1 -1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1  1 -1 212.9
6     6 1  1 -1  1 -1 -1  1 -1 -1  1 -1 -1  1 -1  1  1 478.7
7     7 1 -1  1  1 -1 -1 -1  1  1 -1 -1 -1  1  1 -1  1 396.5
8     8 1  1  1  1 -1  1  1 -1  1 -1 -1  1 -1 -1 -1 -1 349.7
9     9 1 -1 -1 -1  1  1  1 -1  1 -1 -1 -1  1  1  1 -1 119.7
10   10 1  1 -1 -1  1 -1 -1  1  1 -1 -1  1 -1 -1  1  1 372.2
11   11 1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1  1 411.6
12   12 1  1  1 -1  1  1 -1  1 -1  1 -1 -1  1 -1 -1 -1 382.8
13   13 1 -1 -1  1  1  1 -1 -1 -1 -1  1  1  1 -1 -1  1 161.2
14   14 1  1 -1  1  1 -1  1  1 -1 -1  1 -1 -1  1 -1 -1 424.3
15   15 1 -1  1  1  1 -1 -1 -1  1  1  1 -1 -1 -1  1 -1 322.8
16   16 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 302.1
17   17 1  0  0  0  0  0  0  0  0  0  0  0 -1  1  0  0 302.4
18   18 1  0  0  0  0  0  0  0  0  0  0  0  1 -1  0  0 318.2
19   19 1  0  0  0  0  0  0  0  0  0  0  0 -1  1  0  0 332.8

> data
###Factors
> A
 [1] -1 1  -1 1  -1 1  -1 1  -1 1  -1 1  -1 1  -1 1  0  0  0 
Levels: -1 0 1
> B
 [1] -1 -1 1  1  -1 -1 1  1  -1 -1 1  1  -1 -1 1  1  0  0  0 
Levels: -1 0 1
> C
 [1] -1 -1 -1 -1 1  1  1  1  -1 -1 -1 -1 1  1  1  1  0  0  0 
Levels: -1 0 1
> D
 [1] -1 -1 -1 -1 -1 -1 -1 -1 1  1  1  1  1  1  1  1  0  0  0 
Levels: -1 0 1

####Response variable
> data$y
 [1] 190.9 436.2 480.3 406.3 212.9 478.7 396.5 349.7 119.7 372.2 411.6 382.8 161.2 424.3 322.8 302.1 302.4 318.2
[19] 332.8

A=as.factor(data$A)
B=as.factor(data$B)
C=as.factor(data$C)
D=as.factor(data$D)



out3=lm(data$y~C+B+A+D)
fit1=aov(out3)
summary(fit1)

> summary(fit1)
            Df Sum Sq Mean Sq F value Pr(>F)  
C            2   2743    1372   0.170 0.8456  
B            1  26896   26896   3.332 0.0910 .
A            1  45839   45839   5.679 0.0331 *
D            1  12928   12928   1.602 0.2279  
Residuals   13 104934    8072

具有不同变量顺序的相同anova

  

摘要(FIT1)                   Df Sum Sq Mean Sq F值Pr(> F)
      B 2 28199 14100 1.747 0.2129
      A 1 45839 45839 5.679 0.0331 *       D 1 12928 12928 1.602 0.2279
      C 1 1440 1440 0.178 0.6796
      残余物13 104934 8072

如果我只用2个级别进行anova(对所有变量排除0,并且仅使用[1:16]数据,因为最后3个数据基于“0”级别),那么它很好。所有var但残差都得到Df为1。

1 个答案:

答案 0 :(得分:0)

我正在努力思考和思考,并说如何能够正确计算自由度?但有时我们只考虑复杂的事情而忘记简单的事情。我发现了问题所在:

data <- read.table(header=T,text='Runs I  A  B  C  D AB  E AD BC  F  G  H  J  K B1 B2     y
1     1 1 -1 -1 -1 -1  1  1  1  1  1  1 -1 -1 -1 -1  1 190.9
2     2 1  1 -1 -1 -1 -1 -1 -1  1  1  1  1  1  1 -1 -1 436.2
3     3 1 -1  1 -1 -1 -1  1  1 -1 -1  1  1  1 -1  1 -1 480.3
4     4 1  1  1 -1 -1  1 -1 -1 -1 -1  1 -1 -1  1  1  1 406.3
5     5 1 -1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1  1 -1 212.9
6     6 1  1 -1  1 -1 -1  1 -1 -1  1 -1 -1  1 -1  1  1 478.7
7     7 1 -1  1  1 -1 -1 -1  1  1 -1 -1 -1  1  1 -1  1 396.5
8     8 1  1  1  1 -1  1  1 -1  1 -1 -1  1 -1 -1 -1 -1 349.7
9     9 1 -1 -1 -1  1  1  1 -1  1 -1 -1 -1  1  1  1 -1 119.7
10   10 1  1 -1 -1  1 -1 -1  1  1 -1 -1  1 -1 -1  1  1 372.2
11   11 1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1  1 411.6
12   12 1  1  1 -1  1  1 -1  1 -1  1 -1 -1  1 -1 -1 -1 382.8
13   13 1 -1 -1  1  1  1 -1 -1 -1 -1  1  1  1 -1 -1  1 161.2
14   14 1  1 -1  1  1 -1  1  1 -1 -1  1 -1 -1  1 -1 -1 424.3
15   15 1 -1  1  1  1 -1 -1 -1  1  1  1 -1 -1 -1  1 -1 322.8
16   16 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 302.1
17   17 1  0  0  0  0  0  0  0  0  0  0  0 -1  1  0  0 302.4
18   18 1  0  0  0  0  0  0  0  0  0  0  0  1 -1  0  0 318.2
19   19 1  0  0  0  0  0  0  0  0  0  0  0 -1  1  0  0 332.8')

a.dummies <- model.matrix(~A)
b.dummies <- model.matrix(~B)
c.dummies <- model.matrix(~C)
d.dummies <- model.matrix(~D)


a<-cbind(a.dummies[,-1],b.dummies[,-1])
b<-cbind(c.dummies[,-1],d.dummies[,-1])
all<-cbind(a,b)

我冒昧地自己创造了假人,一个接一个地检查它们。问题就出现了。 简单相关表:

  

COR(全部)

           A0         A1         B0         B1         C0         C1         D0         D1
A0  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745
A1 -0.3692745  1.0000000 -0.3692745  0.1363636 -0.3692745  0.1363636 -0.3692745  0.1363636
B0  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745
B1 -0.3692745  0.1363636 -0.3692745  1.0000000 -0.3692745  0.1363636 -0.3692745  0.1363636
C0  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745
C1 -0.3692745  0.1363636 -0.3692745  0.1363636 -0.3692745  1.0000000 -0.3692745  0.1363636
D0  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745  1.0000000 -0.3692745
D1 -0.3692745  0.1363636 -0.3692745  0.1363636 -0.3692745  0.1363636 -0.3692745  1.0000000

lm函数的工作方式(以及更多的模型函数)是消除两个相关正好为1的变量之一,即删除重复列。在你的情况下,C0与A0,B0和D0的相关性为1,因此从模型中删除了3个,有效地将因子的级别数减少到A,B和D的2个。因此,自由度现在为1 A,B和D。

神秘解决了!!!