anova(data,a):=block(
   [dta:flatten(data)],
   N:length(dta),
   globalmean:mean(dta),
   numberofgroups:length(data),
   groupmean:map(lambda([u], apply("+",u)/length(u)),data),
   groupvar:map(lambda([u], apply("+",u*u)/(length(u)-1) ),data-groupmean),   
   groupvarmean:apply("+",groupvar)/length(groupvar),
   meanvar:apply("+",(groupmean-mean(groupmean))^2)/(length(groupmean)-1),
   elementsofgroups:map(lambda([u], length(u) ),data),
   SQA:apply("+",(groupmean-globalmean)^2*elementsofgroups),
   SQR:apply("+",(elementsofgroups-1)*groupvar),
   print("global mean: ",globalmean," groups:",numberofgroups),
   print("groups mean: ",groupmean),
   print("groups var: ", groupvar),
   print("SQA: ",SQA," MQA:",SQA/(numberofgroups-1)),
   print("SQR: ",SQR," MQR:",SQR/(N-numberofgroups)),
   F:SQA/SQR/(numberofgroups-1)*(N-numberofgroups),
   q:quantile_f(1-a,numberofgroups-1,N-numberofgroups),
   if (F > q) then(
       print("Teststatik: F ",F," > Q ",q),
       print("Nullhypothese abgelehnt => Mittelwerte sind signifikant unterschiedlich bei a=",a,"")
   )else(
       print("Teststatik: F ",F," < Q ",q),
       print("Nullhypothese nicht abgelehnt => Mittelwerte sind nicht signifikant unterschiedlich bei a=",a,"")
   ),
   print("p-Wert (Wahrsch. > F) ",1-cdf_f(F,numberofgroups-1,N-numberofgroups),"")
)$
auf den Wer F zur Teststatistik - kannt Du selber klären, wie das was nach F kommt, zu deiner Vorlesung passt?