介绍:重复测量是指对一些个体在不同的时间点(或实验条件)进行同类型的测量,获得了个体在不同时间(或不同实验条件)下的度量数据,如反应时、ERP波幅等连续型数据。重复测量方差分析是实验心理学的数据分析中最常用的方法之一,需要考虑的数据的因素比较复杂,比如数据是否正态分布,是否球型度,不同情况产生的结果是否不同。本推文结合实验数据探讨R软件和SPSS做重复测量方差分析的流程,对所产生的结果的差异进行讨论。

1.    数据预处理

上一期推文,我们对一次3*2的被试内设计实验得到的14个被试的数据进行了预处理,得到了84个反应时数据。在以反应时为重复测量数据时,一般以某条件下反应时的平均值或中位数代表该条件下的反应时,在此基础上做方差分析检验主效应或交互作用。

Sub

VarA

VarB

RT

1

1

levelA1

levelB1

463.3473

2

1

levelA1

levelB2

458.8841

3

1

levelA2

levelB1

555.6667

4

...

...

...

...

...

...

...

...

...

81

...

...

...

...

82

14

levelA2

levelB2

486.5000

83

14

levelA3

levelB1

460.4154

84

14

levelA3

levelB2

469.6383

表1

2.R软件的分析

2.1.aov()函数进行重复测量方差分析

    用R软件做方差分析的一个内置函数(不需要调用开源程序包的函数)是aov()函数,语法为aov(formula, data = dataframe),重复测量方差分析的formula是:y ~ B * W + Error(Subject/W),其中W表示组内因子,B表示组间因子。aov()函数还能做其他方差分析,由于不在本文范围,不做详述,有需要的同学可以参看《R语言实战》的第九章(201页起)。

    上一期推文的最后,我们将数据拆分到个体水平。

D.sub.AB =ddply(D.Blank ,.( Sub, VarA, VarB ), summarize, RT=mean(RT))
#得到表1数据

    以反应时为因变量,做被试内VarA * VarB 重复测量方差分析。

#需要先将被试变量转为因子型数据
D.sub.AB$Sub=factor(D.sub.AB$Sub) 
#利用aov()函数进行重复测量方差分析
AB.aov 
summary(AB.aov)

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_SPSS

图1:summary(AB.aov)的结果

2.2.计算偏eta方

    这里利用自建函数计算偏eta方

#建函数
es=function(x,n=NULL) {                                      
  if(is.null(n)) n=length(names(x))-2
  k=NULL
  p=summary(x)
  for(i in (1:n)+1) {
    l=unlist(p[i][[1]])
    k=c(k,l[3]/sum(l[3:4]))
  }
  names(k)=names(p)[(1:n)+1]
  k
}#计算偏eta方
es(AB.aov)

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r data.frame添加_02

图2:es(AB.aov)的结果

可与SPSS的结果作一下比较,见图11。

2.3.将数据保存到指定位置的txt文件

###保存到指定路径下的txt中
setwd("D:/wechatpaper")
sink('result.txt')
paste("Accuracy =", ACCMean, "% /", "SD =", ACCSD)
paste("Subjects =", nSub, '( Male&Female=',nMale, '&', nFemale, ') /',
      "MeanAge =",MeanAge, "range from",MinAge,"-",MaxAge)
paste("RejectRate =", RejectRate,"%")
'result of anova:'
summary(AB.aov)
'effect size:'
es(AB.aov)
sink()
getwd()#查看保留路径

3.SPSS的分析

3.1.数据转置

####转化为14×6的数据矩阵导入spss
library(reshape)
datacast=cast(D.sub.AB,Sub~VarA+VarB,value='RT')
write.csv(datacast,file="DsubAB.csv")
getwd()#查看保留路径

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r语言抽样分布绘图修改重复列_03

图3:按测量条件排列数据

3.2.将数据导入SPSS

注:对SPSS的介绍是基于中文版的界面的,如果想从英文版界面转为中文版:Edit> Options> Language> User Interface> Chinese (Simplified)> OK

