本文基于一种情况来梳理使用PsychoPy编程实现block顺序平衡 (以ABBA为例) 的逻辑:
只有一种实验(一种循环模式、一套操作流程)。本文中该实验有两个条件,且是被试内设计,所以要用ABBA来平衡。
参考B站视频:
第一步:文件的建立
以我的实验程序为例,我需要ABBA和BAAB两种平衡。A代表一个实验条件,B代表一个实验条件。最简化的情况,文件需要两个。一个用于block loop(循环),一个用于trial loop。
用于block loop的文件内容示例:
文件中变量介绍:
instruction变量:指导语,如果这里直接填的文本,需要在每个block最开始添加一个routine(例程),在其中添加Text组件,在Text属性中写上$instruction(文件中定义的变量名)。当然,指导语内容也可以以图片形式呈现,如果图片是png格式,就在文件中写上图片名称.png。
file变量:一个文件中存放着一个条件的一个block中的所有试次(举例见下)。
用于trial loop的文件内容示例:
这里只以a_conditions.xlsx文件为例,另外三个文件也是根据自己设定的试次内容填写就好。
第二步:给block loop先定义变量
以我的flow为例。添加一个routine命名为blockSel。在其中添加一个code(代码)组件,定义变量:
其中,BlockSequencefile命名为什么都可,而session变量是从explnfo字典中调取出来的,名称不能变。什么时候会用到session呢?——当我们开始跑程序时,系统会弹出:
这时我们要用到session,所以session的变量名称一定不能变。
注意,这一步是在Begin Experiment属性中进行的。接下来在Begin routine中添加条件语句:
这样,我们就可以实现,当我们在跑程序开始的弹窗中的session中输入1时,ABBA.xlsx文件就赋给了BlockSequencefile。
第三步:在block/trial loop中引用变量
先点击blocks loop(可随意命名):
有3个地方需要注意:1、在loopType属性中选定sequential,这样就能实现四个文件的调用顺序与先前在文件中从上到下写的一样。2、nReps设置为1,意思是只四个文件只循环一遍。3、Conditions属性写入$BlockSequencefile,这样就可以实现session输入了几,BlockSequencefile就引用那个文件,这个文件就被给予了这里的Conditions,于是程序就按这个文件中的顺序开始调用文件里边的文件。这个文件里边的文件就是接下来要赋给trial loop的:
点击trials loop进入它的属性界面:
仍然是前面三个需要注意的地方:1、选循环类型。由于我的文件里各试次是按顺序填的,没有手动随机化,所以这里就设置了random,这样每个试次就会随机抽取一个condition了(一个condition就是一个excel的一行)。2、同样,想循环一次nReps就填1。3、Conditions属性填上$file,这是在第一步给出的ABBA和BAABexcel文件中定义的。意思是如果block选定了ABBA.xlsx文件,第一个block就是从a_conditions.xlsx开始的,这时a_conditions.xlsx给到了file变量,就被trials loop引用过来了,trials loop就可以随机地从该excel文件中调用condition(一行就是一个condition)。到此,逻辑梳理完。
PS. 有些研究可能需要每个block结束都要退出一次程序来调节设备。这时block loop就没必要设置了。但是BlockSequencefile还是要定义,条件语句还是要写,即有几个block就把几个值赋给session,就要相应建立多少个block文件。
小感悟上线:今天刚汇报完~大家又提出了好多问题,特别是数据分析的问题,是我先前很少考虑的。老师说,数据分析想清楚了才能开始实验。继续加油吧!