主题
1.5 实验程序工具
本节目标
读完本节后,你能根据研究任务、计时精度、设备控制和部署方式选择实验工具,把试次流程写成可检查的规范,并在正式收数前完成计时、随机化、数据与隐私测试。
1.5.1 先写任务规范,再选软件
实验程序负责呈现刺激、接收反应和记录事件,但它不能替你决定操作是否有效、随机化是否合理或数据是否支持因果结论。开始写程序前,先把一个试次写成状态序列:
- 进入条件:练习是否通过、上一试次是否结束;
- 呈现顺序:注视点、刺激、反应窗口、反馈与试次间隔;
- 结束规则:按键、超时、播放结束或达到正确标准;
- 随机化:参与者如何分组,刺激如何抽样、分块与平衡;
- 记录项:实际条件、刺激编号、反应、正确性、反应时和异常事件;
- 排除规则:哪些技术故障或行为模式会触发排除,在哪个层级排除。
工具选择服从任务约束;不要先爱上一个平台,再改研究问题迁就它。
1.5.2 三类常用方案
| 方案 | 更适合 | 主要优势 | 需要承担的成本 |
|---|---|---|---|
| PsychoPy Builder / Coder | 实验室视觉、听觉和键盘任务,需要连接本地设备 | Builder 可视化搭建,Coder 可用 Python 扩展;Builder 中与 PsychoJS 兼容的组件和代码可部署到 Pavlovia | 需要管理软件、显示器和设备环境;并非所有本地组件或自定义 Python 都能转为在线任务 |
| jsPsych | 浏览器内行为任务,需要自建页面或精细控制前端逻辑 | JavaScript 生态,时间线和插件结构清楚,便于与网页系统整合 | 需要前端、托管和服务端数据安全能力;浏览器与设备差异不可消除 |
| Gorilla 等托管平台 | 希望用图形界面快速搭建、招募和部署在线任务 | 托管、流程编排和团队协作集中 | 费用、功能、数据位置与导出格式依服务条款变化,复杂定制可能受限 |
如果主要是问卷、跳转与量表计分,合规的问卷平台通常更直接;若要控制帧级视觉刺激、音频同步或外设触发,应优先评估本地实验软件和硬件。所谓“在线版”不是本地实验的无损搬运:设备、浏览器、网络和参与者环境都变了。PsychoPy Builder 转为在线任务前,应先按官方兼容性清单检查组件和自定义代码。
jsPsych 默认把试次数据保存在当前浏览器的内存中;关闭页面后不会自动留存。正式部署必须按官方数据文档接入经过安全检查的文件或数据库方案,或使用负责持久化的托管平台。
本页官方文档入口核查于 2026-08-19;核查时 PsychoPy 为 2026.2.2,jsPsych 为 8.3.0,页面链接指向 jsPsych 8.x 文档。软件版本、托管价格和浏览器支持会变化,立项时应把实际版本写进研究记录。
1.5.3 把研究设计翻译成程序结构
程序里至少有三个层级,分析时不要混在一起:
| 层级 | 典型字段 | 用途 |
|---|---|---|
| 参与者 | participant_id、分组、同意版本、设备摘要 | 连接招募、条件分配与参与者层排除 |
| 区块 | 区块编号、条件顺序、练习 / 正式、材料列表 | 检查平衡、顺序效应和中断位置 |
| 试次 | 刺激编号、实际呈现条件、按键、正确性、反应时、超时 | 重建每次观测并生成分析变量 |
每一行试次数据都应回答“谁在什么版本下看到了哪个刺激,程序实际记录了什么”。保存实际分配结果,不要只保存计划条件;否则随机化或跳转出错后无法追查。
重复试次观测依赖于参与者;若同一材料由多名参与者判断、每名参与者又判断多个材料,参与者与材料通常是交叉因素。后续汇总或建模时,要区分参与者数、试次数和材料数;增加试次不能自动替代增加参与者。相关观测结构可继续查看 实验设计基础 和 多层 / 混合效应模型。
随机化与平衡
- 参与者分组:在参与者层级只分配一次,并将结果与稳定标识一起持久保存;刷新或断线重进不应换组。
- 试次随机化:明确是完全随机、分块随机,还是无放回抽样。
- 顺序平衡:条件顺序可能产生学习、疲劳或携带效应时,使用预先生成的顺序表,并保存顺序编号。
- 刺激抽样:区分实验条件与材料集合;同一刺激不能因文件名错误出现在多个条件。
- 可复核性:保存实验版本、随机化方案和实际顺序。若工具支持可控随机种子,再记录种子及其作用范围。
1.5.4 计时:时间戳不等于真实呈现
程序可以记录“请求呈现”和“收到按键”的时间,但这不保证像素或声音恰在该时刻到达参与者。显示刷新率、浏览器调度、后台任务、键盘、声卡和系统负载都会引入误差。这里的准确度指相对真实时刻的系统偏差,精度指试次间误差的波动。Bridges 等人(2020)的跨程序计时研究说明,两者都会随工具、操作系统、浏览器和硬件环境而变。
因此要把计时主张拆开:
- 反应时:起点和终点分别由什么事件定义?单位与时钟来源是什么?
- 视觉时长:刺激计划显示多久,实际跨了多少刷新帧,是否检测丢帧?
- 音频时长:是发出播放命令的时间,还是经过声卡后的声学起点?
- 跨设备同步:是否需要光电二极管、麦克风或外部触发器做独立测量?
不要承诺未经验证的“毫秒级精确”
浏览器返回带小数的毫秒数,只说明时间戳的表示精细,不说明刺激呈现和输入设备同样准确。对时间敏感的研究,应在目标硬件、浏览器和正式参数上做独立验证,并报告环境与验证方法。
在线任务可以预加载刺激、限制受支持的浏览器、记录窗口失焦和设备信息,并通过预试估计误差分布;这些措施只能降低和描述误差,不能让所有参与者的设备相同。排除阈值应在看正式结果前写入 预注册。
1.5.5 正式收数前的四层测试
最小验收流程
- 逻辑测试:逐个走完条件、跳转、超时、中止和断线分支。
- 数据测试:用明确标注的测试账号完成任务,确认导出后能重建每个试次,缺失值和编码含义唯一。
- 环境测试:在计划支持的系统、浏览器、分辨率和输入设备上运行;时间敏感任务增加外部计时验证。
- 盲测预试:请未参与编程的人按真实说明完成,检查理解、时长、疲劳、技术失败和数据清洗脚本。
每次修复后做回归测试。正式开始前冻结一个带版本号的程序快照、材料清单和导出字段字典;不要直接在正在收数的版本上试改。若必须修改,记录时间、原因、影响范围和新旧版本参与者数量。
1.5.6 部署、隐私与失败恢复
上线前同时确认技术与伦理边界:
- 实验页面与数据传输使用 HTTPS;管理和导出端采用身份验证与最小权限,公开提交端验证输入、限制滥用且不开放读取或管理权限;
- 参与者身份信息与试次数据使用研究编号连接,能分开存储就不要放在同一文件;
- URL、前端代码和浏览器日志中不放密钥、真实姓名或敏感分组;
- 同意页说明设备信息、录音录像、IP 地址等实际收集内容;
- 设计断线重进和重复提交规则,避免同一人刷新后被当成新参与者;
- 每日检查完成率、技术失败和字段异常,但不要边看组间结果边修改排除标准;
- 导出一份原始只读副本,并验证备份能够恢复。
无障碍也属于设计质量。不要只用颜色传递条件;保证字号和对比度可读,键盘操作完整,必要时提供音频替代或明确研究无法适配的原因。任何适配都要评估是否改变待测构念。
资源与工具
PsychoPy
Builder / Python 实验与 Pavlovia 在线部署
→
jsPsych 8
浏览器行为实验的官方文档
→
Gorilla
托管式在线实验搭建与部署
→
Pavlovia
PsychoPy 在线实验托管入口
→
延伸阅读
- de Leeuw, J. R. (2015). jsPsych: A JavaScript library for creating behavioral experiments in a Web browser. Behavior Research Methods, 47(1), 1–12. https://doi.org/10.3758/s13428-014-0458-y
- Peirce, J., Gray, J. R., Simpson, S., MacAskill, M., Höchenberger, R., Sogo, H., Kastman, E., & Lindeløv, J. K. (2019). PsychoPy2: Experiments in behavior made easy. Behavior Research Methods, 51(1), 195–203. https://doi.org/10.3758/s13428-018-01193-y
- Anwyl-Irvine, A. L., Massonnié, J., Flitton, A., Kirkham, N., & Evershed, J. K. (2020). Gorilla in our midst: An online behavioral experiment builder. Behavior Research Methods, 52(1), 388–407. https://doi.org/10.3758/s13428-019-01237-x
- Bridges, D., Pitiot, A., MacAskill, M. R., & Peirce, J. W. (2020). The timing mega-study: Comparing a range of experiment generators, both lab-based and online. PeerJ, 8, e9414. https://doi.org/10.7717/peerj.9414