介绍:重复测量是指对一些个体在不同的时间点(或实验条件)进行同类型的测量,获得了个体在不同时间(或不同实验条件)下的度量数据,如反应时、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)
图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)
图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()#查看保留路径
图3:按测量条件排列数据
3.2.将数据导入SPSS
注:对SPSS的介绍是基于中文版的界面的,如果想从英文版界面转为中文版:Edit> Options> Language> User Interface> Chinese (Simplified)> OK
打开spss>打开其他文件>(找到你的数据并打开)>(文本导入,第二步设置为包括变量名)>下一步...
图4:导入数据到SPSS
3.3.进行重复测量方差分析
点击工具栏的:分析>一般线性模型>重复测量>
图5
图6:定义因子
>定义因子(图6):1.主体内因子填A,级别数3;添加;2.主体内因子填B,级别数2;添加;3.定义
图7:设置主体内变量
>设置主体内变量(图7):将右边框的六个水平依次移动到主体内变量,注意A和B的对应位置。
>选择输出的结果内容(图8):1.图:水平轴A;单独线条B;添加;继续;
图8:设置输出的图
>选择输出的结果内容(图9):2.选项:因子与因子交互的所有内容移动到右边框,比较主效应;在描述统计、效应量估计、参数估算值、齐性检验等内容打勾,需要其他的数据的话也可以打勾,不影响结果。
图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)结果为准。
图10:结果取舍的流程
图11:球形度检验
图12:主体内效应检验
图13:多变量检验
在本例中,变量A和AB交互需要考虑球形度检验,AB交互数据满足球形度,变量A不满足,所以AB以主体内效应检验为准,主效应A以多变量检验为准。另一方面AB交互的结果中,以格林豪斯-盖斯勒的结果为准。
4.比较R软件和SPSS的结果
图14:R软件和SPSS的结果
从上图可以看出R软件的结果和SPSS的结果是有所差异的,偏eta方(图2与图11,重要的统计结果)也有所不同。出现这种差异的原因在于R软件的aov()函数假设了数据符合球形度且正态分布(图15)。如果你考虑统计结果校正的问题的话,在此建议你做数据预处理和数据可视化时用R软件,做重复测量方差分析时用SPSS比较稳妥一点。当然,如果你觉得球形度检验和数据正态性不重要,也可以以R软件的结果为准,尽管两者会有略微的差异。
图15:《R语言实战》216页内容
参考资料:
RobertI.Kabacoff, 卡巴科弗, 陈钢, 肖楠, & 高涛. (2013). R语言实战.
https://www.bilibili.com/video/BV1Ps41177QH
https://www.sohu.com/a/123940962_489312
视频版介绍
后台回复demo1,可获得本推文中的R软件代码、SPSS的数据。