1 概要
方差分析(Analysis of variance, ANOVA) 主要研究分類變量作爲自變量時,對因變量的影響是否是顯著的。
方差分析的方法是由20世紀的統計學家Ronald Aylmer Fisher在1918年到1925年之間提出並陸續完善起來的,該方法剛開始是用於解決田間實驗的數據分析問題,因此,方差分析的學習是和實驗設計、實驗數據的分析密不可分的。
方差分析(ANOVA)是數理統計中很常用的內容, 那麼到底是幹什麼用的呢? 在科學試驗和生產實踐中, 影響某一事物的因素往往很多, 比如化工生產中, 像原料成分, 劑量, 反應溫度, 壓力等等很多因素都會影響產品的質量, 有些因素影響較大, 有些影響較小, 爲了使生產過程穩定, 保證優質高產, 就有必要找出對產品質量有顯著影響的因素。 怎麼找呢? 就需要試驗, 方差分析就是根據試驗的結果進行分析, 鑑別各個有關因素對試驗結果影響程度的有效方法。而根據涉及到的因素個數的不同, 又可以把方差分析分爲單因素方差分析、多因素方差分析等。
下面我們先重點研究單因素方差分析, 通過一個例子,引出方差分析中的幾個概念:
某保險公司想了解一下某險種在不同的地區是否有不同的索賠額。 於是他們就蒐集了四個不同地區一年的索賠額情況的記錄如下表:
嘗試判斷一下, 地區這個因素是否對與索賠額產生了顯著的影響?
這個問題就是單因素方差分析的問題, 具體解決方法後面會說, 首先先由這個例子弄清楚幾個概念:
- 試驗指標: 方差分析中, 把考察的試驗結果稱爲試驗指標, 上面例子裏面的“索賠額”。
- 因素: 對試驗指標產生影響的原因稱爲因素, 如上面的“地區”
- 水平: 因素中各個不同狀態, 比如上面我們有A1, A2, A3, A4四個狀態, 四個水平。
這個類比的話, 就類似於y就是試驗指標, 某個類別特徵x
就是因素, 類別特徵x的不同取值就是水平。那麼通過方差分析, 就可以得到某個類別特徵對於y的一個影響程度了吧, 這會幫助分析某個類別特徵的重要性喲!
那麼如何進行單因素方差分析呢?
2. 單因素方差分析原理及python實現
在解決上面的問題之前, 我們得看看單因素方差分析的原理, 也就是把上面的例子概括爲一般性的問題, 分析一下解法。
所謂單因素方差分析, 就是僅考慮有一個因素A對試驗指標的影響。 假如因素A有r個水平, 分別在第i個水平下進行多次獨立的觀測, 所得到的試驗指標數據如下:
A1:N(μ1,σ2)A2:N(μ2,σ2)⋮Ar:N(μr,σ2)X11X21⋮Xr1X12X22⋯Xr2⋯⋯⋮⋯X1nX2n2Xmr
注意這裏的ni不一定一樣, 上面的例子。 各總體間相互獨立, 因此我們會有下面的模型:
⎩⎨⎧Xij=μi+εijεij∼N(0,σ2), 各 εij 獨立 j=1,2,⋯,ni,i=1,2,⋯,r
簡單解釋一下上面這個在說啥:Xij 就是第i個水平的第j個觀測值, 上面例子裏面就是第i個地區第j次的索賠額。ui 表示第iii個水平的理論均值, 後面的εi表示的隨機誤差, 假設這個服從正態。第一個等式的意思就是某個觀測值可以用某水平下的均值加一個誤差來表示。
如果我們想判斷某個因素A對於試驗指標是否有顯著影響, 很直觀的就是我們看看因素A不同的水平下試驗指標的理論均值是否有顯著差異, 即理論均值是否完全相同, 如果有顯著差異, 就說明不同的水平對試驗指標影響很大, 即A對試驗指標有顯著影響。這也是方差分析的目標, 故把問題轉換成了比較不同水平下試驗指標的均值差異。 顯著在這裏的意思是差異達到的某種程度。
基於上面的分析, 我們就可以把方差分析也看成一個檢驗假設的問題, 並有了原假設和備擇假設:
H0:μ1=μ2=…=μrH1:μ1,μ2,…μr 不全相等
那麼這個假設檢驗的問題怎麼驗證呢? 我們得先分析一下, 爲舍各個 Xij 會有差異? 從上面的模型 中,我們可以看到 Xij=μi+ϵij, 所以第一個可能就是 μi 可能有差異, 比如 μ1>μ2, 那麼 X1j 很容易就大於 X2j 。 另一個可能就是隨機誤差的存在。在這樣的啓發下, 我們得找一個衡量全部 Xij 之間差異的量,就是下面這個了:
ST=i=1∑rj=1∑ni(Xij−Xˉ)2
這個叫做總偏差平方和,如果這個越大, 就表示 Xij 之間的差異就越大。這裏的 Xˉ= ∑i=1r∑j=1niXij/n,n=n1+n2,…+n2 表示總的觀測值個數。
接下來, 我們把這個平方和分解開爲兩部分:一部分是由於因素A引起的差異,這個叫做效應平方和 SA, 另一部分是由於隨機誤差引起的差異, 這個叫做誤差平方和 SE
關於 SE, 先固定一個 i, 此時對應的所有觀測值 Xi1,Xi2,…Xini, 他們之間的差異與每個水平的理 論平均值就沒有關係了,而是取決於隨機誤差, 反應這些觀察值差異程度的量∑j=1ni(Xij−Xˉi)2 其中 Xˉi=(Xi1+Xi2+⋯+Xin)/ni,i=1,2,⋯,r 綜合所有的水平, 就可以得到誤
差平方和的公式如下:
SE=i=1∑rj=1∑ni(Xij−Xˉi)2
而上面兩者相減, 就會得到效應平方和SA