双因素方差分析

对于两因素的方差分析,基本思想和方法与单因素的方差分析相似,前提条件仍然是要满足独立、正态、方差齐性。所不同的是在双因素方差分析中有时会出现交互作用,即二因素的不同水平交差搭配对指标产生影响。下面先讨论无交互作用的双因素方差分析。

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

例2:考虑三种不同形式的广告和五种不同的价格对某种商品销量的影响。选取某市15家大超市,每家超市选用其中的一个组合,统计出一个月的销量如下(设显著性水平为0.05):

在这里对商品销量的影响不仅有广告的影响,还有价格的影响,这就是双因素方差分析。

1.1. 无交叉双因素分析的数学模型

设A,B两个因素,因素A有r个水平A1,A2,...,ArA_1, A_2, ..., A_rA1​,A2​,...,Ar​; 因素B有s个水平B1,B2,...,BsB_1, B_2, ..., B_sB1​,B2​,...,Bs​. 对因素A,B的水平的每队组合(A,B)下进行一次独立实验得到观察值Xij,i=1,2,...r,j=1,2,...,s,X_{ij}, i=1,2,...r, j=1,2,...,s,Xij​,i=1,2,...r,j=1,2,...,s, 假定Xij∼N(μij,σ2)X _{ij} \sim N(\mu_{ij}, \sigma^2)Xij​∼N(μij​,σ2), 且各XijX_{ij}Xij​相互独立。则不考虑交互作用的双因素方差分析模型可表示为:
{Xij=μi+αi+εij,i=1,2,...,r,j=1,2,...,s,εij∼N(0,σ2),且各εij相互独立,∑i=1rαi=0,∑j=1sβj=0\begin{cases} X_{ij} = \mu_i + \alpha_i + \varepsilon_{ij}, i=1,2,...,r, j=1,2,...,s, \\ \varepsilon_{ij} \sim N(0, \sigma^2), 且各\varepsilon_{ij}相互独立, \\ \sum_{i=1}^r\alpha_i = 0, \quad \sum_{j=1}^s\beta_j=0 \end{cases} ⎩⎪⎨⎪⎧​Xij​=μi​+αi​+εij​,i=1,2,...,r,j=1,2,...,s,εij​∼N(0,σ2),且各εij​相互独立,∑i=1r​αi​=0,∑j=1s​βj​=0​
其中μ=1rs∑i=1r∑j=1sμij\mu = \frac{1}{rs}\sum_{i=1}^r\sum_{j=1}^s\mu_{ij}μ=rs1​∑i=1r​∑j=1s​μij​为总平均. αi\alpha_iαi​为因素A的第iii个水平的效应,βj\beta_jβj​为因素B的第jjj个水平的效应。

在给定显著性水平α\alphaα下,考虑如下假设检验:
H01:α1=α2=...=αr=0H_{01}:\alpha_1=\alpha_2=...=\alpha_r=0H01​:α1​=α2​=...=αr​=0 (因子A对指标的影响不显著)
H02:β1=β2=...=βs=0H_{02}:\beta_1=\beta_2=...=\beta_s=0H02​:β1​=β2​=...=βs​=0 (因子B对指标的影响不显著)

类似于单因素方差分析,先对总离差平方和SSTSS_TSST​分解为因素A的效应平方和SSASS_ASSA​,因素B的效应平方和SSBSS_BSSB​及误差平方和SSESS_ESSE​, 即
SST=SSA+SSB+SSESS_T = SS_A+SS_B+SS_ESST​=SSA​+SSB​+SSE​
可以证明:
1)当H01H_{01}H01​成立时,
SSAσ2∼χ2(r−1),SSEσ2∼χ2((r−1)(s−1)),\frac{SS_A}{\sigma^2} \sim \chi^2(r-1), \frac{SS_E}{\sigma^2}\sim \chi^2((r-1)(s-1)),σ2SSA​​∼χ2(r−1),σ2SSE​​∼χ2((r−1)(s−1)),
而且SSASS_ASSA​与SSESS_ESSE​独立,于是
FA=SSA/(r−1)SSE/[(r−1)(s−1)]∼F(r−1,(r−1)(s−1))F_A=\frac{SS_A/(r-1)}{SS_E/[(r-1)(s-1)]} \sim F(r-1, (r-1)(s-1))FA​=SSE​/[(r−1)(s−1)]SSA​/(r−1)​∼F(r−1,(r−1)(s−1))
2) 当H02H_{02}H02​成立时,
SSBσ2∼χ2(s−1)\frac{SS_B}{\sigma^2} \sim \chi^2(s-1)σ2SSB​​∼χ2(s−1)
而且SSBSS_BSSB​与SSESS_ESSE​独立,于是
FB=SSB/(s−1)SSE/[(r−1)(s−1)]∼F(s−1,(r−1)(s−1))F_B=\frac{SS_B/(s-1)}{SS_E/[(r-1)(s-1)]}\sim F(s-1, (r-1)(s-1))FB​=SSE​/[(r−1)(s−1)]SSB​/(s−1)​∼F(s−1,(r−1)(s−1))
所以,H01H_{01}H01​与H02H_{02}H02​的拒绝域分别为
CA={FA>F1−α(r−1,(r−1)(s−1))}C_A = \{F_A > F_{1-\alpha}(r-1,(r-1)(s-1))\}CA​={FA​>F1−α​(r−1,(r−1)(s−1))}
CB={FB>F1−α(s−1,(r−1)(s−1))}C_B = \{F_B > F_{1-\alpha}(s-1, (r-1)(s-1))\}CB​={FB​>F1−α​(s−1,(r−1)(s−1))}
咱们知道单因素方差分析的计算量已经够大了,双因素方差分析计算量那就更大了,所以也必须依赖于统计分析软件进行处理,下面的部分讨论Python如何完成相关计算的。

