1 两因素方差分析的形式

多因素方差分析针对的是多因素完全随机设计。包含两个及以上的自变量,为便于讲解,本文以两因素方差分析为例。

在一个两因素完全随机设计中,自变量

包含
,共
个水平。自变量
包含
,共
个水平。总共形成
个处理。各处理
之下有
个观测值。特别的,当各处理的观测值都为
时,称为等组设计。

等组设计的具体形式如下:

若各组观测值

数量不同,称为非等组设计,形式如下:

其中

各不相同

两因素方差分析的逻辑是对变异进行比较。通过对平方和(Sum of Squares)和自由度(Degree of Freedom)的分解,利用公式:

计算出各主效应方差,交互作用方差和组内方差(即误差方差)。各主效应和交互作用的方差与误差方差的差异(比值)体现了该效应的显著性。而且在零假设为真的情况下,该比值服从F分布,进而分别完成各效应的假设检验。

具体的分解如下图:

常规的流程大家都非常熟悉,不再赘述。接下来换个角度,从多元线性回归来看一看两因素方差分析。

2 两因素方差分析的线性模型

模型的基本形式

两因素方差分析的线性模型可以表示为:

其中

指A因素第
个水平的效应,
因素第
个水平的效应,
指A因素第
个水平与B因素第
个水平的交互作用效应,
表示
处理中,第
个观测值的随机误差。该式说明:某个观测值等于其所在处理的各主效应和交互作用效果叠加,并附加上一个随机误差组成。

通常,我们让:

其中

表示各平均效应。上述式子意味着:以各因素的平均效应为基准,用相对的效应值
来表示各水平的效应。可见,就是
是相对效应量,是各效应偏离平均效应的程度,即离均差。易知:

2.2.4和2.2.5式需要稍微推导一下,有兴趣的同学可以自己动手试试,没兴趣忽略就好

据此,可将2.1式写为:

其中:

  • 是观测值
  • 是总平均,相当于是截距
  • 是随机误差,且独立同分布

模型表达的意思是:每一个观测值

实际上都是在某个总平均
上附加了一个
因素
水平的效果
,一个
因素
水平的效果
因素和
因素在各自水平上的交互作用
,并且还受到了随机误差
的影响。

例如,如果某被试接受的是自变量

的处理,那么他的观测值就是
是指该处理中观测值的编号,

引入虚拟变量

为了便于理解,我们可以引入虚拟变量

,令:

意味着:在

处理中,
,其余虚拟变量均为0。

例如:对第

处理中,
,其余均为0

可以发现,当把虚拟变量带入2.3式之后得到:

2.4式可看成是一个包含

个自变量的多元线性回归模型。

此时

的取值为:

此时

的取值为:

是不是眼花缭乱?哈哈。

如果从矩阵的角度来看,此时的

形成的矩阵就是一个
的单位矩阵,只有对角线元素为1。而且注意到:
的取值都可以由
组合得到。即
的每一列都可以是
列向量的线性组合。也就是自变量之间存在多重共线性,此时有效的自变量数量仅仅只有

。这就出问题了,因为我们需要估计的参数一共有

别担心,我们还有2.2.2-2.2.5这几个式子,利用这几个式子将上述取值改为:(又要眼花缭乱了)

此时利用2.2.1和2.2.2式将

中各去掉了一个自变量,表中去掉的是各自的最后一项,因为
,所以当
时,将
都取为
就可以了。实际上去掉任何一项都可以,不影响最终结果。

同理,可将交互作用的虚拟变量改为:

注意到对角线的子矩阵,以及最后一行的各矩阵。特别是最后一行

时的取值,用心的小伙伴简单推导就可以得到,这里就不再啰嗦了。

3 对单因素方差分析的线性模型进行多元回归

提示:该部分直接用公式推导实在太麻烦了,所以用一个数据例子来进行说明。

以一个3×2的两因素完全随机设计为例,其中A因素个水平,B因素两个水平,每个处理之下一共4个观测值。

将观测值

和虚拟变量都列出来为。为了偷懒,除了第一个处理的四个观测值都列出来之外,其余的每个处理只列出一个。

接下来,利用python的statemodels进行计算:

