单因子方差分析Python实现(小鸡增肥)

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值