我正在通过构建用于计算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。有趣的是,我所指的那本书说我手动计算的值是正确的。
我哪里错了?