from statsmodels.formula.api import ols #拟合线性模型的包
from statsmodels.stats.anova import anova_lm#进行方差分析的包
import pandas as pd
import numpy as np
data={'XA1':  [1,1,1,1, 1, 1, 1, 1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1],'XA2':  [0,0,0,0, 0, 0, 0, 0,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1],'XB1':  [1,1,1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1],'XAB11':[1,1,1,1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,1,1,1,1],'XAB21':[0,0,0,0,0,0,0,0,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1],'Y':[5,3,4,2,6,3,5,5,7,6,7,8,8,7,8,5,9,7,5,7,10,12,11,7],'A':[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3],'B':[1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2]
}#其中前5行是虚拟变量,Y是观测值,A,B是分类变量
df=pd.DataFrame(data)
model_lin=ols('Y~XA1+XA2+XB1+XAB11+XAB21',data=df).fit()#用虚拟变量进行回归
model_anova=ols('Y~C(A)*C(B)',data=df).fit()#用分类变量进行方差分析
anova_Result=anova_lm(model_anova)print(anova_Result)df     sum_sq    mean_sq          F    PR(>F)
C(A)        2.0  79.083333  39.541667  17.905660  0.000052
C(B)        1.0  12.041667  12.041667   5.452830  0.031315
C(A):C(B)   2.0   9.083333   4.541667   2.056604  0.156887
Residual   18.0  39.750000   2.208333        NaN       NaN
#利用方差分析结果计算决定系数,组间平方和(主效应与交互作用之和)/总平方和
R_square=np.sum(anova_Result.sum_sq[0:3])/np.sum(anova_Result.sum_sq)
print(R_square)0.7159869008633524
#打印回归分析结果
print(model_lin.summary())OLS Regression Results
==============================================================================
Dep. Variable:                      Y   R-squared:                       0.716
Model:                            OLS   Adj. R-squared:                  0.637
Method:                 Least Squares   F-statistic:                     9.075
Date:                Sat, 11 Apr 2020   Prob (F-statistic):           0.000191
Time:                        18:02:59   Log-Likelihood:                -40.109
No. Observations:                  24   AIC:                             92.22
Df Residuals:                      18   BIC:                             99.29
Df Model:                           5
Covariance Type:            nonrobust
==============================================================================coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      6.5417      0.303     21.566      0.000       5.904       7.179
XA1           -2.4167      0.429     -5.633      0.000      -3.318      -1.515
XA2            0.4583      0.429      1.068      0.299      -0.443       1.360
XB1           -0.7083      0.303     -2.335      0.031      -1.346      -0.071
XAB11          0.0833      0.429      0.194      0.848      -0.818       0.985
XAB21          0.7083      0.429      1.651      0.116      -0.193       1.610
==============================================================================
Omnibus:                        1.556   Durbin-Watson:                   2.330
Prob(Omnibus):                  0.459   Jarque-Bera (JB):                1.295
Skew:                          -0.535   Prob(JB):                        0.523
Kurtosis:                       2.614   Cond. No.                         1.73
==============================================================================Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
#利用回归模型输出各预测值
model_lin.predict()array([ 3.5 ,  3.5 ,  3.5 ,  3.5 ,  4.75,  4.75,  4.75,  4.75,  7.  ,7.  ,  7.  ,  7.  ,  7.  ,  7.  ,  7.  ,  7.  ,  7.  ,  7.  ,7.  ,  7.  , 10.  , 10.  , 10.  , 10.  ])
#利用回归模型输出参数估计值
model_lin.paramsIntercept    6.541667
XA1         -2.416667
XA2          0.458333
XB1         -0.708333
XAB11        0.083333
XAB21        0.708333
dtype: float64
#输出原始观测值的总均值
np.mean(df['Y'])6.541666666666667

可见,用常规的方差分析计算出来的结果与回归分析一致,决定系数

是相同的。此外,回归模型告诉我们:各处理的预测值就是该处理的组均值;模型的截距(总平均)就是所有观测值的平均值。实际上,决定系数就是回归平方和除以总平方和。而回归平方和等于观测值与预测值的平方和,对应的就是方差分析组间平方和,不过多因素方差分析中,组间平方和等于所有主效应与交互作用平方和之和。回归总平方和就是观测值与总平均的平方和,此处与方差分析的总平方和一致。

绕了这么半天,似乎说了好多废话。有同学可能会嫌弃,认为我把简单的事情搞复杂了。确实这样理解很复杂,但是只有这样理解了,我们才能搞清楚什么是Ⅰ型平方和以及Ⅲ型平方和。这两种平方和专门针对多因素方差分析,在等组设计中二者没有区别,但是非等组设计中二者区别就大了,反正我最终是通过回归才搞清楚

关于Ⅰ型平方和以及Ⅲ型平方和,我会专门写一篇文章来介绍。

4 结论

  • 多元回归的结果与方差分析的结果是一致的
  • 将多因素方差分析转换为回归分析时,要注意虚拟变量的取值,特别是交互作用的虚拟变量。
  • 通过回归来理解方差分析,有助于我们理解Ⅰ型平方和以及Ⅲ型平方和(另开文章介绍)