打开spss>打开其他文件>(找到你的数据并打开)>(文本导入,第二步设置为包括变量名)>下一步...

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r语言抽样分布绘图修改重复列_04

图4:导入数据到SPSS

3.3.进行重复测量方差分析

点击工具栏的:分析>一般线性模型>重复测量>

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r语言抽样分布绘图修改重复列_05

图5

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_SPSS_06

图6:定义因子

>定义因子(图6):1.主体内因子填A,级别数3;添加;2.主体内因子填B,级别数2;添加;3.定义

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_SPSS_07

图7:设置主体内变量

>设置主体内变量(图7):将右边框的六个水平依次移动到主体内变量,注意A和B的对应位置。

>选择输出的结果内容(图8):1.图:水平轴A;单独线条B;添加;继续;

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r语言抽样分布绘图修改重复列_08

图8:设置输出的图

>选择输出的结果内容(图9):2.选项:因子与因子交互的所有内容移动到右边框,比较主效应;在描述统计、效应量估计、参数估算值、齐性检验等内容打勾,需要其他的数据的话也可以打勾,不影响结果。

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_R 多变量数据预处理_09

图9:选择输出的数据结果

>确定

输出的结果清单有:

1.主体内因子;

2.描述统计;

3.多变量检验;

4.莫奇来球形度检验;

5.主体内效应检验;

6.主体内对比检验;

7.主体间效应检验;

8.参数估计值;

9.总平均值;

10.A变量估算值;

11.A变量内成对比较;

12.A变量的多变量检验;

13.B变量估算值;

14.B变量内成对比较;

15.B变量的多变量检验;

16.变量B在变量A各水平上的差异;

17.图

这里只比较R软件和SPSS输出结果的主效应和交互作用有何差异,所以只讨论3-5的结果。

3.4.从SPSS输出的结果解读主效应和交互作用

    根据网络上的一些解读教程,我总结了以下的流程(图9)。首先看莫奇来球形度检验(图10),若显著性p>0.05,说明数据符合球形度,即三水平或以上的数据中,每两组的数据方差是齐性的,此时应以主体内效应检验(图11)结果为准。主体内效应结果会呈现4个数据:假设球形度、格林豪斯-盖斯勒、辛-费德特、下限;如果四组数据不一致,建议以格林豪斯-盖斯勒的结果为准。许多文献中都有提到Greenhouse-Geisser的校正结果,因为比较稳定。若显著性p<=0.05,说明数据不符合球形度,或者说是方差不齐,此时应以多变量检验(图12)结果为准。

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_R 多变量数据预处理_10

图10:结果取舍的流程

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_SPSS_11

图11:球形度检验

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_SPSS_12

图12:主体内效应检验

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r语言抽样分布绘图修改重复列_13

图13:多变量检验

在本例中,变量A和AB交互需要考虑球形度检验,AB交互数据满足球形度,变量A不满足,所以AB以主体内效应检验为准,主效应A以多变量检验为准。另一方面AB交互的结果中,以格林豪斯-盖斯勒的结果为准。

4.比较R软件和SPSS的结果

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_SPSS_14

图14:R软件和SPSS的结果

    从上图可以看出R软件的结果和SPSS的结果是有所差异的,偏eta方(图2与图11,重要的统计结果)也有所不同。出现这种差异的原因在于R软件的aov()函数假设了数据符合球形度且正态分布(图15)。如果你考虑统计结果校正的问题的话,在此建议你做数据预处理和数据可视化时用R软件,做重复测量方差分析时用SPSS比较稳妥一点。当然,如果你觉得球形度检验和数据正态性不重要,也可以以R软件的结果为准,尽管两者会有略微的差异。

r语言抽样分布绘图修改重复列 r语言重复测量方差分析_r data.frame添加_15

图15:《R语言实战》216页内容

参考资料:

RobertI.Kabacoff, 卡巴科弗, 陈钢, 肖楠, & 高涛. (2013). R语言实战.

https://www.bilibili.com/video/BV1Ps41177QH

https://www.sohu.com/a/123940962_489312

视频版介绍

后台回复demo1,可获得本推文中的R软件代码、SPSS的数据。