#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



