2022年 11月 16日

python进行方差分析

  方差分析(Analysis of Variance, ANOVA)用于两个及两个以上样本均值差别的显著性检验。 方差分析的原理通俗的解释就是将试验数据的总离散分解为来源于不同因素(一种是不可控的随机因素;一种是研究中施加的会对结果形成影响的可控因素)的离散,并作出数据估计,从而发现各个因素在总离散中所占的重要程度。方差分析中的基本概念主要有:

  • 因变量: 又称响应变量。一般指待分析的指标。
  • 因素: 又称因子。一般指调查或试验中需要考察的、可以控制的条件或影响因素。因素所处的不同状态称为水平。方差分析的目的就是为了验证因素的不同水平对试验结果造成的影响是否显著。

  每个因素每一个水平之下调查结果或实验观察结果可以称为一个“组”,可以计算各“组”内部变量的均值于方差,还可以计算因素之下全部观察结果的总平均以及组与组之间的方差。方差分析的基本思想就是从不同角度计算出有关的均值和方差,然后通过组内方差与组间方差的对比,在一定统计理论指导下分析条件误差和随机误差,进而分解或判断出调查或实验观察数据中必然因素(因子)和偶然因素(随机)的影响大小。
  按影响分析指标的因素个数多少的不同,可分为单因素分析、双因素分析和多因素分析。这里只介绍单因素方差分析和双因素方差分析。

1 单因素方差分析
1.1 基本模型

  单因素方差分析只考虑一个因素

A

A

A对因变量的影响,设因素

A

A

A

r

r

r个水平记为:

A

1

,

A

2

,

,

A

r

A_{1},A_{2},\dots,A_{r}

A1,A2,,Ar,在水平

A

i

A_{i}

Ai下进行

n

i

n_{i}

ni次重复试验,可获得观察指标的

n

i

n_{i}

ni个数据:

x

i

1

,

x

i

2

,

,

x

i

n

i

(

i

=

1

,

2

,

,

r

)

x_{i1},x_{i2},\dots,x_{in_{i}}(i=1,2,\dots,r)

xi1,xi2,,xini(i=1,2,,r)。第

A

i

(

i

=

1

,

2

,

,

r

)

A_{i}(i=1,2,\dots,r)

Ai(i=1,2,,r)水平之下各观察指可视作来自总体

X

i

(

i

=

1

,

2

,

,

r

)

X_{i}(i=1,2,\dots,r)

Xi(i=1,2,,r),且

X

i

X_{i}

Xi服从正态分布,

X

i

X_{i}

Xi

X

j

(

i

j

)

X_{j}(i\neq j)

Xj(i=j)相互独立(等方差)。即

X

i

N

(

X

i

,

S

2

)

X_{i}\sim N(\overline X_{i},S^{2})

XiN(Xi,S2)

X

i

1

,

X

i

2

,

,

X

i

n

i

X_{i1},X_{i2},\dots,X_{in_{i}}

Xi1,Xi2,,Xini表示从总体

X

i

X_{i}

Xi中抽取的样本。单因素方差分析的基本统计模型就是把因变量观察值

X

i

j

X_{ij}

Xij分解为三项内容之和,如下:

