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

article/2025/6/17 0:57:37

双因素方差分析

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

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

例2:考虑三种不同形式的广告和五种不同的价格对某种商品销量的影响。选取某市15家大超市,每家超市选用其中的一个组合,统计出一个月的销量如下(设显著性水平为0.05):
在这里插入图片描述
在这里对商品销量的影响不仅有广告的影响,还有价格的影响,这就是双因素方差分析。

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

设A,B两个因素,因素A有r个水平 A 1 , A 2 , . . . , A r A_1, A_2, ..., A_r A1,A2,...,Ar; 因素B有s个水平 B 1 , B 2 , . . . , B s B_1, B_2, ..., B_s B1,B2,...,Bs. 对因素A,B的水平的每队组合(A,B)下进行一次独立实验得到观察值 X i j , 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, 假定 X i j ∼ N ( μ i j , σ 2 ) X _{ij} \sim N(\mu_{ij}, \sigma^2) XijN(μij,σ2), 且各 X i j X_{ij} Xij相互独立。则不考虑交互作用的双因素方差分析模型可表示为:
{ X i j = μ i + α i + ε i j , i = 1 , 2 , . . . , r , j = 1 , 2 , . . . , s , ε i j ∼ N ( 0 , σ 2 ) , 且 各 ε i j 相 互 独 立 , ∑ i = 1 r α i = 0 , ∑ j = 1 s β 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,εijN(0,σ2),εiji=1rαi=0,j=1sβj=0
其中 μ = 1 r s ∑ i = 1 r ∑ j = 1 s μ i j \mu = \frac{1}{rs}\sum_{i=1}^r\sum_{j=1}^s\mu_{ij} μ=rs1i=1rj=1sμij为总平均. α i \alpha_i αi为因素A的第 i i i个水平的效应, β j \beta_j βj为因素B的第 j j j个水平的效应。

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

类似于单因素方差分析,先对总离差平方和 S S T SS_T SST分解为因素A的效应平方和 S S A SS_A SSA,因素B的效应平方和 S S B SS_B SSB及误差平方和 S S E SS_E SSE, 即
S S T = S S A + S S B + S S E SS_T = SS_A+SS_B+SS_E SST=SSA+SSB+SSE
可以证明:
1)当 H 01 H_{01} H01成立时,
S S A σ 2 ∼ χ 2 ( r − 1 ) , S S E σ 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(r1),σ2SSEχ2((r1)(s1)),
而且 S S A SS_A SSA S S E SS_E SSE独立,于是
F A = S S A / ( r − 1 ) S S E / [ ( 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/[(r1)(s1)]SSA/(r1)F(r1,(r1)(s1))
2) 当 H 02 H_{02} H02成立时,
S S B σ 2 ∼ χ 2 ( s − 1 ) \frac{SS_B}{\sigma^2} \sim \chi^2(s-1) σ2SSBχ2(s1)
而且 S S B SS_B SSB S S E SS_E SSE独立,于是
F B = S S B / ( s − 1 ) S S E / [ ( 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/[(r1)(s1)]SSB/(s1)F(s1,(r1)(s1))
所以, H 01 H_{01} H01 H 02 H_{02} H02的拒绝域分别为
C A = { F A > F 1 − α ( r − 1 , ( r − 1 ) ( s − 1 ) ) } C_A = \{F_A > F_{1-\alpha}(r-1,(r-1)(s-1))\} CA={FA>F1α(r1,(r1)(s1))}
C B = { F B > F 1 − α ( s − 1 , ( r − 1 ) ( s − 1 ) ) } C_B = \{F_B > F_{1-\alpha}(s-1, (r-1)(s-1))\} CB={FB>F1α(s1,(r1)(s1))}
咱们知道单因素方差分析的计算量已经够大了,双因素方差分析计算量那就更大了,所以也必须依赖于统计分析软件进行处理,下面的部分讨论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.000013 p=0.000013 p=0.000013小于显著性水平 α = 0.05 \alpha=0.05 α=0.05,因此拒绝原假设,有理由相信广告对商品的销量是有影响的。
对价格因素来说,同样因为其 p = 0.005833 p=0.005833 p=0.005833小于显著性水平 α = 0.05 \alpha=0.05 α=0.05,因此也拒绝原假设,有理由相信对商品销量也是有影响的。

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

例3:火箭的射程与燃料的种类和推进器的型号有关,现对四种不同的燃料与三种不同型号的推进器进行试验,每种组合各发射火箭两次,测得火箭的射程结果如下(设显著性水平为0.01):
在这里插入图片描述
这里火箭的射程不仅受到燃料类型和推进器型号的影响,同时还受到二者交互作用。这就好比两个好朋友甲和乙,甲的酒量也就半斤,儿乙的酒量有八两,但是两个好朋友聚到一起,把酒言欢结果一下喝掉了2斤多酒,哈哈哈。

2.1. 数学模型

设有两个因素A和B, 因素A有r个水平 A 1 , A 2 , . . . , A r A_1 ,A_2 , ... ,A_r A1,A2,...,Ar ; 因素B有s个水平 B 1 , B 2 , . . . , B s B_1, B_2,...,B_s B1,B2,...,Bs. 在许多情况下, 两因素A与B之间存在着一定程度的交互作用. 为了考察因素间的交互作用, 要求在两个因素的每一水平组合下进行重复试验. 设在每种水平组合 ( A i , B j ) (A_i, B_j) (Ai,Bj)下重复试验t次. 记第k次的观测值为 X i j k X_{ijk} Xijk.则有交互作用的两因素方差分析模型可表示为
{ X i j = μ + α i + β j + δ i j + ε i j k , i = 1 , 2 , . . . , r , j = 1 , 2 , . . . , s , k = 1 , 2 , . . . , t ε i j k ∼ N ( 0 , σ 2 ) , 且 各 ε i j k 相 互 独 立 ∑ i = 1 r α i = 0 , ∑ j = 1 s β j = 0 , ∑ i = 1 s δ i j = ∑ j = 1 s δ i j = 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εijkN(0,σ2),εijki=1rαi=0,j=1sβj=0,i=1sδij=j=1sδij=0
这里 α i \alpha_i αi为因素A的第 i i i个水平的效应, β j \beta_j βj为因素B的第 j j j个水平的效应, δ i j 为 A i 和 B j 的 交 互 效 应 , μ = 1 r s ∑ i = 1 r ∑ j = 1 s μ i j . \delta_{ij}为A_i和B_j的交互效应, \mu=\frac{1}{rs}\sum_{i=1}^r\sum_{j=1}^s\mu_{ij}. δijAiBjμ=rs1i=1rj=1sμij.

检验的假设为:
H 01 : α 1 = α 2 = . . . = α r = 0 ( 因 素 A 对 指 标 没 有 影 响 ) H 02 : β 1 = β 2 = . . . = β s = 0 ( 因 素 B 对 指 标 没 有 影 响 ) H 03 : δ 11 = δ 12 = . . . = δ r s = 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=0AH02:β1=β2=...=βs=0BH03:δ11=δ12=...=δrs=0AB
类似于无交互作用的方差分析, 总的离差平方和可分解为
S S T = S S E + S S A + S S B + S S A × B SS_T = SS_E + SS_A + SS_B + SS_{A \times B} SST=SSE+SSA+SSB+SSA×B

同时可以证明:
1)当 H 01 H_{01} H01成立时,
F A = S S A / ( r − 1 ) S S E / [ r s ( t − 1 ) ] ∼ F ( r − 1 , r s ( t − 1 ) ) F_A=\frac{SS_A/(r-1)}{SS_E/[rs(t-1)]} \sim F(r-1, rs(t-1)) FA=SSE/[rs(t1)]SSA/(r1)F(r1,rs(t1))
2) 当 H 02 H_{02} H02成立时,
F B = S S B / ( s − 1 ) S S E / [ r s ( t − 1 ) ] ∼ F ( s − 1 , r s ( t − 1 ) ) F_B=\frac{SS_B/(s-1)}{SS_E/[rs(t-1)]} \sim F(s-1, rs(t-1)) FB=SSE/[rs(t1)]SSB/(s1)F(s1,rs(t1))
3) 当 H 03 H_{03} H03成立时,
F A × B = S S A × B / [ ( r − 1 ) ( s − 1 ) ] S S E / [ r s ( t − 1 ) ] ∼ F ( ( r − 1 ) ( s − 1 ) , r s ( 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(t1)]SSA×B/[(r1)(s1)]F((r1)(s1),rs(t1))

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.025 p=0.025 p=0.025大于显著性水平 α = 0.01 \alpha=0.01 α=0.01. 所以其对射程没有影响;
对推进器因素来说,其 p = 0.003506 p=0.003506 p=0.003506小于显著水平 α = 0.01 \alpha=0.01 α=0.01, 所以其对射程影响显著。
对燃料和推进器的交互因素来说,其 p = 0.000062 p=0.000062 p=0.000062小于显著水平 α = 0.01 \alpha=0.01 α=0.01,所以其对射程影响显著。

3. 总结

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


http://chatgpt.dhexx.cn/article/D8nk2GC4.shtml

相关文章

单因素试验固定效应模型方差分析

单因素试验固定效应模型方差分析 观测值的线性模型平方和与自由度分解例题与SPSS求解非平衡单因素试验SPSS求解 一、观测值的线性模型 单因素试验线性可加模型为: Yij为第i个处理的第j个观测值;U为所有观测值的平均值;Ti为第i个处理效应&am…

spss方差分析_SPSS统计案例:考虑交互作用的双因素方差分析

某工厂使用3种机型的机器生产同一款产品,现在老板想考察不同机型以及不同操作工人对产品的影响,为此他简单设计了一个小实验,让甲、乙、丙、丁四个工人操作机器Ⅰ、Ⅱ、Ⅲ各三天,其产品产量如下表所示,试分析工人和机器对产品产量是否有显著影响? 简单分析一下,机器有3个…

R语言——双因素方差分析

双因素方差分析&#xff0c;顾名思义&#xff0c;讨论有两种影响因素的样本的方差分析。 一、不考虑交互作用 1.代码示例 agriculture<-data.frame( Yc(325, 292, 316, 317, 310, 318, 310, 320, 318, 330, 370, 365), Agl(4,3), Bgl(3,1,12)); agriculture.aov <- ao…

双因素方差分析(R)

目录 原理 双因素等重复试验的方差分析 假设前提和模型设定 离差平方和分解 检验统计量和拒绝域 例题 应用 双因素无重复试验的方差分析 假设前提和模型设定 离差平方和分解 检验统计量和拒绝域 例题 应用 原理 在单因素方差分析的基础上&#xff0c;双因素方差分…

应用统计学方差分析之单因素方差分析原理解析(含Python代码)

基本概念&#xff1a; 在试验中&#xff0c;把考察的指标称为试验指标&#xff0c;影响试验指标的条件称为因素。因素可分为两类,-类是人为可控的测量数据&#xff0c;比如温度、身高等;一类是不可控的随机因素&#xff0c;例如&#xff0c;测量误差&#xff0c;气象条件等。因…

统计学——单因素方差分析

概念 方差分析&#xff1a;又称变异分析&#xff0c;是英国统计学家R.A.Fisher于1923年提出的一种统计方法&#xff0c;故有时也称为F检验。 可简写为ANOVA。用于多组均数 之间的显著性检验。 要求&#xff1a;各组观察值服从正态分布或近似正态分布&#xff0c;并且各组之间的…

单因素方差分析的计算步骤

假定实验或观察中只有一个因素&#xff08;因子&#xff09;A&#xff08;比如说试剂浓度&#xff09;&#xff0c;有m个水平。各在每一种水平下&#xff0c;做n次实验。 X i j X_{ij} Xij​表示第j个水平下的第i次实验。 实验次数A1水平A2水平…Am水平1 X 11 X_{11} X11​ X …

数据分析 第七篇:方差分析(单因素方差分析)

在试验中&#xff0c;把考察的指标称为试验指标&#xff0c;影响试验指标的条件称为因素。因素可分为两类&#xff0c;一类是人为可控的测量数据&#xff0c;比如温度、身高等&#xff1b;一类是不可控的随机因素&#xff0c;例如&#xff0c;测量误差&#xff0c;气象条件等。…

统计学 —— 单因素方差分析的应用与Excel实现

单因素方差分析的应用 前言概念:使用要求&#xff1a;基本思想&#xff1a;计算原理&#xff1a;分析步骤&#xff1a; 例题 前言 无论是什么活动&#xff0c;影响产品质量和产品的因素都有多种&#xff0c;如影响农作物产量的因素有品种、天气、施肥量、肥料的种类等等。如果…

R语言:方差分析之单因素方差分析和双因素方差分析

方差分析 方差分析(Analysis of Variance&#xff0c;ANOVA&#xff09;&#xff0c;是利用样本数据检验两个或两个以上的总体均值之间是否有差异的一种方法;&#xff08;缘起多个处理问题-即多个因变量&#xff09; 即若所有自变量对应的因变量的均值相等&#xff0c;则意味着…

方差分析(1) ——单因素方差分析及Excel示例

文章目录 什么是方差分析建立假设选择检验统计量偏差平方和 F F F检验统计量 给出拒绝域并做出判断 使用Excel进行方差分析添加数据分析工具使用分析工具库 结果说明 什么是方差分析 Wikipedia: Analysis of variance (ANOVA) is a collection of statistical models used to a…

单因素方差分析模型

例题&#xff1a; 试分析温度对着色度的影响。 1.正态性检验&#xff08;ks检验&#xff09; a[0.981,0.964,0.917,0.6690.607,0.693,0.506,0.3580.791,0.642,0.810,0.7050.901,0.703,0.792,0.883]; b[1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4]; areshape(a,numel(a),1); for i1:4aia…

方差分析-单因素方差分析示例 (Between Subjects)

目录 1、从一个例子出发 2、建立零假设 3、什么是MSE和MSB 4、样本大小 5、计算MSE 6、计算MSB 7、比较MSE和MSB 8、分析差异的来源 本文将从一个例子&#xff08;“微笑宽容实验”&#xff09;出发&#xff0c;详细介绍单因素方差分析的原理。 1、从一个例子出发 有…

单因素方差分析

理论依据 【基本思想】 方差分析是检验两个或两个以上的样本均值之间的差异是否具有统计学意义的一种方法&#xff0c;目的是推断两个或两个以上的总体均值是否相同。它所研究的是分类型自变量对数值型因变量的影响。当只涉及一个分类型自变量时&#xff0c;该分析称为单因素方…

干货。单因素方差分析步骤梳理

方差分析是20世纪20年代发展起来的一种统计方法&#xff0c;它是由英国统计学家费希尔在进行试验设计时为解释试验数据而首先引入的。&#xff08;来源&#xff1a;统计学 第7版&#xff09;目前&#xff0c;方差分析广泛应用于生物学、田间试验等。从形式上看&#xff0c;方差…

R语言单因素分析案例

1单因素方差分析实例1&#xff1a;在R中&#xff0c; aov() 函数提供了方差分析表的计算&#xff1a; 进行方差分析的步骤&#xff1a; a.用数据框的格式输入数据&#xff1a;如&#xff1a;lamp<-data.frame(Xc() &#xff0c; Afactor() ) b.调用aov() 函数计算方差分析…

在线UTF-8转换成GBK工具

https://www.dedemao.com/convert/# 注&#xff1a; 如果转换完成&#xff0c;但点击下载时没有反应 &#xff08;1&#xff09;按F12&#xff0c;出现调试器&#xff0c;切换到Element &#xff08;2&#xff09;选中左边的箭头&#xff0c;将鼠标移动到点击下载的按钮上 &a…

java utf-8 gbk_Java 字符转码之UTF-8转为GBK/GB2312

java跟python类似的做法,在java中字符串的编码是java修改过的一种Unicode编码,所以看到java中的字符串,心理要默念这个东西是java修改过的一种Unicode编码的编码。 packagestring;importjava.nio.charset.Charset;public classUTF82GBK {public static void main(String[] a…

java中utf8转成gbk,java中GBK转UTF-8乱码的解决方法

java中GBK转UTF-8乱码的解决方法 如果自己采用的是GBK编码&#xff0c;对方采用得到是UTF-8编码&#xff0c;发送数据时需要将GBK编码数据转换成UTF-8编码数据&#xff0c;这样对方才不会乱码。 问题出现&#xff1a;GBK转UTF-8时&#xff0c;奇数个中文会乱码&#xff0c;偶数…

notepad批量转换文件编码utf8、gbk

从网上找了多个编码转换工具&#xff0c;自己也尝试写、从网上找python脚本&#xff0c;对文件进行批量转换&#xff0c;但转换结果都不理想&#xff0c;大部分文件都可以正常转换成UTF8&#xff0c;但少量文件转换后可能出现中文乱码的情况。 经过多次尝试&#xff0c;发现使…