0.双因素方差分析的分类
- 无交互作用的方差分析
假定因素$A$和因素$B$的效应之间是相互独立的,不存在相互关系。 - 有交互作用的方差分析
假定因素$A$和因素$B$的结合会产生出一种新的效应。
无交互作用的双因素方差分析
1.形式
假定要考察两个因素$A,B$对某项指标的影响,因素$A$取$s$个水平$A_{1}, A_{2}, \dots, A_{s}$,因素$B$取$r$个水平$B_{1}, B_{2}, \dots, B_{r}$,在$A,B$的每队组合水平$\left(A_{i}, B_{j}\right)$上作一次试验,试验结果为$X_{i j}, i=1, \dots, s ;\space j=1, \dots, r$。所有$X_{ij}$独立,数据列于下表:
因素 | $B_1$ | $B_2$ | … | $B_s$ |
---|---|---|---|---|
$A_1$ | $X_{11}$ | $X_{12}$ | … | $X_{1s}$ |
$A_2$ | $X_{21}$ | $X_{22}$ | … | $X_{2s}$ |
… | … | … | … | … |
$A_r$ | $X_{r1}$ | $X_{r2}$ | … | $X_{rs}$ |
2.前期工作
- 作出假设
设搭配$\left(A_{i}, B_{j}\right)$下的试验结果为$X_{ij}$,假定$X_{i j} \sim N\left(a_{i j}, \sigma^{2}\right)$,则问题归结为检验假设:
$$
\begin{aligned}
&H_{0 A}: a_{1 j}=a_{2 j}=\cdots=a_{j j}, j=1,2, \cdots, s\
&H_{0 B}: a_{i 1}=a_{i 2}=\cdots=a_{i r}, i=1,2, \cdots, r
\end{aligned}
$$ - 平方和分解
与单因素方差分析类似地:
$S_A$是由因素$A$的不同效应和随机误差引起的偏差
$S_B$是由因素$B$的不同效应和随机误差引起的偏差
$S_e$是由随机误差引起的偏差
记:
$$
n=r s, \bar{X}{i}=\frac{1}{s} \sum{j=1}^{s} X_{i j}, \bar{X}{\cdot j}=\frac{1}{r} \sum{i=1}^{r} X_{i j}\
T_{i \cdot}=\sum_{j=1}^{s} X_{i j}, T_{\cdot j}=\sum_{i=1}^{r} X_{i j}\
\bar{X}=\frac{1}{r s} \sum_{i=1}^{r} \sum_{j=1}^{s} X_{i j}, T=\sum_{i=1}^{r} \sum_{j=1}^{s} X_{i j}\
i=1,2, \cdots, r ; j=1,2, \cdots, s
$$
于是:
$$
S_{T}=\sum_{i=1}^{r} \sum_{j=1}^{s} X_{i j}^{2}-\frac{T^{2}}{r s}, S_{A}=\frac{1}{s} \sum_{i=1}^{r} T_{i \cdot}^{2}-\frac{T^{2}}{r s}\
S_{B}=\frac{1}{r} \sum_{j=1}^{s} T_{\cdot j}^{2}-\frac{T^{2}}{r s},S_{e}=S_{T}-S_{A}-S_{B}
$$
3.检验假设
比较$S_A$与$S_E$的值来检验假设$H_{0A}$
比较$S_B$与$S_E$的值来检验假设$H_{0B}$
- 定理
$S_T,S_A,S_B$相互独立,且$\frac{1}{\sigma^{2}} S_{e} \sim \chi^{2}((s-1)(r-1))$
当$H_{0A}$成立时,有:
$$F_{A}=\frac{S_{A} / \sigma^{2}}{r-1} / \frac{S_{e} / \sigma^{2}}{(r-1)(s-1)}=\frac{(s-1) S_{A}}{S_{e}} \sim F(r-1,(r-1)(s-1))$$
当$H_{0B}$成立时,有:
$$F_{B}=\frac{S_{B} / \sigma^{2}}{s-1} / \frac{S_{e} / \sigma^{2}}{(r-1)(s-1)}=\frac{(r-1) S_{A}}{S_{e}} \sim F(s-1,(r-1)(s-1))$$ - 拒绝域
$H_{0A}$的拒绝域为:
$$F_{A} \geq F_{\alpha}(s-1,(s-1)(r-1))$$
$H_{0B}$的拒绝域为:
$$F_{B} \geq F_{\alpha}(r-1,(s-1)(r-1))$$ - 方差分析表
方差来源 平方和 自由度 $F$值 临界值 因素$A$ $S_A$ $r-1$ $F_{A}=\frac{(s-1) S_{A}}{S_{e}}$ $F_{A\alpha}$ 因素$B$ $S_B$ $s-1$ $F_{B}=\frac{(r-1) S_{B}}{S_{e}}$ $F_{B\alpha}$ 试验误差 $S_e$ $(r-1)(s-1)$ 总和 $S_T$ $n-1$
4.实现
- 例题
为了研究不同地点,不同季节大气飘尘含量的差异性,对地点$A$取三个不同水平,对季节$B$取四个不同水平,在不同组合(A_i,B_j)下各测一次大气飘尘含量,结果建下表,请问研究地点间的差异和季节间的差异对大气飘尘含量有无影响? $(\alpha=0.05)$
因素 | $B_1$ | $B_2$ | $B_3$ | $B_4$ |
---|---|---|---|---|
$A_1$ | 1.150 | 0.614 | 0.475 | 0.667 |
$A_2$ | 1.200 | 0.620 | 0.420 | 0.880 |
$A_3$ | 0.940 | 0.379 | 0.200 | 0.540 |
- Excel求解
录入数据:
在方差分析选项中选择“无重复双因素方差分析”,选中分析区域,$\alpha$设为0.05,单击“确定”:
可在新工作表中看到结果:
-
MATLAB求解
function annova_solve()
x = [1.150, 0.614, 0.475, 0.667;
1.200, 0.620, 0.420, 0.880;
0.940, 0.379, 0.200, 0.540];
p = anova2(x);
end
运行结果:
- Python求解
import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
df = pd.read_csv('D:\Data\ex_2way_annova.csv')
print(df)
model = ols('content ~ season + location', data = df).fit()
table = anova_lm(model)
print(table)
运行结果:
- 结论
$F_{A}=23.848>F_{A \alpha}=10.92, F_{B}=88.848>F_{B \alpha}=9.78$,拒绝$H_{0A},H_{0B}$,认为两个因素都有影响。
有交互作用的双因素方差分析
1.形式
假定要考察两个因素$A,B$对某项指标的影响,因素$A$取$s$个水平$A_{1}, A_{2}, \dots, A_{s}$,因素$B$取$r$个水平$B_{1}, B_{2}, \dots, B_{r}$,在$A,B$的每队组合水平$\left(A_{i}, B_{j}\right)$上尸检结果独立地服从$N\left(\mu_{i j}, \sigma^{2}\right)$分布,如下表:
因素 | $B_1$ | $B_2$ | … | $B_s$ |
---|---|---|---|---|
$A_1$ | $X_{111},…,X_{11t}$ | $X_{121},…,X_{12t}$ | … | $X_{1s1},…,X_{1st}$ |
$A_2$ | $X_{211},…,X_{21t}$ | $X_{221},…,X_{22t}$ | … | $X_{2s1},…,X_{2st}$ |
… | … | … | … | … |
$A_r$ | $X_{r11},…,X_{r1t}$ | $X_{r21},…,X_{r2t}$ | … | $X_{rs1},…,X_{rst}$ |
2.参数
为了方便研究,令:
$$\begin{aligned}
&\mu=\frac{1}{r s} \sum_{i=1}^{r} \sum_{j=1}^{s} \mu_{i j}\
&\mu_{i .}=\frac{1}{s} \sum_{j=1}^{s} \mu_{i j} \quad \alpha_{i}=\mu_{i .}-\mu \quad i=1,2, \ldots, r\
&\mu_{. j}=\frac{1}{r} \sum_{i=1}^{r} \mu_{i j} \quad \beta_{j}=\mu_{. j}-\mu \quad j=1,2, \ldots, s
\end{aligned}$$
称$\mu$为一般平均值,$\alpha_{i}$为因素$A$的第$i$个水平的效应,有如下关系式:
$$\sum_{i=1}^{r} \alpha_{i}=0 \quad \sum_{j=1}^{s} \beta_{j}=0$$
若$\mu_{i j} \neq \mu+\alpha_{i}+\beta_{j}$,则称$\gamma_{i j}=\mu_{i j}-\mu-\alpha_{i}-\beta_{j}$为因素$A$的第$i$个水平与因素$B$的第$j$个水平的交互效应,它们满足关系式:
$$\begin{aligned}
&\sum_{i=1}^{r} \gamma_{i j}=0, \quad j=1,2, \ldots, s\
&\sum_{j=1}^{s} \gamma_{i j}=0, \quad i=1,2, \ldots, r
\end{aligned}$$
3.模型与假设
- 有交互的双因素方差分析模型
$$\begin{aligned}
&X_{i j k}=\mu+\alpha_{i}+\beta_{j}+\gamma_{i j}+\varepsilon_{i j k}\
&\sum_{i=1}^{r} \alpha_{i}=0, \quad \sum_{j=1}^{s} \beta_{j}=0\
&\sum_{i=1}^{r} \gamma_{i j}=0, \quad \sum_{j=1}^{s} \gamma_{i j}=0\
&\varepsilon_{i j k} \sim N\left(0, \sigma^{2}\right),且相互独立
\end{aligned}\
i=1,2, \ldots, r ; \quad j=1,2, \ldots, s ; \quad k=1,2, \ldots, t
$$ - 需要检验的假设
$$\begin{aligned}
&H_{01}: \alpha_{1}=\alpha_{2}=\ldots=\alpha_{r}=0\
&H_{02}: \beta_{1}=\beta_{2}=\ldots=\beta_{s}=0\
&H_{03}: \gamma_{\bar{y}}=0, \quad \forall i, j
\end{aligned}$$
4.平方和分解
- 记号引入
$$X=\frac{1}{rst} \sum_{i=1}^{r} \sum_{j=1}^{s} \sum_{k=1}^{t} X_{i j k}\
\begin{aligned}
&X_{ij\cdot} =\sum_{k=1}^{t} X_{i j k}, \quad \bar{X}{i j\cdot} =\frac{1}{t} X{i j\cdot} , \quad i=1,2, \ldots, r ; \quad j=1,2, \ldots, s\
&X_{i\cdot\cdot} =\sum_{j=1}^{s} \sum_{k=1}^{t} X_{i j k}, \quad \bar{X}{i \cdot \cdot}=\frac{1}{s t} X{i\cdot\cdot}, \quad i=1,2, \ldots, r\
&X_{\cdot j\cdot}=\sum_{j=1}^{r} \sum_{k=1}^{t} X_{i j k}, \quad \bar{X}{\cdot j\cdot}=\frac{1}{r t} X{i\cdot\cdot}, \quad j=1,2, \ldots, s
\end{aligned}$$
由此可得:
$$\begin{aligned}
&\bar{X}=\mu+\bar{s}\
&\bar{X}{i j\cdot}=\mu+\alpha{i}+\beta_{j}+\gamma_{i j}+\bar{\varepsilon}{i j\cdot}\
&\bar{X}{i\cdot\cdot}=\mu+\alpha_{j}+\bar{\varepsilon}{i\cdot\cdot}\
&\bar{X}{\cdot j \cdot}=\mu+\beta_{j}+\bar{\varepsilon}_{\cdot j\cdot}
\end{aligned}$$ - 平方和分解
$$\begin{aligned}
&S_{T}=\sum_{i=1}^{r} \sum_{j=1}^{s} \sum_{k=1}^{t}\left(X_{i j k}-\bar{X}\right)^{2}\
&=S_{E}+S_{A}+S_{B}+S_{A \times B}
\end{aligned}$$ - 误差平方和
试验的随机波动引起的误差。
$$S_{E}=\sum_{i=1}^{r} \sum_{j=1}^{s} \sum_{k=1}^{t}\left(X_{i j k}-\bar{X}_{i j\cdot} \right)^{2}$$ - 因子$A$的偏差平方和
除了反映了试验的随机波动引起的误差外,还反映了因子A的效应间的差异。
$$S_{A}=\sum_{i=1}^{r} s t\left(\bar{X}_{i\cdot\cdot}-\bar{X}\right)^{2}$$ - 因子$B$的偏差平方和
除了反映了试验的随机波动引起的误差外,还反映了因子B的效应间的差异。
$$S_{B}=\sum_{j=1}^{s} r t\left(\bar{X}_{\cdot j\cdot}-\bar{X}\right)^{2}$$ - 交互作用的偏差平方和
除了反映了试验的随机波动引起的误差外,还反映了交互效应的差异所引起的波动。
$$S_{A \times B}=\sum_{i=1}^{r} \sum_{j=1}^{s} t\left(\bar{X}{i j\cdot}-\bar{X}{i \cdot \cdot}-\bar{X}_{\cdot j \cdot}+\bar{X}\right)^{2}$$ - 计算公式
$$\begin{aligned}
&S_{T}=\sum_{i=1}^{r} \sum_{j=1}^{s} \sum_{k=1}^{t} X_{i j k}^{2}-n \bar{X}^{2} \quad f_{T}=r s t-1\
&S_{A}=\frac{1}{s t} \sum_{i=1}^{r} X_{i . .}^{2}-n \bar{X}^{2} \quad \quad f_{A}=r-1\
&S_{B}=\frac{1}{r t} \sum_{i=1}^{r} X_{. j .}^{2}-n \bar{X}^{2} \quad f_{B}=s-1\
&S_{A \times B}=\frac{1}{t} \sum_{i=1}^{r} \sum_{j=1}^{s} X_{i j .}^{2}-n \bar{X}^{2}-S_{A}-S_{B} \quad f_{A \times B}=(r-1)(s-1)\
&S_{E}=S_{T}-S_{A}-S_{B}-S_{A X B} \quad f_{E}=r s(t-1)
\end{aligned}$$
5.假设检验
- 检验统计量
当$H_{01}$为真时:
$$F_{A}=\frac{S_{A} /(r-1)}{S_{E} / r s(t-1)} \sim F(r-1, r s(t-1))$$
当$H_{02}$为真时:
$$F_{B}=\frac{S_{B} /(s-1)}{S_{E} / r s(t-1)} \sim F(s-1, r s(t-1))$$
当$H_{03}$为真时:
$$F_{A \times B}=\frac{S_{A \times B} /(r-1)(s-1)}{S_{E} / r s(t-1)}
\sim F((r-1)(s-1), r s(t-1))$$ - 假设的拒绝
对给定的显著性水平$\alpha$:
当$F_A>F_{1-\alpha}(r-1,rs(t-1))$时拒绝$H_{01}$
当$F_B>F_{1-\alpha}(s-1,rs(t-1))$时拒绝$H_{02}$
当$F_{A\times B}>F_{1-\alpha}((r-1)(s-1),rs(t-1))$时拒绝$H_{03}$ - 方差分析表
来源 | 平方和 | 自由度 | 均方和 | $F$值 | 显著性 |
---|---|---|---|---|---|
因子$A$ | $S_A$ | $r-1$ | $S_A/(r-1)$ | $F_A$ | |
因子$B$ | $S_B$ | $s-1$ | $S_B/(s-1)$ | $F_B$ | |
$A\times B$ | $S_{A\times B}$ | $(r-1)(s-1)$ | $\frac{S_{A\times B}}{(r-1)(s-1)}$ | $F_{A \times B}$ | |
误差 | $S_E$ | $rs(t-1)$ | $S_E/rs(t-1)$ | ||
总和 | $S_T$ | $rst-1$ |
一般,当$F>F_{0.99}$时,称因子的影响高度显著,记为“**”;当$F_{0.99}>F≥F_{0.95}$时,称因子的影响显著,记为“*”;当$F<F_{0.95}$时, 称因子无显著影响,即认为因子各水平间无差异。
6.实现
- 例题
在某化工生产中为了提高收率,选了三种不同浓度$A$,四种不同温度$B$做试验。在同一浓度与同一温度组合下各做二次试验,其收率数据如下而计算表所列(数据均已减去75)。试检验不同浓度,不同温度以及它们间的交互作用对收率有无显著影响。
因素 | $B_1$ | $B_2$ | $B_3$ | $B_4$ | $X_{i\cdot \cdot}$ | $X^2_{i\cdot \cdot}$ |
---|---|---|---|---|---|---|
$A_1$ | 14,10 | 11,11 | 13,9 | 10,12 | 90 | 8100 |
$A_2$ | 9,7 | 10,8 | 7,11 | 6,10 | 68 | 4624 |
$A_3$ | 5,11 | 13,14 | 12,13 | 14,10 | 92 | 8464 |
$X_{\cdot j\cdot}$ | 56 | 67 | 65 | 62 | 250 | 21188 |
$X^2_{\cdot j\cdot}$ | 3136 | 4489 | 4225 | 3844 | 15694 |
- C++求解
#include<bits/stdc++.h>
using namespace std;
int main()
{
int r = 3, s = 4, t = 2;
double x[10][10][10]= {
{{14,10},{11,11},{13, 9},{10,12}}, //data
{{ 9, 7},{10, 8},{ 7,11},{ 6,10}},
{{ 5,11},{13,14},{12,13},{14,10}}
};
double n_sq_x_bar = 0;
double sq_x = 0;
double x_ijdot = 0;
double tmp = 0, tmp1 = 0, tmp2 = 0;
double x_dot_j_dot[10];
memset(x_dot_j_dot, 0, sizeof(x_dot_j_dot));
double x_i_dot_dot[10];
memset(x_i_dot_dot, 0, sizeof(x_i_dot_dot));
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < s; ++j)
{
for(int k = 0; k < t; ++k)
{
x_dot_j_dot[j] += x[i][j][k];
x_i_dot_dot[i] += x[i][j][k];
tmp += x[i][j][k];
n_sq_x_bar += x[i][j][k];
sq_x += x[i][j][k] * x[i][j][k];
}
x_ijdot += tmp * tmp;
tmp = 0;
}
}
double sum_x_dot_j_dot = 0;
for(int i = 0; i < s; ++i)
{
sum_x_dot_j_dot += x_dot_j_dot[i] * x_dot_j_dot[i];
}
double sum_x_i_dot_dot = 0;
for(int i = 0; i < r; ++i)
{
sum_x_i_dot_dot += x_i_dot_dot[i] * x_i_dot_dot[i];
}
// cout << sum_x_dot_j_dot << " " << sum_x_i_dot_dot << endl;
n_sq_x_bar /= 24;
n_sq_x_bar *= n_sq_x_bar;
n_sq_x_bar *= 24;
// cout << n_sq_x_bar << " " << sq_x << " " << x_ijdot << endl;
double S_T = sq_x - n_sq_x_bar;
double S_A = sum_x_i_dot_dot / (s * t) - n_sq_x_bar;
double S_B = sum_x_dot_j_dot / (r * t) - n_sq_x_bar;
double S_AB = (1.0 / t) * x_ijdot - n_sq_x_bar - S_A - S_B;
double S_E = S_T - S_A - S_B - S_AB;
// cout << S_T << " " << S_A << " " << S_B << " " << S_AB << endl;
double F_A = (S_A / (r - 1)) / (S_E / (r * s * (t - 1)));
double F_B = (S_B / (s - 1)) / (S_E / (r * s * (t - 1)));
double F_AB = (S_AB / ((r - 1) * (s - 1))) / (S_E / (r * s * (t - 1)));
// cout << "F_A = " << F_A << "\nF_B = " << F_B << "\nF_AB = " << F_AB << endl;
cout << "source\tdf\tSS\tMS\t\F" << endl;
cout << "A\t" << r - 1 << "\t" << S_A << "\t" << S_A/(r - 1) << "\t" << F_A << endl;
cout << "B\t" << s - 1 << "\t" << S_B << "\t" << S_B/(s - 1) << "\t" << F_B << endl;
cout << "AXB\t" << (r - 1) * (s - 1) << "\t" << S_AB << "\t" << S_AB / ((r - 1) * (s - 1)) << "\t" << F_AB << endl;
cout << "error\t" << r * s * (t - 1) << "\t" << S_E << "\t" << S_E/(r * s * (t - 1)) << endl;
cout << "total\t" << r * s * t - 1 << "\t" << S_T << endl;
return 0;
}
运行结果:
- MATLAB求解
function annova_solve()
x = [14, 11, 13, 10;
10, 11, 9, 12;
9, 10, 7, 6;
7, 8, 11, 10;
5, 13, 12, 14;
11, 14, 13, 10];
p = anova2(x,2);
end
运行结果:
- Excel求解
录入数据如下:
在“数据分析”中选择“可重复双因素分析”,选择区域,单击“确定”:
结果如下:
- 结论
查表可知,$F_{0.05}<F_{A}<F_{0.01}$,$F_{B},F_{A\times B}<F_{0.05}$。故认为浓度影响较为显著,温度与交互作用影响不显著。