方差分析(ANOVA)又稱“變異數分析”或“F檢驗”,是由R.A.Fister發明的,用于兩個及兩個以上的樣本均數差别的顯著性檢驗。與通常的統計推斷問題一樣,方差分析的任務是先根據實際情況提出原假設H0與備擇假設H1,然後尋找适當的檢驗統計量進行假設檢驗。
試驗中要考察的名額稱為試驗名額,影響試驗名額的條件稱為因素,因素所處的狀态稱為水準,若試驗中隻有一個因素改變,則稱為單因素試驗;若有兩個因素改變,則稱為雙因素試驗;若有多個因素改變,則稱為多因素試驗。方差分析就是對試驗資料進行分析,檢驗方差相等的多個正态總體均值是否相等,進而判斷各因素對試驗名額的影響是否顯著。根據影響試驗名額條件的個數可以區分為單因素方差分析、雙因素方差分析和多因素方差分析。
一、單因素方差分析
單因素方差分析是指對單因素試驗結果進行分析,檢驗因素對試驗結果有無顯著性影響的方法。單因素方差分析是兩個樣本平均數比較的引申,用來檢驗多個平均數之間的差異,進而确定因素對試驗結果有無顯著性影響。
· 因素:影響研究對象的某一名額、變量。
· 水準:因素變化的各種狀态或因素變化所分的等級或組别。
· 單因素試驗:考慮的因素隻有一個的試驗叫單因素試驗。
1.假設前提
設單因素A具有r個水準,分别記為A1, A2,…, Ar,在每個水準Ai(i=1,2,…,r)下,要考察的名額可以看成一個總體,故有r個總體,并假設:
(1)每個總體均服從正态分布,即Xi~N(µi,σ2),i=1,2,…,r。
(2)每個總體的方差σ2相同。
(3)從每個總體中抽取的樣本Xi1,Xi2, …, Xini互相獨立,i=1,2,…,r。
此處的µi、σ2均未知。
那麼,要比較各個總體的均值是否一緻,就要檢驗各個總體的均值是否相等,設第i個總體的均值為μi,則:
假設檢驗為H0:μ1=μ2=…=μi。
備擇假設為H1:μ1,μ2,…,μi不全相等。
2.方差分析的任務
(1)檢驗該模型中r個總體N(µi,σ2)(i=1,2,…,r)的均值是否相等。
(2)作為未知參數μ1,μ2,…,μi,σ2的估計。
Python實作單因素方差分析用到了SciPy.stats.f_oneway()方法,用法很簡單,隻不過在用之前需要先檢驗方差齊性,用到了levene test。
【例1】
輸出:
二、多因素方差分析
多因素方差分析用來研究兩個及兩個以上的控制變量是否對觀測變量産生顯著影響。這裡,由于研究多個因素對觀測變量的影響,是以稱為多因素方差分析。多因素方差分析不僅能夠分析多個因素對觀測變量的獨立影響,還能夠分析多個控制因素的互動作用能否對觀測變量的分布産生顯著影響,進而最終找到有利于觀測變量的最優組合。
【例2】
#-*- coding: utf-8 -*-
from scipy import stats
import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import matplotlib.pyplot as plt
#讀取資料
fPath='altman_910_2.txt'
df=pd.read_csv(fPath,header=None,names=['hs','fetus','observer'])
df=df.dropna()#删除空值
print (df)
formula='hs~C(fetus)+C(observer)+C(fetus):C(observer)'
anova_results=anova_lm(ols(formula,df).fit())
print(anova_results)
hsd=pairwise_tukeyhsd(df['hs'],df['fetus'])
print (hsd.summary())
輸出:
這是随即設計的兩個因素方差分析的結果:顯示fetus的主效應顯著。輸出的結果顯示,3個水準均值均呈現顯著差異(reject==Ture)。