1.2. 双因素方差分析的实现

针对例2中广告和价格对商品销量的影响分析展开计算。
第一步:数据输入

# 导入相关库
import numpy as np
import pandas as pdd = np.array([[276, 352, 178, 295, 273],[114, 176, 102, 155, 128],[364, 547, 288, 392, 378]
])
df = pd.DataFrame(d)
df.index=pd.Index(['A1','A2','A3'],name='ad')
df.columns=pd.Index(['B1','B2','B3','B4','B5'], name='price')

此时在jupyter notebook下df输入结果如下:

第二步:数据处理
数据处理的目的就是产生符合模型输入的数据类型,有关pandas数据处理,参考相关文档。

df1 = df.stack().reset_index().rename(columns={0:'value'})
df1

在jupyter notebook下df1输出如下:

第三步:进行方差分析

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lmmodel = ols('value~C(ad) + C(price)', df1).fit()
anova_lm(model)

上述代码中ols的作用就是从一个公式和数据框创建一个模型。这里的公式语法就是由Patsy库提供支持的,C函数完成分类变量转换。
anova_lm就是为模型产生一个方差分析表。

在jupyer notebook下产生的输出如下:

第四步:结果分析和决策建议
对广告因素来说,因为其p=0.000013p=0.000013p=0.000013小于显著性水平α=0.05\alpha=0.05α=0.05,因此拒绝原假设,有理由相信广告对商品的销量是有影响的。
对价格因素来说,同样因为其p=0.005833p=0.005833p=0.005833小于显著性水平α=0.05\alpha=0.05α=0.05,因此也拒绝原假设,有理由相信对商品销量也是有影响的。

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

例3:火箭的射程与燃料的种类和推进器的型号有关,现对四种不同的燃料与三种不同型号的推进器进行试验,每种组合各发射火箭两次,测得火箭的射程结果如下(设显著性水平为0.01):

