I'm trying to compare the results of a by hand, one-way between-groups ANOVA with those given from R. Weirdly, I get completely different results.
I used formulas given by my professor:
\begin{align} MS_{between} &= \frac{\sum_{p=1}^{K}{(\bar{X}_p-\bar{X}_G)^2}}{K-1} \\ MS_{within} &= \frac{\sum_{p=1}^{K}{(nK-1)S^2_K}}{N-K} \\ F &= \frac{MS_{between}}{MS_{within}}, \end{align} where $K$ represents the number of levels, $N$ the number of observations, $\bar{X}_p$ the mean of the $p$th group, and $\bar{X_G}$ the grand mean, or the mean of the group means.
I was given \begin{align} K &=3 \\ N&=15 \\ \bar{X} &= \{38.2, 20.6, 14.8\} \\ \bar{X}_G & = 24.533 \\ S^2 &= \{66.7, 69.3, 61.7\} \end{align} and thus obtained \begin{align} SS_{between} &= 296.9867 \\ SS_{within} &= 8698.8 \\ df_{between} &= 2 \\ df_{within} &= 12 \\ MS_{between} &= 148.4933 \\ MS_{within} &= 724.9 \\ F &= .2048 \end{align}.
However, this is not the correct answer. I'm supposed to get
And I'm not quite sure what I have done wrong. I know this community isn't particularly for R programming, but I will attach formulas I used to calculate these just in case:
score = c(38, 47, 39, 25, 42, 22, 19, 8, 23, 31, 14, 26, 11,
18, 5)
lev = as.factor(rep(c("p", "l", "m"), each = 5))
dat = data.frame(score, lev)
xbar1 = mean(dat[dat$lev == "p", 1])
xbar2 = mean(dat[dat$lev == "l", 1])
xbar3 = mean(dat[dat$lev == "m", 1])
var1 = var(dat[dat$lev == "p", 1])
var2 = var(dat[dat$lev == "l", 1])
var3 = var(dat[dat$lev == "m", 1])
xbar = c(xbar1, xbar2, xbar3)
var = c(var1, var2, var3)
xbarg = mean(xbar)
SSbet = sum((xbar-xbarg)^2)
SSwith = sum((15*3-1)*var)
dfbet = 3-1
dfwith = 15 -3
MSbet = SSbet / dfbet
MSwith = SSwith / dfwith
f = MSbet / MSwith