欢迎非商业转载,只需注明作者“AhaDad”和来源即可

多因素方差分析中预测因素的筛多_用回归来理解方差分析(二):两因素方差分析...相关推荐

  1. 回归标准差和残差平方和的关系_用回归来理解方差分析(三):Ⅰ型平方和与Ⅲ型平方和...

    阅读提示 为了更好理解这篇文章,你可能需要了解:两因素方差分析 平方和的分解 方差分析模型 虚拟变量 推荐先阅读 文中涉及到的代码只是为了验算,如果不熟悉代码的同学可以忽略,直接看结果就行.也可以自己 ...

  2. 方差分析中怎么看有无显著性影响_用R语言做单因素方差分析及多重比较

    SPSS方差分析的应用已经做得非常好了,绝大多数的方差分析问题均可通过SPSS"点菜单"的方式得以解决,R语言在统计和可视化方面有自己的特色,我们不妨来对比着学习.选用R语言自带案 ...

  3. 博途软件中多重背景块的建立_如何正确的理解西门子博途中的—单个实例和多重实例的区别...

    启程自动化培训-工业机器人实训基地​www.qichengplc.com 1:我们在博途中先新建一个工程,并且建立一个FB块名字为Motor,里面写上我们编程里常用的自锁回路 如下图所示: 2:我们在 ...

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

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

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

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

  6. 方差分析中的“元”和“因素”是什么?

    试验中要考察的指标称为试验指标,影响试验指标的条件称为因素,因素所处的状态称为水平 (通常用于3个或更多水平时:如果只有2个水平考虑T-test);若试验中只有一个因素改变则称为单因素试验,若有两个因 ...

  7. spss方差分析_【案例】SPSS统计分析:多因素方差分析

    - 点击上方"中国统计网"订阅我吧!- 多因素方差分析,用于研究一个因变量是否受到多个自变量(也称为因素)的影响,它检验多个因素取值水平的不同组合之间,因变量的均值之间是否存在显著 ...

  8. 如何使用SPSS进行两因素重复测量的方差分析

    一.问题与数据 某研究者拟评估海水淹溺后残留于肺内的海水是否可导致严重的肺损伤,建立动物模型.将12只杂种犬随机分为两组,一组海水灌注右肺,另一组海水灌注全肺,每组6只.每只犬分别于海水灌注前以及灌注 ...

  9. 两因素重复测量方差分析,史上最详细SPSS教程!

    原文地址 http://www.sohu.com/a/202657022_489312 2017-11-06 18:34 一.问题与数据 研究者想知道短期(2周)高强度锻炼是否会减少C反应蛋白(C-R ...

最新文章

  1. Visual Studio 2005 Web Deployment Projects版本不同引发的问题
  2. 提前半年博士毕业,一作发顶刊论文11篇,这位“科研学霸”的秘诀是?
  3. 深入探寻seajs的模块化与加载方式
  4. Python3 的内置函数和闭包
  5. 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
  6. 游戏的数值系统的实现和演化
  7. #linux# su命令细节错误
  8. 将一个BYTE数组转换成16进制字符串和10进制字符串格式
  9. 数据算法与结构基本知识
  10. tensorboard可视化经常出现的两个问题
  11. 使用OmniDB数据库管理工具,管理Oracle/MariaDB/PostgreSQL等关系型数据库
  12. 电脑联网了但不能上网_电脑联网不能用,求助
  13. laravel 下载图片跨域问题
  14. mac 思科 链路聚合_链路聚合定义/Eth-trunk/思科华为配置实例
  15. JavaScript实现打字机效果
  16. 浅谈何为分布式,何为微服务架构
  17. 一文简单理解《Effective Java》建议
  18. x264 代码重点详解 详细分析
  19. Simulink —— Toggle Switch的使用
  20. 小学生C++画图 Go C 编程 第8课 魔法计时器(魔法学院的奇幻之旅 Go C编程绘图)

热门文章

  1. JavaScript 实现 GriwView 单列全选
  2. WEB攻防实战篇,思维导图
  3. 位枚举(Bit Flags)
  4. linux的基础知识——shell语法
  5. 【剑指offer】面试题46. 把数字翻译成字符串(java)
  6. Leetcode--343. 整数拆分
  7. 2017年网易校招题 解救小易
  8. 网站开启https后很慢_网站优化中哪些设置会影响蜘蛛的抓取?对网站SEO产生什么影响...
  9. oauth2.0 php简化模式,OAuth2.0学习(1-5)授权方式2-简化模式(implicit grant type)
  10. mysql driver 读写分离_Mysql主从复制和读写分离实践