See this post for the mathematical proof of $E[F_{v1,v2}] = \frac{v_2}{v_2-2}$.
This means that when all the assumptions are met, $E[F_{v1,v2}]$ approaches 1 as $v_2$ grows larger.
You can write an R
function to see this empirically:
Make3Groups <- function(n){ ## note: n = n per group
g1 <- data.frame(y=rnorm(n), x=rep("g1", n))
g2 <- data.frame(y=rnorm(n), x=rep("g2", n))
g3 <- data.frame(y=rnorm(n), x=rep("g3", n))
d <- rbind(g1, g2, g3)
d
}
n_iter <- 1000
set.seed(1)
## n = 2, v2 = 3, E[F] = 3
mean(replicate(n_iter, summary(aov(y~x, data=Make3Groups(2)))[[1]]$"F value"[1])) ## 2.360747
## n = 5, v2 = 12, E[F] = 1.2
mean(replicate(n_iter, summary(aov(y~x, data=Make3Groups(5)))[[1]]$"F value"[1])) ## 1.157286
## n = 34, v2 = 99, E[F] = 1.021
mean(replicate(n_iter, summary(aov(y~x, data=Make3Groups(34)))[[1]]$"F value"[1])) ## 1.056753
Note that empirical results are sometimes off because the number of iterations is relatively small (1000).
To see the effect of heterogeneity of variance on expectations, you can play with different combinations of variances/standard deviations. I used $\sigma^2_i=1^2, 3^2, 10^2$ in the example below. This severe heterogeneity of variance apparently inflated $E[F]$ to 1.54 from 1.2 and in parallel type-I error rate to 0.106 from 0.05.
sd_vector <- c(1, 3, 10)
set.seed(1)
mean(replicate(n_iter, summary(aov(y~x, data=Make3Groups(5, sd_vector)))[[1]]$"F value"[1])) ## 1.541211
mean(replicate(n_iter, summary(aov(y~x, data=Make3Groups(5, sd_vector)))[[1]]$"Pr(>F)"[1]<0.05)) ## 0.106