Как вы реализуете эксперименты с условным ветвлением в PsychoPy Builder?

Многие поведенческие экспериментальные модели в психологии / нейробиологии требуют условного ветвления (например, переходить к фазе теста только в том случае, если на начальном этапе практики достигнут необходимый уровень производительности). Представление PsychoPy Builder позволяет генерировать сценарий Python для запуска эксперимента с использованием в основном графических элементов управления. Но, похоже, нет встроенной поддержки условного ветвления.

Может ли пропуск конкретной подпрограммы в данном прогоне быть реализован в Builder с использованием фрагментов Python в компоненте Code? Или это требует перехода к полной среде Python Coder?

1 ответ

Решение

Представление Coder в PsychoPy дает вам полный доступ к языку программирования Python, и, следовательно, вы можете реализовать произвольно сложные экспериментальные проекты.

Тем временем в графическом представлении PsychoPy подчеркивается простота использования и простота, а не гибкость. Одной вещью, которая не обслуживает непосредственно, является условное ветвление. Однако его можно взломать, чтобы достичь его косвенным путем.

Допустим, у вас есть трехэтапный эксперимент: тренировочный блок, за которым следуют два возможных экспериментальных блока, ConditionA или ConditionB. После завершения учебного блока высокоэффективные субъекты назначаются условию A, в то время как малоэффективные субъекты назначаются условию B.

Чтобы реализовать это в Builder, создайте три подпрограммы для представления каждого из блоков задач (практика, условие A и условие B). Каждый из них также будет окружен циклом (practice_loop, A_loop и B_loop соответственно.) Также вставьте подпрограмму между Practice и conditionA (называемой, скажем, assignCondition).

В процедуре assignCondition поместите компонент Code. Предположим в этом случае, что счетчик результатов работы был сохранен в рутине Практики. Мы можем использовать это, чтобы изменить количество повторений последующих подпрограмм. То есть, устанавливая номер повторения цикла в ноль, мы гарантируем, что подпрограммы внутри этого цикла не будут выполняться. Следовательно, число повторений этих циклов будет не фиксированным значением, а переменной (скажем, repetitionsA и repetitionsB).

На вкладке "Begin Routine" компонента Code подпрограммы 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

Более полное описание этого метода дан Мэттом Уоллом в сообщении в блоге здесь (на примере дизайна блока fMRI, в котором порядок блоков должен быть переменным):

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

Другие вопросы по тегам