从零开始实现SST(Stop Signal Task)实验——基于PsychoPy

1.前言

 在认知控制研究中,Stop Signal Task (SST) 是一个经典的行为范式,用于测量抑制控制能力。作为一名神经科学学生,笔者最近需要搭建一个SST范式用于fNIRS实验。虽然网上有不少现成的代码,但大多较为复杂或与自己的实验需求不完全匹配。因此决定从零开始,使用PsychoPy搭建一个实用的SST范式。在这个过程中也踩了不少坑,希望这篇教程能帮助同样需要编写SST的同学少走些弯路。

2.环境配置

  笔者在MAC上使用psychopy,安装步骤如下:

  1. 官网(https://www.psychopy.org),下载最新MAC版本。
  2. 将PsychoPy拖入Applications文件夹。
  3. "系统偏好设置"中允许应用。

  这种方式安装简单,包含所有依赖,无需额外配置Python环境,适合快速开始~

3.实验设计框架

3.1 SST实验概述

  SST的核心是测量被试抑制已经开始的动作反应的能力。在每个试次中,被试会先看到一个Go信号(比如箭头),需要快速按键反应。在少部分试次中(一般约25%-33%),Go信号之后会出现Stop信号(通常是一个声音或视觉提示),这时被试需要抑制自己的按键反应。

3.2 实验设计

基本结构:
  • 4个blocks (ABBA设计,2个Condition1 + 2个Condition2)

  • 每个block 60个trials (重复2次的30个词)

  • Go trials: 45个 (75%)

  • Stop trials: 15个 (25%)

刺激材料:
  • 两组刺激对比:

    • Condition1: 威胁性词汇 vs 中性词

    • Condition2: 损失类词汇 vs 中性词

反应要求:
  • Go trials: 快速分类

    • F键 = 负面词

    • J键 = 中性词

  • Stop trials: 听到蜂鸣声时抑制反应

4.Psychopy项目搭建

笔者一般规范的项目结构

  首先需要创建一个规范的项目结构,但是笔者也不太规范哈~大家最好是把Stimulus等也分开。

  • 不过重要的需要有ins文件夹,存放指导语图片;
  • 停止声音文件:beep.wav;
  • 一系列Excel文件:Condition1-1.xlsx、Condition1-2.xlsx、Condition2-1.xlsx、Condition2-2.xlsx(不同条件的刺激配置)。

5.一切的开始:先来写intro!

  基本上每个实验开始都是指导语作为第一个Rountine。

  笔者的SST实验也是如此,一般一个指导语里只需要有三个组件,分别是:(1)指导语图片,(2)结束按键反应,和(3)如果有神经影像的打marker代码。

  唯一特殊的地方是因为我有四个Block,按键和刺激词的平衡设计导致指导语都不一样,所以image组件里的图片路径要特殊设置一下。

  $ins表示这个图片组件会读取名为"ins"的循环变量作为图片路径,可以用来按顺序自动展示不同的指导语图片。

6.三个rountine构成一个trial~

trial部分包含以下3个Routine:

1.fix(fixation十字注视点):呈现一个"+"号注视点,帮助被试将注意力集中在屏幕中央,持续0.5秒。

  在fix这个Routine中,使用polygon组件来呈现注视点,Shape设置为Cross,duration设为0.5秒。这个十字注视点会帮助被试将视线和注意力集中在屏幕中央。

2.trial(主试次):呈现主要实验刺激,包括四个组件。

# 仅在停止试次时调整SSD
if current['is_stop']:
    # 根据是否做出反应调整SSD(抑制失败减50ms,成功加50ms)
    ssd_change = -0.05 if exp_resp.keys else 0.05
    # 更新并记录SSD
    expInfo['ssd'] = max(0, float(expInfo['ssd']) + ssd_change)
    thisExp.addData('inhibition_success', int(not exp_resp.keys))
    
thisExp.addData('ssd', expInfo['ssd'])

SSD代码示范

3.isi(试次间隔):两个试次之间的空屏间隔时间,duration设置为0.5-1.5秒随机,用于避免被试对刺激呈现时间产生预期。

  ISI使用一个text组件实现,将duration设置为$random()+0.5+0.5,这样可以产生0.5到1.5秒的随机间隔时间。text内容可以留空,相当于一个空屏呈现。

7.两个Loop串联全局

  trials是内循环,串联了每个区块内的3个Routine(fix、trial、isi),负责单个区块内试次的重复呈现。

  trials_2是外循环,串联了不同的区块(intro、实验区块、end),控制整个实验的区块切换和流程。

  这是一个嵌套循环的结构。每个Bolck刺激材料和按键的改变就靠外循环condition文件的设置。

8.小小总结

  关于psychopy开发实验程序的分享就写到这里。

  笔者也是最开始为了搭建自己的fNIRS实验开始自己写程序,实测下来psychopy的开发真的很轻便的,基于python都会有这个优势,不用matlab重量级环境也不用Eprime软件包。但是不稳定也真的是不太稳定呢,可能我用笔记本电脑的原因。而且不同的版本有不同的BUG,如果遇到问题,换一个版本试试呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值