这里火箭的射程不仅受到燃料类型和推进器型号的影响,同时还受到二者交互作用。这就好比两个好朋友甲和乙,甲的酒量也就半斤,儿乙的酒量有八两,但是两个好朋友聚到一起,把酒言欢结果一下喝掉了2斤多酒,哈哈哈。

2.1. 数学模型

设有两个因素A和B, 因素A有r个水平A1,A2,...,ArA_1 ,A_2 , ... ,A_rA1​,A2​,...,Ar​ ; 因素B有s个水平B1,B2,...,BsB_1, B_2,...,B_sB1​,B2​,...,Bs​. 在许多情况下, 两因素A与B之间存在着一定程度的交互作用. 为了考察因素间的交互作用, 要求在两个因素的每一水平组合下进行重复试验. 设在每种水平组合 (Ai,Bj)(A_i, B_j)(Ai​,Bj​)下重复试验t次. 记第k次的观测值为XijkX_{ijk}Xijk​.则有交互作用的两因素方差分析模型可表示为
{Xij=μ+αi+βj+δij+εijk,i=1,2,...,r,j=1,2,...,s,k=1,2,...,tεijk∼N(0,σ2),且各εijk相互独立∑i=1rαi=0,∑j=1sβj=0,∑i=1sδij=∑j=1sδij=0\begin{cases} X_{ij} = \mu + \alpha_i + \beta_j + \delta_{ij} + \varepsilon_{ijk}, i=1,2,...,r, j=1,2,...,s, k=1,2,...,t \\ \varepsilon_{ijk} \sim N(0, \sigma^2), 且各\varepsilon_{ijk}相互独立 \\ \sum_{i=1}^r\alpha_i=0, \sum_{j=1}^s\beta_j=0, \sum_{i=1}^s\delta_{ij}=\sum_{j=1}^s\delta_{ij}=0 \end{cases} ⎩⎪⎨⎪⎧​Xij​=μ+αi​+βj​+δij​+εijk​,i=1,2,...,r,j=1,2,...,s,k=1,2,...,tεijk​∼N(0,σ2),且各εijk​相互独立∑i=1r​αi​=0,∑j=1s​βj​=0,∑i=1s​δij​=∑j=1s​δij​=0​
这里αi\alpha_iαi​为因素A的第iii个水平的效应, βj\beta_jβj​为因素B的第jjj个水平的效应, δij为Ai和Bj的交互效应,μ=1rs∑i=1r∑j=1sμij.\delta_{ij}为A_i和B_j的交互效应, \mu=\frac{1}{rs}\sum_{i=1}^r\sum_{j=1}^s\mu_{ij}.δij​为Ai​和Bj​的交互效应,μ=rs1​∑i=1r​∑j=1s​μij​.

检验的假设为:
H01:α1=α2=...=αr=0(因素A对指标没有影响)H02:β1=β2=...=βs=0(因素B对指标没有影响)H03:δ11=δ12=...=δrs=0(因素A和B没有联合作用)H_{01}: \alpha_1 = \alpha_2 =... = \alpha_r = 0 (因素A对指标没有影响)\\ H_{02}: \beta_1 = \beta_2 = ... = \beta_s = 0 (因素B对指标没有影响) \\ H_{03}: \delta_{11} = \delta_{12} = ... = \delta_{rs} = 0 (因素A和B没有联合作用) H01​:α1​=α2​=...=αr​=0(因素A对指标没有影响)H02​:β1​=β2​=...=βs​=0(因素B对指标没有影响)H03​:δ11​=δ12​=...=δrs​=0(因素A和B没有联合作用)
类似于无交互作用的方差分析, 总的离差平方和可分解为
SST=SSE+SSA+SSB+SSA×BSS_T = SS_E + SS_A + SS_B + SS_{A \times B}SST​=SSE​+SSA​+SSB​+SSA×B​

同时可以证明:
1)当H01H_{01}H01​成立时,
FA=SSA/(r−1)SSE/[rs(t−1)]∼F(r−1,rs(t−1))F_A=\frac{SS_A/(r-1)}{SS_E/[rs(t-1)]} \sim F(r-1, rs(t-1))FA​=SSE​/[rs(t−1)]SSA​/(r−1)​∼F(r−1,rs(t−1))
2) 当H02H_{02}H02​成立时,
FB=SSB/(s−1)SSE/[rs(t−1)]∼F(s−1,rs(t−1))F_B=\frac{SS_B/(s-1)}{SS_E/[rs(t-1)]} \sim F(s-1, rs(t-1))FB​=SSE​/[rs(t−1)]SSB​/(s−1)​∼F(s−1,rs(t−1))
3) 当H03H_{03}H03​成立时,
FA×B=SSA×B/[(r−1)(s−1)]SSE/[rs(t−1)]∼F((r−1)(s−1),rs(t−1))F_{A\times B}=\frac{SS_{A\times B}/[(r-1)(s-1)]}{SS_E/[rs(t-1)]} \sim F((r-1)(s-1), rs(t-1))FA×B​=SSE​/[rs(t−1)]SSA×B​/[(r−1)(s−1)]​∼F((r−1)(s−1),rs(t−1))

