方差分析的数学原理与matlab实现

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



你可能感兴趣的:(统计学)