在数据帧上使用AOV来计算样本均值之间的差异 - 结果不匹配

时间:2017-08-02 15:35:19

标签: r statistics anova

我正在通过构建用于计算F统计量的手动函数并将结果与​​aov()函数进行比较来实践R中的方差分析。但由于某种原因,我的答案不匹配。请你能帮我辨别我哪里出错了。

以下是使用R内置函数的数据框和代码

s <- c(245,258,239,241,277,276,263,274,215,232,225, 247,226,241,253,237,246,240)
mydata <- data.frame(cbind(s, ind = c(rep(1, 4), rep(2, 4), rep(3, 5), rep(4, 5))))
summary(aov(mydata$s ~ mydata$ind))

以下是结果摘要:

      Df Sum Sq Mean Sq F value Pr(>F)
mydata$ind   1    586   586.2   1.973  0.179
Residuals   16   4754   297.1               

这是我的手动公式:

#building the 4 groups
s1 <- mydata$s[1:4]
s2 <- mydata$s[5:8]
s3 <- mydata$s[9:13]
s4 <- mydata$s[14:18]

n1 <- length(s1)
n2 <- length(s2)
n3 <- length(s3)
n4 <- length(s4)
n <- c(n1,n2,n3,n4)
var <- c(var(s1), var(s2), var(s3), var(s4))
m1 <- mean(s1)
m2 <- mean(s2)
m3 <- mean(s3)
m4 <- mean(s4)
m <- c(m1,m2,m3,m4)
globalmean <- sum(m*n)/sum(n)
var.b <- sum(n*(m-globalmean)^2)/(length(n)-1) #numerator of F-statistic i.e. variance between groups with degree of freed = n-1
var.w <- sum(var*(n-1))/sum(n-1) #denominator of F-statistic i.e. variance within groups with degree of freedom = total pop - no. of groups
fstat <- var.b/var.w #fstatistic

我的fstat现在是18.96,而根据aov()它应该是1.973。有趣的是,我所指的那本书说我手动计算的值是正确的。

我哪里错了?

0 个答案:

没有答案