完全嵌套的方差分析

时间:2015-01-17 12:40:41

标签: r statistics nested anova

我试图重现NIST下一页底部的例子:

http://www.itl.nist.gov/div898/handbook/ppc/section2/ppc233.htm

使用Minitab和SPSS这不是问题,但是R我不明白。

我试过了:

mydata<-read.csv("mydata.csv",header=T,sep=";")
summary(aov(Measure~factor(Machine)/factor(Operator),data=mydata))

但是F值不正确。

感谢您的帮助

PS:这是NIST(mydata.csv)的数据集

Operator;Machine;Replicate;Measure
1;1;1;0.125
1;1;2;0.127
1;1;3;0.125
1;1;4;0.126
1;1;5;0.128
1;2;1;0.118
1;2;2;0.122
1;2;3;0.12
1;2;4;0.124
1;2;5;0.119
1;3;1;0.123
1;3;2;0.125
1;3;3;0.125
1;3;4;0.124
1;3;5;0.126
1;4;1;0.126
1;4;2;0.128
1;4;3;0.126
1;4;4;0.127
1;4;5;0.129
1;5;1;0.118
1;5;2;0.129
1;5;3;0.127
1;5;4;0.12
1;5;5;0.121
2;1;1;0.124
2;1;2;0.128
2;1;3;0.127
2;1;4;0.126
2;1;5;0.129
2;2;1;0.116
2;2;2;0.125
2;2;3;0.119
2;2;4;0.125
2;2;5;0.12
2;3;1;0.122
2;3;2;0.121
2;3;3;0.124
2;3;4;0.126
2;3;5;0.125
2;4;1;0.126
2;4;2;0.129
2;4;3;0.125
2;4;4;0.13
2;4;5;0.124
2;5;1;0.125
2;5;2;0.123
2;5;3;0.114
2;5;4;0.124
2;5;5;0.117

2 个答案:

答案 0 :(得分:1)

您可以使用随机术语指定模型,以及如何使用公式中的Error项来划分以获得F比率(我将机器和运算符更改为数据中的因子):

> summary(aov(Measure~Machine + Error(interaction(Machine,Operator)),data=mydat))

Error: interaction(Machine, Operator)
          Df    Sum Sq   Mean Sq F value  Pr(>F)   
Machine    4 0.0003033 7.583e-05   20.38 0.00269 **
Residuals  5 0.0000186 3.720e-06                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Error: Within
          Df   Sum Sq  Mean Sq F value Pr(>F)
Residuals 40 0.000346 8.65e-06            

答案 1 :(得分:0)

aov功能摘要:

> summary(aov(Measure~factor(Machine)/factor(Operator),data=mydata))
                                 Df    Sum Sq   Mean Sq F value   Pr(>F)    
factor(Machine)                   4 0.0003033 7.583e-05   8.766 3.52e-05 ***
factor(Machine):factor(Operator)  5 0.0000186 3.720e-06   0.430    0.825    
Residuals                        40 0.0003460 8.650e-06                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

正如您在问题中所说,8.766与您预期的20.38不同。

但是,这不是函数的错误。这是因为aov函数的工作原理。正如文件所说(?aov):

  

通过调用每个层来调整lm的方差分析。

注意上面一行中的'each'。这意味着aov函数始终根据variable MSE / Residuals MSE计算F统计量(F值)。正如您所看到的,8.766factor(Machine)Residuals之间划分的结果,即75.83 / 8.65 = 8.766

如果您想深入挖掘一下(在控制台上输入summary.aov),可以在源代码中看到这一点:

if (rdf > 0L) {
        TT <- ms/ms[nt]
        TP <- pf(TT, df, rdf, lower.tail = FALSE)
        TT[nt] <- TP[nt] <- NA
        x$"F value" <- TT
        x$"Pr(>F)" <- TP
    }

这也是F value的{​​{1}}正确的原因。

如果您想要找到F统计量和相关概率,factor(Machine):factor(Operator)factor(Machine)之间的划分只是自己计算:

factor(Machine):factor(Operator)

a <- summary(aov(Measure~factor(Machine)/factor(Operator),data=mydata))

相应的概率> a[[1]]$'Mean Sq'[1] / a[[1]]$'Mean Sq'[2] #which is what you want [1] 20.38441

Pr(>F)