其他分享
首页 > 其他分享> > 如何在PsychoPy Builder中使用条件分支实现实验?

如何在PsychoPy Builder中使用条件分支实现实验?

作者:互联网

心理学/神经科学中的许多行为实验设计都需要条件分支(例如,如果在初始实践阶段已达到必要的性能水平,则仅进行测试阶段). PsychoPy的“构建器”视图允许生成一个Python脚本,以使用大量的图形控件来运行实验.但是它似乎没有对条件分支的内置支持.

是否可以通过在Code组件中使用Python代码段在Builder中实现在给定运行中跳过特定例程的功能?还是需要迁移到完整的Python Coder环境?

解决方法:

PsychoPy中的Coder视图可让您完全访问Python编程语言,因此您可以实施任意复杂的实验设计.

同时,PsychoPy的图形化Builder视图强调易用性和灵活性,而不是灵活性.它不能直接满足的一件事是条件分支.但是,它可以被黑客入侵以间接实现它.

假设您有一个分为三个阶段的实验:一个练习块,然后是两个可能的实验块,即ConditionA或ConditionB.完成练习块后,将高绩效科目分配给条件A,而将低绩效科目分配给条件B.

要在Builder中实现此功能,请创建三个例程来表示每个任务块(Practice,conditionA和conditionB).每个循环也将被一个循环包围(分别为practice_loop,A_loop和B_loop.).此外,还要在Practice和conditionA之间插入一个例程(称为assignCondition).

在assignCondition例程中,放置一个Code组件.在这种情况下,假设在练习例程中维护了一个性能得分计数器.我们可以使用它来更改后续例程的重复次数.也就是说,通过将循环的重复数设置为零,我们确保该循环内的例程不会被执行.因此,这些循环的重复次数将不是一个固定值,而是一个变量(例如,重复次数A和重复次数B).

在assignCondition例程的“代码”组件的“开始例程”选项卡中,放入一个如下的Python代码段:

if performanceScore > 25:
    repetitionsA = 50 # run this routine 50 times
    repetitionsB = 0 # don't run this condition at all
else:
    repetitionsA = 0 # vice versa: don't run this
    repetitionsB = 50 # do run this

Matt Wall在此处的博客文章中对此技术进行了更全面的描述(以fMRI块设计为例,其中块的顺序需要可变):

http://computingforpsychologists.wordpress.com/2013/11/12/how-to-hack-conditional-branching-in-the-psychopy-builder/

标签:psychopy,experimental-design,python
来源: https://codeday.me/bug/20191121/2054432.html