2. 2. 有交互作用的方差分析的实现

针对例3展开计算。
步骤一:输入数据

import numpy as np
import pandas as pd d = np.array([[58.2, 52.6, 56.2, 41.2, 65.3, 60.8],[49.1, 42.8, 54.1, 50.5, 51.6, 48.4],[60.1, 58.3, 70.9, 73.2, 39.2, 40.7],[75.8, 71.5, 58.2, 51.0, 48.7,41.4]
])
df = pd.DataFrame(d)
df.index=pd.Index(['A1','A2','A3','A4'],name='燃料')
df.columns=pd.Index(['B1','B1','B2','B2','B3','B3'],name='推进器')
df

在jupyter notebook下df输出如下:

第二步:数据处理

df1 = df.stack().reset_index().rename(columns={0:'射程'})
df1

在jupyter notebook下df1的输出如下:

第三步:数据分析

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lmmodel = ols('射程~C(燃料) + C(推进器)+C(燃料):C(推进器)', df1).fit()
anova_lm(model)

在jupyter notebook下输出的方差分析表如下:

第四步:结果分析和决策建议
对燃料因素来说,其p=0.025p=0.025p=0.025大于显著性水平α=0.01\alpha=0.01α=0.01. 所以其对射程没有影响;
对推进器因素来说,其p=0.003506p=0.003506p=0.003506小于显著水平α=0.01\alpha=0.01α=0.01, 所以其对射程影响显著。
对燃料和推进器的交互因素来说,其p=0.000062p=0.000062p=0.000062小于显著水平α=0.01\alpha=0.01α=0.01,所以其对射程影响显著。

3. 总结

通过单因素方差分析和双因素方差分析的讨论,回顾了统计分析中关于方差分析的理论知识,同时熟悉了Python中关于方差分析的相关库的使用,对实际数据分析的帮助作用还是比较大的。
欢迎有志于数据分析的人士一起讨论,交流。

