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

问题描述 投票:3回答:1

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

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

python psychopy experimental-design
1个回答
3
投票

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

同时,PsychoPy的图形化构建器视图强调易用性和简单性而非灵活性。它不能直接满足的一件事是条件分支。但是,它可以被黑客间接地实现它。

假设你有一个三阶段实验:一个练习块,然后是两个可能的实验块,ConditionA或ConditionB。在完成练习块之后,将高性能主题分配给conditionA,而将低性能主题分配给conditionB。

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

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

在assignCondition例程的Code组件的“Begin Routine”选项卡中,放置一个这样的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/

© www.soinside.com 2019 - 2024. All rights reserved.