{

X

i

j

=

X

+

α

i

+

e

i

j

,

(

i

=

1

,

2

,

,

r

;

j

=

1

,

2

,

,

n

i

)

,

e

i

j

N

(

0

,

S

2

)

i

=

1

r

n

i

α

i

=

0

{Xij=¯X+αi+eij,(i=1,2,,r;j=1,2,,ni),eijN(0,S2)ri=1niαi=0

{Xij=X+αi+eij,(i=1,2,,r;j=1,2,,ni),eijN(0,S2)i=1rniαi=0其中

X

=

1

n

i

=

1

r

n

i

X

i

(

n

=

i

=

1

r

n

i

)

\overline X=\frac{1}{n}\sum_{i=1}^{r}n_{i}X_{i}(n=\sum_{i=1}^{r}n_{i})

X=n1i=1rniXi(n=i=1rni)代表一般水平;

α

i

\alpha_{i}

αi表示因素

A

A

A的不同水平导致的因变量差异,即

a

i

=

X

i

X

(

i

=

1

,

2

,

,

r

)

a_{i}=\overline X_{i}-\overline X(i=1,2,\dots,r)

ai=XiX(i=1,2,,r)

e

i

j

=

X

i

j

X

i

e_{ij}=X_{ij}-\overline X_{i}

eij=XijXi极为随机误差,通常假设其服从均值为0方差为

S

2

S^{2}

S2的正态分布。要说明因素

A

A

A的不同水平对因变量有影响,只需证明

a

i

a_{i}

ai不全为0即可。

1.2 偏差平方和分解公式

  上文中提到的

X

X

X

X

i

\overline X_{i}

Xi

S

2

S^{2}

S2

α

i

\alpha_{i}

αi

e

i

j

e_{ij}

eij可由样本观察数据

x

\overline x

x

x

i

\overline x_{i}

xi

α

i

\alpha_{i}

αi

e

i

j

e_{ij}

eij来表示,即

x

=

i

=

1

r

j

=

1

n

i

x

i

j

/

i

=

1

r

n

i

x

i

=

1

n

i

j

=

1

n

i

x

i

j

,

α

i

=

x

i

x

,

e

i

j

=

x

i

j

x

i

\overline x=\sum_{i=1}^{r}\sum_{j=1}^{n_{i}}x_{ij}/\sum_{i=1}^{r}n_{i} ,\overline x_{i}=\frac{1}{n_{i}}\sum_{j=1}^{n_{i}}x_{ij}, \alpha_{i}=\overline x_{i}-\overline x, e_ij=x_{ij}-\overline x_{i},

x=i=1rj=1nixij/i=1rnixi=ni1j=1nixij,αi=xix,eij=xijxi于是就有如下公式成立:

i

=

1

r

j

=

1

n

i

(

x

i

j

x

)

2

=

i

=

1

r

n

i

(

x

i

x

)

2

+

i

=

1

r

j

=

1

n

i

(

x

i

j

x

i

)

2

\sum_{i=1}^{r}\sum_{j=1}^{n_{i}}(x_{ij}-\overline x)^{2}=\sum_{i=1}^{r}n_{i}(\overline x_{i}-\overline x)^{2}+\sum_{i=1}^{r}\sum_{j=1}^{n_{i}}(x_{ij}-\overline x_{i})^{2}

i=1rj=1ni(xijx)2=i=1rni(xix)2+i=1rj=1ni(xijxi)2上式可简记为

S

S

T

=

S

S

A

+

S

S

E

SS_{T}=SS_{A}+SS_{E}

SST=SSA+SSE。其中

S

S

T

=

i

=

1

r

j

=

1

n

i

(

x

i

j

x

)

2

SS_{T}=\sum_{i=1}^{r}\sum_{j=1}^{n_{i}}(x_{ij}-\overline x)^{2}

SST=i=1rj=1ni(xijx)2是所有数据到总样本均值的距离平方和,是因变量对中心位置的变化的总度量;

S

S

A

=

i

=

1

r

n

i

(

x

i

x

)

2

SS_{A}=\sum_{i=1}^{r}n_{i}(\overline x_{i}-\overline x)^{2}

SSA=i=1rni(xix)2是组内样本均值与总平均值的离差加权平方和,是反映因子的不同水平造成因变量变化的总度量;

S

S

E

=

i

=

1

r

j

=

1

n

i

(

x

i

j

x

i

)

2

SS_{E}=\sum_{i=1}^{r}\sum_{j=1}^{n_{i}}(x_{ij}-\overline x_{i})^{2}

SSE=i=1rj=1ni(xijxi)2为组内离差平方和,是随机误差造成试验指标变化的总度量。

1.3 显著性检验

  单因子方差分析实质上是多个正态总体差异性统计检验,所以其原假设为:

H

0

:

α

1

=

α

2

=

=

α

r

=

0

H_{0}:\alpha_{1}=\alpha_{2}=\dots=\alpha_{r}=0

H0:α1=α2==αr=0上述原假设等价于:

H

0

:

X

1

=

X

2

=

=

X

r

H_{0}: \overline X_{1}=\overline X_{2}=\dots=\overline X_{r}

H0:X1=X2==Xr因为当

H

0

H_{0}

H0成立时,有

S

S

T

S

2

=

i

=

1

r

j

=

1

n

i

(

x

i

j

x

S

)

2

χ

2

(

n

1

)

\frac{SS_{T}}{S^{2}}=\sum_{i=1}^{r}\sum_{j=1}^{n_{i}}(\frac{x_{ij}-\overline x}{S})^2\sim\chi^{2}(n-1)

S2SST=i=1rj=1ni(Sxijx)2χ2(n1)

S

S

A

S

2

=

i

=

1

r

n

i

(

x

i

x

S

2

)

2

χ

2

(

r

1

)

\frac{SS_{A}}{S^{2}}=\sum_{i=1}^{r}n_{i}(\frac{\overline x_{i}-\overline x}{S^{2}})^{2}\sim\chi^{2}(r-1)

S2SSA=i=1rni(S2xix)2χ2(r1)

S

S

E

S

2

=

i

=

1

r

j

=

1

n

j

(

x

i

j

x

j

)

2

S

2

χ

2

(

n

r

)

\frac{SS_{E}}{S^{2}}=\frac{\sum_{i=1}^{r}\sum_{j=1}^{n_{j}} (x_{ij}-\overline x_{j})^{2}}{S^{2}}\sim\chi^{2}(n-r)

S2SSE=S2i=1rj=1nj(xijxj)2χ2(nr)其中

n

=

i

=

1

r

n

i

n=\sum_{i=1}^{r}n_{i}

n=i=1rni
  当

S

S

T

SS_{T}

SST固定不变时,如果不同因素水平之下因变量差异越大,即

S

S

A

SS_{A}

SSA越大时

S

S

E

SS_{E}

SSE越小。所以若

S

S

A

SS_{A}

SSA显著大于

S

S

E

SS_{E}

SSE,则说明各总体

X

i

\overline X_{i}

Xi之间的差异越显著,那么

H

0

H_{0}

H0不成立。所以使用

S

S

A

/

S

S

E

SS_{A}/SS_{E}

SSA/SSE来构造检验统计量。具体如下:

F

=

S

S

A

/

(

r

1

)

S

S

E

/

(

n

r

)

F

(

r

1

,

n

r

)

F=\frac{SS_{A}/(r-1)}{SS_{E}/(n-r)}\sim F(r-1,n-r)

F=SSE/(nr)SSA/(r1)F(r1,nr)在给定显著性水平

α

\alpha

α下,查

F

F

F分布表值

F

1

α

(

r

1

,

n

r

)

F_{1-\alpha}(r-1,n-r)

F1α(r1,nr)。若统计量

F

F

F值超过这一临界点,则拒绝原假设,认为样本均值不完全相等,否则不能拒绝原假设。

2 多因素方差分析

  设由

A

,

B

A,B

A,B两个因素影响试验结果指标。因素

A

A

A

r

r

r个水平,因素

B

B

B

s

s

s个水平。依据因素

A

,

B

A,B

A,B之间是否有相互作用,双因素方差分析又可以分为:无交互作用的双因素方法分析和有相互作用的双因素方法分析。

2.1 无交互作用的双因素方差分析

  当因素

A

,

B

A,B

A,B之间没有交互作用时,因素

A

A

A,

B

B

B的不同水平的每种组合都只做一次试验。假设

x

i

j

(

i

=

1

,

2

,

,

r

;

j

=

1

,

2

,

,

s

)

x_{ij}(i=1,2,\dots,r;j=1,2,\dots,s)

xij(i=1,2,,r;j=1,2,,s)之间相互独立,且

x

i

j

N

(

X

i

j

,

S

2

)

x_{ij}\sim N(\overline X_{ij},S^{2})

xijN(Xij,S2),则

x

i

j

=

X

i

j

+

e

i

j

(

i

=

1

,

2

,

,

r

;

j

=

1

,

2

,

,

s

)

x_{ij}=\overline X_{ij}+e_{ij}(i=1,2,\dots,r;j=1,2,\dots,s)

xij=Xij+eij(i=1,2,,r;j=1,2,,s),其中

e

i

j

N

(

0

,

S

2

)

e_{ij}\sim N(0,S^{2})

eijN(0,S2)。此时双因素方法分析的基本模型如下:

{

X

i

j

=

X

+

α

i

+

β

j

+

e

i

j

i

=

1

r

α

i

=

0

,

j

=

1

s

β

j

=

0

{Xij=¯X+αi+βj+eijri=1αi=0,sj=1βj=0

{Xij=X+αi+βj+eiji=1rαi=0,j=1sβj=0其中

X

=

1

/

r

s

i

=

1

r

j

=

1

s

X

i

j

\overline X=1/rs\sum_{i=1}^{r}\sum_{j=1}^{s}\overline X_{ij}

X=1/rsi=1rj=1sXij为总平均值,

α

i

=

X

i

X

X

i

=

1

/

s

j

=

1

s

X

i

j

\alpha_{i}=\overline X_{i\bullet}-\overline X,X_{i\bullet}=1/s \sum_{j=1}^{s}\overline X_{ij}

αi=XiXXi=1/sj=1sXij为因素

A

A

A在水平

i

i

i下对因变量的效应值,

β

j

=

X

j

X

,

X

j

=

1

/

r

i

=

1

r

X

i

j

\beta_{j}=\overline X_{\bullet j}-\overline X, \overline X_{\bullet j}=1/r\sum_{i=1}^{r}\overline X_{ij}

βj=XjX,Xj=1/ri=1rXij为因素

B

B

B在水平

j

j

j下对因变量的效应值。以上各项可有样本数据代替,具体如下:

x

=

1

r

s

i

=

1

r

j

=

1

s

x

i

j

,

x

i

=

1

s

j

=

1

s

x

i

j

,

x

j

=

1

r

i

=

1

r

x

i

j

\overline x=\frac{1}{rs}\sum_{i=1}^{r}\sum_{j=1}^{s}x_{ij}, x_{i \bullet}=\frac{1}{s}\sum_{j=1}^{s}x_{ij}, x_{\bullet j}=\frac{1}{r}\sum_{i=1}^{r}x_{ij}

x=rs1i=1rj=1sxij,xi=s1j=1sxij,xj=r1i=1rxij则有如下公式成立:

i

=

1

r

j

=

1

s

(

x

i

j

x

)

2

=

i

=

1

r

j

=

1

s

(

x

i

x

)

2

+

i

=

1

r

j

=

1

s

(

x

j

x

)

2

+

i

=

1

r

j

=

1

s

(

x

i

j

+

x

x

i

x

j

)

2

\sum_{i=1}^{r}\sum_{j=1}^{s}(x_{ij}-\overline x)^{2}=\sum_{i=1}^{r}\sum_{j=1}^{s}(\overline x_{i\bullet}-\overline x)^{2}+\sum_{i=1}^{r}\sum_{j=1}^{s}(\overline x_{\bullet j}-\overline x)^{2}+\sum_{i=1}^{r}\sum_{j=1}^{s}(x_{ij}+\overline x-\overline x_{i\bullet}-\overline x_{\bullet j})^{2}

i=1rj=1s(xijx)2=i=1rj=1s(xix)2+i=1rj=1s(xjx)2+i=1rj=1s(xij+xxixj)2上述公式可以简记为

S

S

T

=

S

S

A

+

S

S

B

+

S

S

E

SS_{T}=SS_{A}+SS_{B}+SS_{E}

SST=SSA+SSB+SSE
  在总体分布的正态等方差性条件满足时,有:

S

S

T

S

2

χ

2

(

r

s

1

)

,

S

S

A

S

2

χ

2

(

r

1

)

,

S

S

B

S

2

χ

2

(

s

1

)

,

S

S

E

S

2

χ

2

(

(

r

1

)

(

s

1

)

)

\frac{SS_{T}}{S^{2}}\sim\chi^{2}(rs-1),\frac{SS_{A}}{S^{2}}\sim\chi^{2}(r-1), \frac{SS_{B}}{S^{2}}\sim\chi^{2}(s-1), \frac{SS_{E}}{S^{2}}\sim\chi^{2}((r-1)(s-1))

S2SSTχ2(rs1),S2SSAχ2(r1),S2SSBχ2(s1),S2SSEχ2((r1)(s1))  此时方差分析的主要任务是:分析因素

A

A

A和因素

B

B

B对试验观察指标的影响大小,这一问题等价于以下两种假设:
(1) “因素

A

A

A对因变量影响不显著”其对应原假设等价为:

H

01

:

X

1

=

X

2

=

=

X

r

H_{01}: \overline X_{1 \bullet}=\overline X_{2\bullet}=\dots=\overline X_{r\bullet}

H01:X1=X2==Xr其相应的检验统计量为:

F

A

=

S

S

A

/

(

r

1

)

S

S

E

/

(

r

s

r

s

+

1

)

F

(

r

1

,

r

s

r

s

+

1

)

F_{A}=\frac{SS_{A}/(r-1)}{SS_{E}/(rs-r-s+1)}\sim F(r-1,rs-r-s+1)

FA=SSE/(rsrs+1)SSA/(r1)F(r1,rsrs+1)(2) “因素

B

B

B对因变量影响不显著”其对应原假设等价为:

H

02

:

X

1

=

X

2

=

=

X

s

H_{02}: \overline X_{\bullet 1}=\overline X_{\bullet 2}=\dots=\overline X_{\bullet s}

H02:X1=X2==Xs其相应的检验统计量为:

F

B

=

S

S

B

/

(

s

1

)

S

S

E

/

(

r

s

r

s

+

1

)

F

(

s

1

,

r

s

r

s

+

1

)

F_{B}=\frac{SS_{B}/(s-1)}{SS_{E}/(rs-r-s+1)}\sim F(s-1,rs-r-s+1)

FB=SSE/(rsrs+1)SSB/(s1)F(s1,rsrs+1)

2.2 有交互作用的双因素方差分析

  当因素

A

,

B

A,B

A,B之间存在相互作用时,两个因素的不同水平之下的组合都应该有若干个样本观察值。假设在每一对的因素水平组合

(

A

i

,

B

j

)

(A_{i},B_{j})

(Ai,Bj)中,样本容量相同均为

n

n

n

x

i

j

k

x_{ijk}

xijk表示因素

A

B

A、B

AB在第

i

(

i

=

1

,

2

,

,

r

)

j

(

j

=

1

,

2

,

,

s

)

i(i=1,2,\dots,r),j(j=1,2,\dots,s)

i(i=1,2,,r)j(j=1,2,,s)个水平状态下第

k

(

k

=

1

,

2

,

,

n

)

k(k=1,2,\dots,n)

k(k=1,2,,n)个样本观测值。假设

x

i

j

k

N

(

X

i

j

,

S

2

)

(

k

=

1

,

2

,

,

n

)

x_{ijk}\sim N(\overline X_{ij},S^{2})(k=1,2,\dots,n)

xijkN(Xij,S2)(k=1,2,,n)则此时的基本模型为:

{

x

i

j

k

=

X

+

α

i

+

β

j

+

γ

i

j

+

e

i

j

i

=

1

r

α

i

=

0

,

j

=

1

s

β

j

=

0

,

i

=

1

r

γ

i

j

=

0

,

j

=

1

s

γ

i

j

=

0

{xijk=¯X+αi+βj+γij+eijri=1αi=0,sj=1βj=0,ri=1γij=0,sj=1γij=0

{xijk=X+αi+βj+γij+eiji=1rαi=0,j=1sβj=0,i=1rγij=0,j=1sγij=0表现在样本上则有:

i

=

1

r

j

=

1

s

k

=

1

n

(

x

i

j

k

x

)

2

=

n

s

i

=

1

r

(

x

i

x

)

2

+

n

r

j

=

1

s

(

x

j

x

)

2

+

n

i

=

1

r

j

=

1

s

(

x

i

j

+

x

x

i

x

j

)

2

+

i

=

1

r

j

=

1

s

k

=

1

n

(

x

i

j

k

x

i

j

)

2

\sum_{i=1}^{r}\sum_{j=1}^{s}\sum_{k=1}^{n}(x_{ijk}-\overline x)^{2}=ns\sum_{i=1}^{r}(\overline x_{i\bullet\bullet}-\overline x)^{2}+nr\sum_{j=1}^{s}(\overline x_{\bullet j\bullet}-\overline x)^{2}+n\sum_{i=1}^{r}\sum_{j=1}^{s}(\overline x_{ij\bullet}+\overline x-\overline x_{i\bullet\bullet}-\overline x_{\bullet j\bullet})^{2}\\+\sum_{i=1}^{r}\sum_{j=1}^{s}\sum_{k=1}^{n}(x_{ijk}-\overline x_{ij\bullet})^{2}

i=1rj=1sk=1n(xijkx)2=nsi=1r(xix)2+nrj=1s(xjx)2+ni=1rj=1s(xij+xxixj)2+i=1rj=1sk=1n(xijkxij)2其中:

x

=

1

r

s

n

i

=

1

r

j

=

1

s

k

=

1

n

x

i

j

k

,

x

i

=

1

n

s

j

=

1

s

k

=

1

n

x

i

j

k

(

i

=

1

,

2

,

,

r

)

\overline x=\frac{1}{rsn}\sum_{i=1}^{r}\sum_{j=1}^{s}\sum_{k=1}^{n}x_{ijk},\overline x_{i\bullet\bullet} =\frac{1}{ns} \sum_{j=1}^{s}\sum_{k=1}^{n}x_{ijk}(i=1,2,\dots,r)

x=rsn1i=1rj=1sk=1nxijk,xi=ns1j=1sk=1nxijk(i=1,2,,r)

x

j

=

1

r

n

i

=

1

r

k

=

1

n

x

i

j

k

(

j

=

1

,

2

,

,

s

)

,

x

i

j

=

1

n

k

=

1

n

x

i

j

k

(

i

=

1

,

2

,

,

r

;

j

=

1

,

2

,

,

s

)

\overline x_{\bullet j \bullet}=\frac{1}{rn}\sum_{i=1}^{r}\sum_{k=1}^{n}x_{ijk}(j=1,2,\dots,s),\overline x_{ij\bullet}=\frac{1}{n}\sum_{k=1}^{n}x_{ijk}(i=1,2,\dots,r;j=1,2,\dots,s)

xj=rn1i=1rk=1nxijk(j=1,2,,s),xij=n1k=1nxijk(i=1,2,,r;j=1,2,,s)上述公式可以简记为

S

S

T

=

S

S

A

+

S

S

B

+

S

S

A

×

B

+

S

S

E

SS_{T}=SS_{A}+SS_{B}+SS_{A\times B}+SS_{E}

SST=SSA+SSB+SSA×B+SSE。在总体分布的正态等方差性条件满足时,有

S

S

T

S

2

χ

2

(

r

n

s

1

)

,

S

S

A

S

2

χ

2

(

r

1

)

,

S

S

B

S

2

χ

2

(

s

1

)

\frac{SS_{T}}{S^{2}}\sim\chi^{2}(rns-1), \frac{SS_{A}}{S^{2}}\sim\chi^{2}(r-1),\frac{SS_{B}}{S^{2}}\sim\chi^{2}(s-1)

S2SSTχ2(rns1),S2SSAχ2(r1),S2SSBχ2(s1)

S

S

A

×

B

S

2

χ

2

(

(

r

1

)

(

s

1

)

)

,

S

S

E

S

2

χ

2

(

r

s

n

r

s

)

\frac{SS_{A\times B}}{S^{2}}\sim\chi^{2}((r-1)(s-1)),\frac{SS_{E}}{S^{2}}\sim\chi^{2}(rsn-rs)

S2SSA×Bχ2((r1)(s1)),S2SSEχ2(rsnrs)  此时方差分析的主要任务是:分析因素

A

A

A和因素

B

B

B对因变量指标的影响大小,以及因素

A

A

A和因素

B

B

B的交互作用对因变量影响大小。这等价于以下三种统计假设。
(1)“因素A对因变量影响不显著”的原假设等价于:

H

01

:

α

1

=

α

2

=

=

α

r

=

0

H_{01}: \alpha_{1}=\alpha_{2}=\dots=\alpha_{r}=0

H01:α1=α2==αr=0此时其检验统计量为:

F

A

=

S

S

A

/

(

r

1

)

S

S

E

/

(

r

s

n

r

s

)

F

(

r

1

,

r

s

n

r

s

)

F_{A}=\frac{SS_{A}/(r-1)}{SS_{E}/(rsn-rs)}\sim F(r-1,rsn-rs)

FA=SSE/(rsnrs)SSA/(r1)F(r1,rsnrs)(2)“因素B对因变量影响不显著”的原假设等价于:

H

02

:

β

1

=

β

2

=

=

β

s

=

0

H_{02}: \beta_{1}=\beta_{2}=\dots=\beta_{s}=0

H02:β1=β2==βs=0此时其检验统计量为:

F

B

=

S

S

B

/

(

s

1

)

S

S

E

/

(

r

s

n

r

s

)

F

(

s

1

,

r

s

n

r

s

)

F_{B}=\frac{SS_{B}/(s-1)}{SS_{E}/(rsn-rs)}\sim F(s-1,rsn-rs)

FB=SSE/(rsnrs)SSB/(s1)F(s1,rsnrs)(3)“因素A和因素B交互作用对因变量影响不显著”的原假设等价于:

H

03

:

γ

i

j

=

0

(

i

=

1

,

2

,

,

r

;

j

=

1

,

2

,

,

s

)

H_{03}: \gamma_{ij}=0(i=1,2,\dots,r;j=1,2,\dots,s)

H03:γij=0(i=1,2,,r;j=1,2,,s)此时其检验统计量为:

F

A

×

B

=

S

S

A

×

B

/

(

r

s

r

s

+

1

)

S

S

E

/

(

r

s

n

r

s

)

F

(

r

s

r

s

+

1

,

r

s

n

r

s

)

F_{A\times B}=\frac{SS_{A\times B}/(rs-r-s+1)}{SS_{E}/(rsn-rs)}\sim F(rs-r-s+1,rsn-rs)

FA×B=SSE/(rsnrs)SSA×B/(rsrs+1)F(rsrs+1,rsnrs)

3.实验
import pandas as pd
import numpy as np
from scipy import stats

#1. 单因素方差分析
#背景:产品包装方式是否会对产品销量产生影响
data=pd.DataFrame(np.array([[152,208,182],
                           [188,256,198],
                           [238,300,268],
                           [192,280,220],
                           [180,270,200],
                           [115,210,128],
                           [125,185,110],
                           [100,165,105]]),columns=['A1','A2','A3'])

data_mean=data.sum().sum()/(data.shape[0]*data.shape[1])
SSA=(data.count()*(data.mean()-data_mean)**2).sum()
SSE=sum([((data[col]-data[col].mean())**2).sum() for col in data.columns])

SSA_degree=data.shape[1]-1
SSE_degree=data.count().sum()-data.shape[1]
F_stat=(SSA/SSA_degree)/(SSE/SSE_degree)
p_val=stats.f.sf(F_stat,SSA_degree,SSE_degree)
#p_val=0.02<0.05 拒绝原假设。则认为包装会对销量产生影响。

#2. 无交互作用的双因素方差分析
data_1=pd.DataFrame(np.array([[4152,6852,9852],
                              [4852,5112,8912],
                              [3546,5786,9978],
                              [5456,6105,9105],
                              [3426,3998,15918],
                              [6124,10124,16124],
                              [5846,9789,10100]]),columns=['A1','A2','A3'],
                             index=['B1','B2','B3','B4','B5','B6','B7'])

data_mean_1=data_1.sum().sum()/(data_1.shape[0]*data_1.shape[1])
SSA=data_1.shape[0]*sum((data_1.mean()-data_mean_1)**2)
SSA_degree=data_1.shape[1]-1
SSB=data_1.shape[1]*sum((data_1.mean(axis=1)-data_mean_1)**2)
SSB_degree=data_1.shape[0]-1
SSE=sum([(data_1.loc[idx,col]+data_mean_1-data_1.loc[idx,:].mean()-data_1.loc[:,col].mean())**2 
         for idx in data_1.index for col in data_1.columns])
SSE_degree=data_1.shape[0]*data_1.shape[1]-data_1.shape[1]-data_1.shape[0]+1

F_A_stat=(SSA/SSA_degree)/(SSE/SSE_degree)
p_A=stats.f.sf(F_A_stat,SSA_degree,SSE_degree)

F_B_stat=(SSB/SSB_degree)/(SSE/SSE_degree)
p_B=stats.f.sf(F_B_stat,SSB_degree,SSE_degree)

#3. 有交互作用的双因素方差分析
data_2=pd.DataFrame(np.array([[4152,4852,3546,5456,3426,6124,5846],
                              [3968,4568,5541,4879,3895,6123,5680],
                              [4944,4795,5687,4598,3678,6856,5982],
                              [4852,4132,4752,5123,4894,7102,6892],
                              [4454,5423,5124,6811,3987,8951,8123],
                              [5914,5684,6412,5132,4102,9102,8741],
                              [4745,3654,5612,5456,4243,9581,8210],
                              [5981,3986,5781,4925,4410,9451,8652],
                              [6852,5112,5786,6105,3998,10124,9789],
                              [7167,5418,8841,5912,4213,12563,11752],
                              [5144,5958,7682,5109,4318,10986,11012],
                              [4888,5702,5556,6200,5209,12107,13785],
                              [5784,6582,5879,6941,4125,13958,14843],
                              [6584,6511,6987,6100,4942,14129,12874],
                              [6475,6845,6555,7812,5109,13891,13290],
                              [7581,6124,7001,5261,5097,14121,14589],
                              [9852,8912,9978,9105,15918,16124,10100],
                              [10165,9741,11049,11591,15983,17569,10222],
                              [9142,9898,10054,9751,15719,14902,9055],
                              [9888,10095,9941,8912,15303,16139,11019],
                              [9912,11081,9875,8754,14789,13988,11980],
                              [10109,10055,9002,8288,14105,14373,11274],
                              [11075,11286,9915,10112,15666,14590,12290],
                              [12781,11029,9989,9123,16444,16879,11589]]),
                    columns=['B1','B2','B3','B4','B5','B6','B7'],
                    index=pd.MultiIndex.from_product([['A1','A2','A3'],
                                                      [1,2,3,4,5,6,7,8]]))
data_mean_2=data_2.sum().sum()/data_2.size

SSA=0
A_level=set(data_2.index.get_level_values(0))
for idx in A_level:
    tmp=data_2.loc[idx]
    tmp_mean=tmp.sum().sum()/tmp.size
    SSA+=(tmp.size*((tmp_mean-data_mean_2)**2))
SSA_degree=len(A_level)-1

SSB=data_2.shape[0]*((data_2.mean()-data_mean_2)**2).sum()
SSB_degree=data_2.shape[1]-1

SSAB=0
for idx in A_level:
    for col in data_2.columns:
        tmp_mean=data_2.loc[idx,col].mean()
        idx_mean=(data_2.loc[idx].sum().sum())/(data_2.loc[idx].size)
        col_mean=data_2[col].mean()
        SSAB+=data_2.loc[idx].shape[0]*(tmp_mean+data_mean_2-idx_mean-col_mean)**2
SSAB_degree=(len(A_level)-1)*(data_2.shape[1]-1)

SSE=0
for idx in A_level:
    for col in data_2.columns:
        tmp=data_2.loc[idx,col]
        SSE+=((tmp-tmp.mean())**2).sum()
SSE_degree=data_2.size-len(A_level)*data_2.shape[1]
        
F_A_stat=(SSA/SSA_degree)/(SSE/SSE_degree)
p_A=stats.f.sf(F_A_stat,SSA_degree,SSE_degree)
        
F_B_stat=(SSB/SSB_degree)/(SSE/SSE_degree)
p_B=stats.f.sf(F_B_stat,SSB_degree,SSE_degree)

F_AB_stat=(SSAB/SSAB_degree)/(SSE/SSE_degree)
p_AB=stats.f.sf(F_AB_stat,SSAB_degree,SSE_degree)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
参考资料
  1. https://zhuanlan.zhihu.com/p/49479042
  2. 《统计学》