ANOVA

什么是统计学?
两句话:
考察\forall \theta\in\Theta的一致的概率行为,而不是单个测度。
Decision theory的思想,即:给出decision,然后evaluate之。

ANOVA
本文只关注oneway ANOVA。

背景与模型设置
之前写过一篇two-sample comparison。ANOVA说白了就是更加一般的multi-sample comparison。
我们有k组数据:

这里面每组的个数不一定要相等。这是two-sample comparison的推广。我们的目的是研究这些组别之间有没有显著差异。
对于这种数据,画boxplot图是很合适的。这种descriptive statistic的工作虽然简单,但是能给出很多直观信息。
下面来具体设定statistical model。未知的参数为期望值\theta_1,…,\theta_k表示“药物的作用”。样本的分布为

这里面需要注意的点是:
1.\sigma是未知的,它代表测量或者个体带来的误差;
2.假设所有sigma都相等。这叫做homoscedasticity假设。这个假设是必要的,也是最让我们感到难受的。因为不同的药物不仅会导致均值的改变,还可能导致方差的改变。采用homoscedasticity假设是统计学里面的一个常用的近似。原因在于:采用了这个假设,处理起来会方便很多,理论也干净很多,具有很好的统计性质。大多数情况下只要方差没有显著变化,采用homoscedasticity假设都是合理的。另一方面,对于方差不等的情况,即Behrens-Fisher问题,前面的一篇笔记也讨论过,至今没有完全解决,只有一些compromise的解决方法。所以后面我们都在homoscedasticity的假设下干活。如果数据严重violate了这个假设(heteroscedasticity),就需要别的方法了,比如做变换。

Partitioning SS恒等式
在进入正题之前,我们首先讨论一个纯代数的恒等式。我称之为Partitioning SS恒等式。

简单来记就是

总的sum of square(SS)可以按照来源分为两个部分:within groups的和between groups的,两个直接线性相加就是总的SS。这就是ANOVA这个名字的来源。换句话说ANOVA的根基就是一个代数恒等式,跟统计没数目关系。
它的证明过于简单,不写了。纯代数的操作而已。
另外要注意的一点是:这个恒等式隐含了自由度的信息在里面:

做chi square test, t test, f test的时候要用到这些自由度。

问题
ANOVA有两个问题。
问题1是two-sample comparison的简单推广,即对某些组的数据做comparison。换句话说,我们想对这样的线性组合做假设检验或参数估计:

这属于univariate manner,所以做法还是跟two-sample comparison一样,用t test就完事了。特别的,如果a_i的和为0,我们把它叫做一个contrast,比如\theta_1-\theta_2就是一个contrast,它就是two-sample comparison的考察对象。
问题2是一个multivariate manner,它想要检验以下零假设:

这个零假设一看就非常蠢。我们肯定希望它不成立,可是就算知道不成立,我们还是不知道不同treatments之间哪些有差距,有多大的差距。所以问题2的确很蠢,在实际用处上肯定不如问题1。但是问题2在统计上有非常优美和自然的解决方案。我们说的传统的ANOVA指的就是问题2,虽然没用,但是好看。
问题1和问题2是有联系的。回忆UIT和IUT(分不清哪个是哪个了...),问题2相当于说对问题1的所有contrasts取并。所以问题1的解决多走一步就解决了问题2。

问题1的解决
完全按照two-sample comparison的方法来,构造t test的标准操作:

接下来就可以做假设检验和区间估计了。没什么好说的,都是自然而标准的操作。
说实话假设检验并没有什么用。我们并不只想知道药有没有用,而是它有多大用。所以实际中都是要把假设检验invert成区间估计的。

问题2的解决
问题2虽然没用,但它的解法才有ANOVA的特色。
怎么从问题1走向问题2是一个最优化的technical的问题,不具体写了,只给出结论:

这就是一个标准的F test。直观也是很明确的:如果零假设成立,则SS大部分在SSW里面,SSB分配到很少,所以F statistic集中在0附近。如果F statistic很大,就说明有问题了。
最后多说一句,这个test其实就是LRT test。简单算一下就知道了。不过从LRT角度来机械地推,看不出很多直观。ANOVA是很直观的。

multiple comparisons
当我们想要同时估计比如\theta_1-\theta_2和\theta_2-\theta_3的区间时,是要在R^2上给出一个集合来。如果我们用二者的1-\alpha的区间(带)取并,则coverage probability会小于1-\alpha。但是,如果我们把背个区间(带)放大,变成1-\alpha/2的区间,那么取并之后的coverage probability就大于等于1-\alpha/2+1-\alpha/2-1=1-\alpha(Bonferroni不等式),满足要求。这就是multiple comparison的Bonferroni方法。

除此之外还有一些别的处理方法,比如Scheffe’s S method,Tukey’s Q method,LSD procedure,Duncan’s procedure等,具体可看Casella。

Matlab实现
假装我们有两种药。没有用药时,某一指标服从N(0,1),有100个样本;用了药A,该指标服从N(1,1),有50个样本;用了药B,该指标服从N(2,1),有70个样本。用随机数生成这些样本。
data1=randn(1,100);
data2=randn(1,50)+1;
data3=randn(1,70)+2;
data2=[data2,NaN(1,50)];
data3=[data3,NaN(1,30)];
data=[data1;data2;data3];
data=data';
注意,这里要按照前面那种表格的形式输入数据。boxplot和anova1函数只认这种形式的数据。对不齐的用NaN凑上。
在做统计分析之前,做一下描述性统计学的工作,建立一下直观总是好的。
boxplot(data)给出boxplot图:

图中可以看出显著的差异了。接下来做ANOVA:anova1(data),给出ANOVA table:

这个表把beyond和within的SS,F statistic以及p-value全部写出来了。最终的p值为1.4237e-22,完全可以断定药物时有效的(这种confidence放在粒子物理里也绰绰有余了)。注意表中SS和df两列的前两行是可以相加的,这就是partitioning SS恒等式。