十六、 方差分析--使用Python进行双因素方差分析相关推荐

  1. 【统计模型】ToothGrowth数据集双因素方差分析

    目录 ToothGrowth数据集双因素方差分析 一.研究目的 二.数据来源和相关说明 三.描述性分析 3.1 样本描述 3.2 样本均值 3.3 箱线图 四.数学建模 五.结论与建议 5.1 结论 ...

  2. Python玩转数据分析——双因素方差分析

    概念 方差分析(Analysis of Variance,简称ANOVA),又称"变异数分析"或"F检验",用于两个及两个以上样本均数差别的显著性检验.双因素方 ...

  3. python基于pingouin包进行统计分析:anova函数执行非平衡双因素方差分析(Two-Way ANOVA、设置effsize参数为n2)、以dataframe的形式输出分析结果

    python基于pingouin包进行统计分析:使用anova函数执行非平衡双因素方差分析(Two-Way  ANOVA.设置effsize参数为n2).以dataframe的形式输出分析结果(包含S ...

  4. 双因素方差分析_多因素方差分析

    总第173篇/张俊红 01.前言 在前面我们讲过简单的单因素方差分析,这一篇我们讲讲双因素方差分析以及多因素方差分析,双因素方差分析是最简单的多因素方差分析. 单因素分析就是只考虑一个因素会对要比较的 ...

  5. 【数据分析】双因素方差分析

    0.双因素方差分析的分类 无交互作用的方差分析 假定因素AAA和因素BBB的效应之间是相互独立的,不存在相互关系. 有交互作用的方差分析 假定因素AAA和因素BBB的结合会产生出一种新的效应. 无交互 ...

  6. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图、箱图显示主效应

    R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA).使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图(Main ef ...

  7. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、在双因素方差分析中,受试者被分配到由两个因素交叉分类形成的组(Two-way factorial ANOVA)

    R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA).在双因素方差分析中,受试者被分配到由两个因素交叉分类形成的组(Two-way factorial ANOVA) ...

  8. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用interaction.plot函数在双因素方差分析中可视化交互作用(Interaction)

    R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA).使用interaction.plot函数在双因素方差分析中显示(可视化)交互作用(Interaction) 目 ...

  9. R语言双因素方差分析

    R语言双因素方差分析 条件: 各个样本是相互独立的随机: 各个样本来自正态总体: 具有方差齐性: 用途: 检验两个或多样本均数间的差异有无统计学意义:注:本均数的比较可以采用 t检验或 F检验,两个以 ...

  10. 第13章重复测量和双因素方差分析

    第1章统计学入门 第2章频数分布略 第3章集中趋势的测量 第4章变异性 第5章分数的位置及标准化分布 第6章概率和正态分布 第7章概率和样本:样本均值的分布 第8章假设检验介绍 第9章t检验介绍 第1 ...

最新文章

  1. 美丽的公告:小(qing)编(wa)回来啦,带来了专属于AI程序猿的问候哦!
  2. 简单的小程序实现ATM机操作
  3. 牛客练习赛44 A 小y的序列 (模拟,细节)
  4. 10 个你可能还不知道 VS Code 使用技巧
  5. 2020牛客国庆集训派对day4 Digits Are Not Just Characters
  6. 产品经理应聘之感受漫谈
  7. GBDT、随机森林、xgboost算法原理解析视频公开
  8. php实现中间件6,THINKPHP6 实现中间件
  9. 新手必看:PS钢笔抠图教程
  10. Ubuntu1804_server 离线安装GCC_7.5
  11. 【matlab笔记】寻找极小值
  12. 基于sklearn的西瓜数据集的SVR回归实现
  13. Excel数据分析—柱状图
  14. 计算机如何共享电视,智能电视怎么与电脑共享文件观看视频?
  15. Office2010激活失败 错误码2503、2502解决方案
  16. Fast Deep Matting for Portrait Animation on Mobile Phone
  17. SGE(集群任务管理系统)常用操作命令
  18. CCF-CSP_201812(第15次)
  19. I have a dream
  20. 平安科技2019校招后端工程师一面

热门文章

  1. 全网最全诊断梳理《UDS/OBD诊断诊断描述文件CDD》总目录
  2. Tess4J 安装及使用介绍
  3. 将图片转换成url链接
  4. BPSK_QPSK_16QAM _64QAM _MATLAB
  5. LoadRunner脚本录制
  6. 加解密算法 之base64 原理
  7. ul阻燃标准有几个等级_UL阻燃标准
  8. C#编写CPU压力测试程序
  9. matlab仿真电子秤,基于51单片机电子秤的代码
  10. 前端开发工具Axure——Axure原型图查看