You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Psychopy中反应时任务的实验区块无法随机化问题求助

针对PsychoPy区块随机化与SOA整合问题的解决方案

问题背景

我目前正在开展一项反应时与准确率任务,核心是对比视觉呈现听觉呈现的数字信息:

  • 视觉数字信息分为三种形式:阿拉伯数字(如5)、数字单词(如five)、非符号量级(如5个点的图片)
  • 视觉与听觉刺激依次呈现,第二个刺激呈现后,被试需判断两者数字信息是否一致:按a表示一致,按l表示不一致
  • 额外变量:刺激呈现异步性(SOA/刺激间时间间隔),设置7个水平:±750ms±250ms±500ms0ms
  • 实验结构:每组fixation_cross与对应SOA的任务(如VA_750ms)构成一个区块,共7个区块;已完成区块内试次随机化,需实现区块间随机化

遇到的核心问题

  1. 尝试在外层添加名为blocknames的循环,但实验正常运行却未实现区块随机化
  2. 创建了对应各条件的Excel文件(如AV500ms.xlsxVA750ms.xlsx,内容一致仅命名不同),仍未解决随机化问题
  3. 尝试用$condsFile替代文件路径也未成功
  4. 不清楚如何在Builder中将SOA水平整合到Excel中

一、实现区块随机化的正确步骤(针对PsychoPy 2020.1.3)

你之前的思路方向是对的,只是可能在循环设置的细节上没踩对,按以下步骤来就能搞定:

  1. 准备区块索引文件
    • 新建一个Excel文件(比如命名为block_order.xlsx),只需要一列,列名设为block_file,每行填入对应区块的Excel文件名(比如AV500ms.xlsxVA750ms.xlsx,把7个SOA条件的文件名都列进去)
  2. 搭建外层随机循环
    • 在Builder界面最外层添加一个Loop组件,命名为block_loop
    • 关键设置:在Loop Type里选择Random(这是你之前可能漏掉的核心选项)
    • Conditions模块中选择你刚创建的block_order.xlsx
  3. 关联内层任务与外层变量
    • 找到你已经做好试次随机化的内层Loop组件
    • 把它的Conditions路径替换为变量引用:$block_file(确保Excel里的文件名和实际文件路径完全匹配,文件都放在实验文件夹根目录的话直接写文件名就行)
  4. 快速验证效果
    • 点击工具栏Run旁的小三角,选择Test Loop,就能看到外层循环是否会随机读取不同的区块文件

二、将SOA水平整合到Excel的高效方法

没必要为每个SOA单独建Excel文件,一个主文件就能覆盖所有条件,操作更简洁:

  1. 改造主试次Excel文件
    • 添加两列:
      • 列名SOA:每行填入对应的SOA数值(比如750-7500,不带ms后缀,后续用代码处理)
      • 列名stim_order:区分刺激呈现顺序(比如VA代表视觉先听觉后,AV代表听觉先视觉后)
    • 把所有试次的视觉/听觉刺激信息都整合到这个文件里
  2. 在Builder中控制SOA间隔
    • 在视觉和听觉刺激组件之间,添加一个Code组件
    • Begin Routine标签页写入控制代码(以视觉先呈现为例):
      from psychopy import core
      
      # 根据SOA值控制刺激间隔
      if SOA > 0:
          # 视觉先呈现,间隔SOA毫秒后播放听觉刺激
          visual_stim.draw()
          win.flip()
          core.wait(SOA/1000)  # 转换为秒单位
          auditory_stim.play()
      elif SOA < 0:
          # 听觉先呈现,间隔绝对值毫秒后呈现视觉刺激
          auditory_stim.play()
          core.wait(-SOA/1000)
          visual_stim.draw()
          win.flip()
      else:
          # SOA=0,同时呈现两种刺激
          visual_stim.draw()
          auditory_stim.play()
          win.flip()
      
  3. 简化循环设置
    • 现在只需要一个外层循环读取这个主Excel文件,就能自动根据SOAstim_order控制刺激呈现,同时轻松实现试次和SOA条件的随机化

额外注意事项(针对2020.1.3版本)

  • 确保所有Excel文件和你的.psyexp实验文件在同一个文件夹下,避免路径错误
  • 用变量引用文件名时,要保证Excel里的文件名和实际文件名完全一致(包括大小写,Win10虽然不区分,但PsychoPy偶尔会敏感)
  • 测试时可以先只放2-3个区块,快速验证随机化是否生效,再扩展到7个完整区块

内容的提问来源于stack exchange,提问作者OSH

火山引擎 最新活动