Python 统计分析–单因素方差分析
方差分析的主要工作就是将观测数据的总变异(波动)按照变异的原因的不同分解为因子效应与试验误差,并对其作出数量分析,比较各种原因在总变异中所占的重要程度,以此作为进一步统计推断的依据。
1.基本假设
(1).正态假设。对于因素的每个水平,其观测值都是来自正态总体的随机样本;
(2).方差齐性假设。各个总体的方差相同;
(3).独立假设。观测值之间都是独立的。
2.单因素方差分析
设试验只有一个因子(又称为因素)A有r个水平
,
,
,…,
。现在水平Ai下进行ni次独立试验,得到的观测数据为
则单因素方差模型可表示为:
(1). = , i=1,2,…,r,j=1,2,…,
(2). ~ N(0, ),且 相互独立
(3). = 0
其中 为总平均, 是第i个水平的效应, 是随机误差。
我们的目的是要比较因素A的r个水平的效应是否有显著差异,这可归结为检验假设:
如果 被拒绝,则说明因素A的各个水平的效应之间有显著差异。
按照方差分析的思想,将总离差平方和分解为两部分,即:
其中
,
,
这里称 为总离差平方和(总变差),它是所有数据 与总平均值 之差的平方和,描绘所有观测数据的离散程度; 为误差平方和(组内平方和),是对固定的i,观测值 , ,…, 之间的差异大小的度量。 为因素A的效应平方和(组间平方和),表示因子A各水平下的样本均值和总平均值之差的平方和。
可以证明,当 成立时
~ ,
~
且
与
独立,于是:
~
若 ,则拒绝原假设,认为因素A的r个水平有显著差异。
3.案例:
以淀粉为原料生产葡萄的过程中, 残留许多糖蜜, 可作为生产
酱色的原料. 在生产酱色的过程之前应尽可能彻彻底底除杂, 以保证酱色质量.
为此对除杂方法进行选择. 在实验中选用5种不同的除杂方法, 每种方法做4次
试验, 即重复4次
4.Python 代码
import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
df = pd.read_csv("one-way.csv")
df.head()
A B
0 a1 25.6
1 a1 22.2
2 a1 28.0
3 a1 29.8
4 a2 24.4
model = ols('B ~ A',df).fit()
anovat = anova_lm(model)
print(anovat)
df sum_sq mean_sq F PR(>F)
A 4.0 131.957 32.98925 4.306128 0.016182
Residual 15.0 114.915 7.66100
说明: 上述结果中, df表示自由度; sum_sq表示平方和; mean_sq表示均方和;
F表示F检验统计量的值,; PR(>F)表示检验的p值; A就是因素A;Residuals为残差。
5.结果说明:
可以看出p=0.016182<0.05,
说明有理由拒绝原假设, 即认为五种除杂方法有显著差异。