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?