1. 程式人生 > >方差分析的數學原理與matlab實現

方差分析的數學原理與matlab實現

方差分析的概念

方差分析(Analysis of Variance,ANOVA),又稱“變異數分析”,1920年由波蘭數學家R.A.Fisher發明,通常用於兩個以上的樣本引數差別的顯著性檢驗。

為什麼要使用方差分析

統計學中的假設檢驗理論已經為樣本引數為兩個的顯著性檢驗提供了較為完備的理論。但是,生活中常常會遇到引數大於兩個的情況,例如:
為了測試不同燈絲對燈泡壽命的影響,選取四種材料(竹,銅,鎢,銀)進行試驗,現在要根據使用不同材料時燈泡的壽命,判斷哪種材料效能更好。
上述這種試驗本質上也是顯著性水平檢驗,只不過水平不再是假設檢驗所討論的兩種情況,而是拓廣成了四種。如果我們仍然以t分佈進行判別的話,應該分別進行三次顯著性檢驗。但這樣會導致一個巨大的隱患。
由統計試驗和概率的特點可知,假設檢驗的結論不會是100%的接受某一個假設,一定存在棄真和取偽的一二類錯誤,兩層水平檢驗下錯誤概率很小,可以忽略。但多水平條件下的檢驗會使錯誤不斷累加,最後達到一個非常高的水平。這種情況稱為誤差疊加

。在誤差疊加的情況下,再使用二水平的顯著性檢驗來傳遞結果時極易使判別結果產生差錯。
為了解決這種情況,Fisher提出了方差分析的思想,其核心是對多水平的樣本方差進行分解,將其分解為兩部分,一部分是表徵組內隨機擾動的統計量Se,另一部分是表徵不同組之間差別的統計量SA,從而更好地進行比較。

方差分析的數學表達

總離差平方和 = 組間離差平方和 + 組內離差平方和,表述為:ST=SA+SE。

  1. 組內差異——測量誤差、個體差異
    SE(誤差平方和):各個水平下,樣本觀察值與樣本均值差異的平方和。
    組內自由度為n-s(n為所有水平下樣本總數,s為組數(水平數)

  2. 組間差異——不同實驗條件處理
    SA(因素A的效應平方和)各個水平下樣本平均值與資料總平均差異的平方和
    組間自由度 dfa=s-1

由F分佈的定義可知,SA/SE~F(s-1,n-s)
由極大似然檢驗的理論可知,若SA/SE非常大,則認為SA具有顯著性。

同理,也可對於雙因素試驗等進行分析。

互動性水平方差分析matlab程式碼示例

// 對A(3,4,2)所示的三維矩陣進行方差分析
A = [14 11 13 10;9 10 7 6;5 13 12 14];
A(:,:,2) = [10 11 9 12;7 8 11 10;11 14 13 10];
all = mean(mean(mean(A)));
a1 = mean(mean(A(1,:,:)));
a2 = mean(mean(A(2,:,:)));
a3 = mean(mean
(A(3,:,:))); b1 = mean(mean(A(:,1,:))); b2 = mean(mean(A(:,2,:))); b3 = mean(mean(A(:,3,:))); b4 = mean(mean(A(:,4,:))); SA = 4*2*((a1-all)^2+(a2-all)^2+(a3-all)^2) SB = 3*2*((b1-all)^2+(b2-all)^2+(b3-all)^2+(b4-all)^2) i = 1; j = 1; k = 1; SAB = 0; while (i<=3) while (j<=4) SAB = SAB+(mean(A(i,j,:))-mean(mean(A(i,:,:)))-mean(mean(A(:,j,:)))+all)^2; j = j+1; end i = i+1; end SAXB = -SAB i=1; j=1; k=1; SE = 0; while (i<=3) while (j<=4) while (k<=2) SE = SE+(A(i,j,k)-mean(A(i,j,:)))^2; k = k+1; end j = j+1; end i = i+1; end SE1 = SE FA = SA/SE FB = SB/SE FAB =SAXB/SE