方差分析的主要功能就是驗證兩組樣本,或者兩組以上的樣本均值是否有顯著性差異,即均值是否一樣。
這裡有兩個大點需要注意:①方差分析的原假設是:樣本不存在顯著性差異(即,均值完全相等);②兩樣本資料無互動作用(即,樣本資料獨立)這一點在雙因素方差分析中判斷兩因素是否獨立時用。
原理:
方差分析的原理就一個方程:SST=SS組間+s-s-r組内 (全部平方和=組間平方和+組内平方和)
說明:方差分析本質上對總變異的解釋。
- 組間平方和=每一組的均值減去樣本均值
- 組内平方和=個體減去每組平方和
方差分析看的最終結果看的統計量是:F統計量、R2。
其中:g為組别個數,n為每個組内資料長度。
python實作:
from scipy import stats
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import warnings
warnings.filterwarnings("ignore")
import itertools
df2=pd.DataFrame()
df2[\'group\']=list(itertools.repeat(-1.,9))+ list(itertools.repeat(0.,9))+list(itertools.repeat(1.,9))
df2[\'noise_A\']=0.0
for i in data[\'A\'].unique():
df2.loc[df2[\'group\']==i,\'noise_A\']=data.loc[data[\'A\']==i,[\'1\',\'2\',\'3\']].values.flatten()
df2[\'noise_B\']=0.0
for i in data[\'B\'].unique():
df2.loc[df2[\'group\']==i,\'noise_B\']=data.loc[data[\'B\']==i,[\'1\',\'2\',\'3\']].values.flatten()
df2[\'noise_C\']=0.0
for i in data[\'C\'].unique():
df2.loc[df2[\'group\']==i,\'noise_C\']=data.loc[data[\'C\']==i,[\'1\',\'2\',\'3\']].values.flatten()
df2
# for A
anova_reA= anova_lm(ols(\'noise_A~C(group)\',data=df2[[\'group\',\'noise_A\']]).fit())
print(anova_reA)
#B
anova_reB= anova_lm(ols(\'noise_B~C(group)\',data=df2[[\'group\',\'noise_B\']]).fit())
print(anova_reB)
#C
anova_reC= anova_lm(ols(\'noise_C~C(group)\',data=df2[[\'group\',\'noise_C\']]).fit())
print(anova_reC)
從結果可以看出,A、B兩樣本,在每個組間均值顯著無差異,C樣本的組間均值是有差異的。