#anova_lm
##《概率论与数理统计》378页例8.1.2
from statsmodels.stats.anova import anova_lm
from statsmodels.formula.api import ols
import pandas as pd
data= pd.DataFrame(
{
"weights":[73,9,60,1,2,12,9,28,
107,92,-10,109,90,74,122,1,
93,29,80,21,22,32,29,48],
"a":["1"]*8+["2"]*8+["3"]*8
}
)
model = ols('weights ~a', data=data)
test = model.fit()
anova_lm(test)
Out:
df sum_sq mean_sq F PR(>F)
a 2.0 9660.083333 4830.041667 3.594816 0.045432
Residual 21.0 28215.875000 1343.613095 NaN NaN
自编
import numpy as np
a1=np.array([73,9,60,1,2,12,9,28])
a2=np.array([107,92,-10,109,90,74,122,1])
a3=np.array([93,29,80,21,22,32,29,48])
m=8
r=3
n=m*r
y_bar=(sum(a1+a2+a3))/(m*r)
y1_d_bar=np.mean(a1)
y2_d_bar=np.mean(a2)
y3_d_bar=np.mean(a3)
sa=m*((y1_d_bar-y_bar)**2+(y2_d_bar-y_bar)**2+(y3_d_bar-y_bar)**2)
se=sum((a1-y1_d_bar)**2)+sum((a2-y2_d_bar)**2)+sum((a3-y3_d_bar)**2)
f=(sa/(r-1))/(se/(n-r))
f
Out[3]: 3.594815861638174
拒绝域
>> finv(0.95,2,21)
ans =
3.4668