Python 统计分析--单因素方差分析

Python 统计分析–单因素方差分析

方差分析的主要工作就是将观测数据的总变异(波动)按照变异的原因的不同分解为因子效应与试验误差,并对其作出数量分析,比较各种原因在总变异中所占的重要程度,以此作为进一步统计推断的依据。

1.基本假设

(1).正态假设。对于因素的每个水平,其观测值都是来自正态总体的随机样本;

(2).方差齐性假设。各个总体的方差相同;

(3).独立假设。观测值之间都是独立的。

2.单因素方差分析

设试验只有一个因子(又称为因素)A有r个水平 A 1 , A 2 , A 3 ,…, A r 。现在水平Ai下进行ni次独立试验,得到的观测数据为 X i j
则单因素方差模型可表示为:

(1). X i j = μ + a i + ε i j , i=1,2,…,r,j=1,2,…, n i

(2). ε i j ~ N(0, σ 2 ),且 ε i j 相互独立

(3). i = 1 r n i α i = 0

其中 μ 为总平均, α i 是第i个水平的效应, ε i j 是随机误差。

我们的目的是要比较因素A的r个水平的效应是否有显著差异,这可归结为检验假设:

H 0 : α 1 = α 2 = . . . = α r

如果 H 0 被拒绝,则说明因素A的各个水平的效应之间有显著差异。

按照方差分析的思想,将总离差平方和分解为两部分,即:

S S T = S S E + S S A

其中

S S T = i = 1 r j = 1 n i ( X i j X ¯ ) 2 , X ¯ = 1 n i = 1 r j = 1 n i X i j

S S E = i = 1 r j = 1 n i ( X i j X i . ¯ ) 2 , X i . ¯ = 1 n j = 1 n i X i j

S S A = i = 1 r j = 1 n i ( X i . ¯ X ¯ ) 2

这里称 S S T 为总离差平方和(总变差),它是所有数据 X i j 与总平均值 X ¯ 之差的平方和,描绘所有观测数据的离散程度; S S E 为误差平方和(组内平方和),是对固定的i,观测值 X i 1 , X i 2 ,…, X i n i 之间的差异大小的度量。 S S A 为因素A的效应平方和(组间平方和),表示因子A各水平下的样本均值和总平均值之差的平方和。

可以证明,当 H 0 成立时

S S E σ 2 ~ χ 2 ( n r ) ,

S S A σ 2 ~ χ 2 ( r 1 )

S S A S S E 独立,于是:
F = S S A / ( r 1 ) S S E / ( n r ) ~ F ( r 1 , n r )

F > F α ( r 1 , n r ) ,则拒绝原假设,认为因素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,
说明有理由拒绝原假设, 即认为五种除杂方法有显著差异。

猜你喜欢

转载自blog.csdn.net/qq_38214903/article/details/81034366