方差分析(ANOVA)又称F检验。方差分析是判定方差在组间和组内是否(明显)具有区别的一种方法。如果组内差异相对于组间差异较小,则可以推断出组与组之间是有明显差异的。
从形式上看,方差分析与t检验或z检验区别不大,都是检验均值是否相等,但方差分析可以同时比较多个均值。
广义的方差分析分为:
在这里主要介绍单因素方差分析(1-way ANOVA)。
首先要说明的是,方差分析一共有三大前提假设:
方差分析的核心思想一句话:“所有样本的总差异可以分解为组间差异和组内差异”,即SST=SSR+SSE。 i i i为组别 ( i = 1 , 2... , I ) (i=1,2...,I) (i=1,2...,I), j j j为观测值个数 ( j = 1 , 2 , 3 , . . . , J ) (j=1,2,3,...,J) (j=1,2,3,...,J), Y i j Y_{ij} Yij为第 i i i组第 j j j个观测值, Y ‾ T o t a l \overline Y_{Total} YTotal为所有观测值的平均数。
F检验的零假设认为所有组的均值都相等,备择假设则认为所有组的均值不全相等(即至少有一个组的均值与其它具有显著差异),如下:
H 0 : μ 1 = μ 2 = . . . = μ n H 1 : 所有组的均值不全相等 H_0:\mu_1=\mu_2=...=\mu_n\\ H_1:所有组的均值不全相等 H0:μ1=μ2=...=μnH1:所有组的均值不全相等
我们要通过SSR与SSE除以各自的自由度,得到MSR和MSE,MSR和MSE的比值就是F统计量:
F = S S R / k − 1 S S E / N − k = M S R M S E ∼ F k − 1 , N − k F=\frac{SSR/k-1}{SSE/N-k}=\frac{MSR}{MSE}\sim F_{k-1,N-k} F=SSE/N−kSSR/k−1=MSEMSR∼Fk−1,N−k
当H0成立时,F统计量服从对应自由度分别为k-1,N-k的F分布。F值越接近1,就越没有理由拒绝H0;反之,F值越大,拒绝H0的理由就越充分。
参考F统计量表, P ( F > 3.05 ) = 0.05 P(F>3.05)=0.05 P(F>3.05)=0.05,在95%置信水平上临界值为3.05。2.17<3.05,所以没有理由拒绝原假设。所以认为这四组数据的均值无显著差异。
from scipy import stats
A1 = [1.6, 1.61, 1.65, 1.68, 1.7, 1.7, 1.78]
A2 = [1.5, 1.64, 1.4, 1.7, 1.75]
A3 = [1.64, 1.55, 1.6, 1.62, 1.64, 1.60, 1.74, 1.8]
A4 = [1.51, 1.52, 1.53, 1.57, 1.64, 1.6]
data = [A1, A2, A3, A4]
f, p = stats.f_oneway(*data)
print(f, p)