☰
E-prime实验设计入门:从零搭建第一个可用实验流程
2026/10/18 15:03:22 网站建设 项目流程

简介:这份资源是E-prime系列课程的第五讲配套样例包,面向心理学、认知神经科学等方向需要开展计算机化行为实验的研究生与科研人员,帮助解决实验设计从理论到落地的实操难题。E-Prime由卡内基梅隆大学与PST公司联合开发,是行为实验生成的主流工具,而本包聚焦实验设计中的常用技术,覆盖移动窗口、多字符反应、随机方位设计、同种材料不连续呈现、鼠标选择、lnLine刺激反应时记录、N-back工作记忆及双任务等典型范式。压缩包共46个文件,约4.2MB,包含es3与ebs3实验源文件、edat3数据文件、wndpos窗口位置文件、xml与xsl报告模板、txt说明及jpg示例图片,结构完整可直接运行参考。已有623人学习下载,读者可借此掌握各范式的搭建思路、参数设置与数据记录方式,快速迁移到自己的实验程序中。

1. 零基础也能上手:E-prime 实验设计到底是个什么东西

如果你刚进实验室,导师丢给你一句“把刺激呈现时间改成 200 毫秒,再记录一下被试的按键反应”,你打开 E-prime 发现满屏都是控件和属性框,完全不知道从哪下手——别慌,这几乎是每个新手都会经历的阶段。E-prime 本质上是一个“实验流程搭建工具”,它让你不用写复杂的底层代码,就能把“屏幕上先出现一个十字 → 接着呈现一张图片 → 被试按键 → 记录反应时和正确率”这样的流程像搭积木一样拼出来。它最擅长的是心理学、认知神经科学里常见的反应时实验、启动实验、情绪评定这类需要精确控制时间、随机呈现材料、记录按键行为的研究。你不需要先成为程序员,但你需要理解“实验逻辑”本身——而这恰恰是这份《E-prime 系列课程 5:实验设计常用技术》样例资源要帮你跨过去的那道坎。它不跟你讲玄学,而是把最常用的几种设计套路拆开,让你照着改就能跑通自己的第一个实验。

2. 为什么新手先学“常用技术”:绕开底层,直接搭出能跑的流程

2.1 从“能跑”到“跑对”:先解决 80% 的重复劳动

很多新手一上来就想搞懂 E-prime 的每一个按钮,结果卡在“Inline 脚本怎么写”“List 怎么嵌套”上,三天过去连一个试次都没跑起来。其实你真正需要的是先掌握几种高频场景的固定解法:比如怎么让图片随机呈现、怎么设置按键反应窗口、怎么把正确率和反应时自动写进数据文件。这些“常用技术”就像做菜时的预制菜包——你不需要从种菜开始,先学会加热和摆盘,就能端出一盘能吃的菜。这份资源里的样例,正是把这类高频操作做成了可复用的模板。你打开一个样例,改改图片路径、改改时间参数,就能得到自己的实验。这种“先跑通再优化”的路径,比从头啃手册要快得多,也更能让你建立信心。

2.2 先理解“结构”,再纠结“语法”

E-prime 的实验结构其实很固定:一个 Session 下面挂多个 Block,Block 里放多个 Trial,Trial 里再分阶段控制刺激和反应。新手最容易犯的错,是把注意力全放在“这个控件叫什么名字”上,而忽略了“这个控件在流程里处于哪个位置”。举个例子,你想让被试先看 500 毫秒的注视点,再听声音,然后按键——这其实是三个先后发生的阶段,分别对应三个控件。如果你不理解这个顺序,就算把每个控件的属性都背下来,也拼不出正确的流程。所以入门阶段,建议你先在纸上画出“时间轴”:从试次开始到结束,屏幕上依次出现什么、被试做什么、你记录什么。画清楚了,再去 E-prime 里找对应的控件,你会发现一切都变得有章可循。

2.3 第一个能跑的样例:从“注视点 + 图片 + 按键”开始

下面这个流程是很多实验的骨架,你可以在 E-prime 里新建一个空白实验,然后按步骤拖控件。我把它拆成最小可运行版本,你跟着做一遍,就能理解 E-prime 的基本操作逻辑。

实验结构(在 E-prime 的 Structure 视图里依次添加): 1. Fixation(TextDisplay):呈现“+”,持续时间 500ms 2. TargetImage(ImageDisplay):呈现一张图片,持续时间 200ms 3. Response(KeyboardInput):等待被试按 F 或 J 键,超时 2000ms 4. Feedback(TextDisplay):根据按键正确与否显示“正确”或“错误”,500ms

对应的操作步骤:

  1. 打开 E-prime,新建一个 Experiment,在 Session 下拖入一个 Block。
  2. 在 Block 下拖入一个 Trial,双击 Trial 进入流程视图。
  3. 从左侧工具栏拖一个 TextDisplay 到 Trial 里,命名为 Fixation,在属性里把 Duration 改成 500,Text 写“+”。
  4. 再拖一个 ImageDisplay,命名为 TargetImage,Duration 设为 200,在 Filename 里选择你的图片文件。
  5. 拖一个 KeyboardInput,命名为 Response,在 Duration 里填 2000,在 Allowable 里填“fj”(表示只接受 F 和 J 键)。
  6. 最后拖一个 TextDisplay,命名为 Feedback,Duration 设为 500,Text 里写“正确”或“错误”——这里先手动写死,后面再用 List 做条件分支。
  7. 点击运行,你会看到屏幕依次出现十字、图片,然后等你按键,最后出现反馈。

这个例子里,Duration的单位是毫秒,Allowable里的字母不区分大小写,但建议统一用小写。KeyboardInput的Duration是超时时间,如果被试一直不按,实验会继续往下走,并把反应时记为 0 或缺失值。你第一次跑的时候,可能会发现图片没显示出来——多半是路径里有中文或空格,E-prime 对文件名比较挑剔,建议把图片放在全英文路径下。跑通这个流程后,你就已经掌握了 E-prime 最核心的“呈现-反应-记录”循环,剩下的复杂设计都是在这个骨架上加东西。

3. 避坑指南:新手最容易翻车的 5 个地方

3.1 现象:数据文件里全是 0 或空值

原因:KeyboardInput控件的Duration设得太短,或者Allowable里没写对按键字母,导致被试按了但没被记录。 解决:把Duration至少设为 2000 毫秒,并确认Allowable里包含了你要求被试按的所有键。另外,检查KeyboardInput是否被正确放在了 Trial 的流程里,而不是被误拖到了 Block 外面。

3.2 现象:图片呈现时间忽长忽短,不是设定的 200 毫秒

原因:E-prime 的计时精度受显示器刷新率影响,如果你设的 200 毫秒不是刷新周期的整数倍,实际呈现时间会有波动。 解决:先查一下显示器的刷新率(比如 60Hz,即每帧约 16.7 毫秒),然后把 Duration 设成 16.7 的整数倍,比如 200 毫秒接近 12 帧(200.4 毫秒),这样时间更准。如果实验对时间精度要求极高,建议用 CRT 显示器或高刷新率屏幕,并在方法部分报告实际刷新率。

3.3 现象:List 里的条件没有随机,每次跑顺序都一样

原因:List 控件的Order属性默认是Sequential,需要手动改成Random。 解决:双击 List,在属性窗口找到Order下拉菜单,选Random。如果你想让每个被试看到的顺序都不同,还要在 Experiment 对象的Devices里添加一个Clock或SessionProc级别的随机种子设置——不过对新手来说,先确保 List 本身是随机顺序就够了。

3.4 现象:实验跑到一半报错“File not found”

原因:图片或声音文件的路径变了,或者你换了电脑,原来的绝对路径失效。 解决:把所有材料放在实验文件(.es2)同一个文件夹下的子文件夹里,然后在控件里用相对路径引用,比如images\face01.jpg。这样整个文件夹拷到别的电脑也能跑。另外,文件名不要用中文、空格和特殊符号,用英文和下划线最稳妥。

3.5 现象:被试按键后没有反馈,直接进入下一个试次

原因:Feedback 控件没有和 Response 控件建立关联,或者 Feedback 的Duration设成了 0。 解决:在 Feedback 控件的属性里,找到InputObject或Duration相关设置,确保它引用了正确的 KeyboardInput 对象,并且 Duration 大于 0。如果还是不行,检查 Feedback 是否被放在了 Trial 流程的正确位置——它必须在 Response 之后。

4. 从样例到自己的实验:改三个地方就能跑新设计

4.1 改材料:把图片换成你的刺激

样例里的图片路径是写死的,你要做的第一件事就是把自己的材料整理好。建议在实验文件夹下建三个子文件夹:images、sounds、data。把所有图片转成统一的格式(比如 24 位 BMP 或 PNG),尺寸不要超过屏幕分辨率,文件名用英文加编号,比如stim_001.png。然后在 E-prime 的 ImageDisplay 控件里,把 Filename 指向你的图片。如果你有多个条件,不要一个个手动改,而是用 List 来管理:在 List 里建一列叫ImageFile,把每张图片的路径写进去,然后在 ImageDisplay 的 Filename 属性里填[ImageFile],这样 E-prime 就会自动读取每一行的图片。这个方括号语法是 E-prime 里最常用的“变量引用”,你会在很多地方见到它。

4.2 改时间:让刺激呈现和反应窗口符合你的假设

时间参数是实验设计的核心。样例里注视点 500 毫秒、图片 200 毫秒、反应窗口 2000 毫秒,这只是一个起点。你要根据文献和预实验来调整。比如你想研究“掩蔽效应”,就需要在目标图片后紧接着呈现一个掩蔽刺激,间隔可能只有几十毫秒。这时候你要注意:E-prime 里两个控件之间的间隔默认是 0,但实际会有几毫秒的延迟,所以最好用PreRelease属性来微调。另外,反应窗口不要设得太短,否则被试会因为紧张而漏按;也不要太长,否则他们会走神。一般 1500 到 3000 毫秒是比较舒服的范围。改完时间后,一定要自己跑几遍,感受一下节奏是否自然。

4.3 改记录:把你需要的数据列出来

E-prime 默认会记录很多数据,但有些你需要的变量可能不在默认列表里。比如你想记录被试的按键内容、反应时、正确与否,以及每个试次对应的条件。你可以在 Trial 的属性里找到Data Logging选项卡,把ImageFile、CorrectAnswer这些变量勾选上。更简单的办法是:在 List 里建一列CorrectAnswer,填上每个试次的正确答案(比如 F 或 J),然后在 KeyboardInput 的属性里把CorrectAnswer设为[CorrectAnswer],这样 E-prime 会自动判断对错,并把结果写进数据文件。跑完几个被试后,你打开生成的.edat文件,就能看到每一行的反应时和正确率。如果发现某一列是空的,多半是变量名拼错了,或者没有在 List 里定义。

List 示例(在 List 控件里添加以下列): ImageFile CorrectAnswer stim_001.png f stim_002.png j stim_003.png f ... 然后在 ImageDisplay 的 Filename 里填:[ImageFile] 在 KeyboardInput 的 CorrectAnswer 里填:[CorrectAnswer]

这样设置后,每个试次会随机抽取一行,呈现对应的图片,并按照你设定的正确答案来判断被试按键是否正确。数据文件里会自动多出一列CorrectAnswer和一列Response,以及RT(反应时)。你可以在 Excel 里打开.edat文件(其实是一个制表符分隔的文本文件),用透视表快速算出每个条件的平均反应时和正确率。这一步做完,你就完成了从“跑通样例”到“产出可用数据”的跨越。

5. 下一步学什么:把 E-prime 用顺手的三个习惯

5.1 先画流程图,再打开软件

我刚开始学的时候,总是一边拖控件一边想逻辑,结果经常做到一半发现顺序错了,又得全部重来。后来我强迫自己养成一个习惯:任何新实验,先在纸上或白板上画出时间轴,标清楚每个阶段呈现什么、持续多久、被试做什么、记录什么。画完之后,再打开 E-prime,按照图上的顺序拖控件。这样做的好处是,你永远不会在“这个控件放哪里”上纠结,因为图已经告诉你了。而且画图的过程会逼你想清楚一些细节,比如“反馈是在反应之后立刻出现,还是延迟 500 毫秒”,这些问题在纸上改比在软件里改快得多。

5.2 用 List 管理一切可变因素

新手容易把实验做成“一个条件一个 Trial”,比如有 4 个条件就做 4 个 Trial,然后手动设置每个 Trial 的图片和时间。这样做不是不行,但一旦条件变多,或者你想随机呈现,就会非常痛苦。正确的做法是:把所有可变的东西都放进 List 里,包括图片文件名、呈现时间、正确答案、甚至指导语。然后在控件里用方括号引用这些列名。这样你只需要维护一个表格,就能控制整个实验。而且 List 支持嵌套,你可以做一个“外层 List”控制 Block 顺序,里面再套“内层 List”控制 Trial 顺序。这个技巧在样例里可能没有展开,但它是你从“能跑”到“跑得优雅”的关键一步。

5.3 每次改完参数,先自己当被试跑三遍

这是我踩过最多次的坑:改了一个时间参数,觉得没问题就直接叫被试来跑,结果被试做到一半发现图片闪得太快根本看不清,或者按键后要等很久才出现下一个试次。后来我给自己定了个规矩:任何参数改动后,至少自己完整跑三遍,并且故意按错几次,看看反馈和数据记录是否正常。三遍下来,你不仅能发现明显的 bug,还能感受到实验的节奏是否舒服。如果自己都觉得别扭,被试肯定更难受。这个习惯看起来笨,但能帮你省下大量返工的时间。

5.4 一个具体技巧:用 Inline 脚本做条件分支

当你熟悉了基本控件后,可以尝试用 Inline 脚本实现更灵活的逻辑。比如你想让被试只有在按对的情况下才进入下一个阶段,按错就重复当前试次。这用纯控件很难实现,但几行脚本就能搞定。下面是一个简单的例子:

' 在 Trial 的 AfterResponse 阶段插入 Inline 脚本 If Response.RT > 0 And Response.RESP = CorrectAnswer Then ' 按对了,继续 Trial.RunNextTrial Else ' 按错了或超时,重复当前试次 Trial.RunCurrentTrial End If

这段脚本的意思是:如果被试在反应窗口内按键,并且按的键等于正确答案,就进入下一个试次;否则重复当前试次。Response.RT是反应时,Response.RESP是被试按的键,CorrectAnswer是你在 List 里定义的正确答案列。注意,脚本里的变量名要和你在控件属性里设置的一致。刚开始你可能会觉得脚本很吓人,但其实常用的就那几个:If...Then...Else、RunNextTrial、RunCurrentTrial。你不需要成为程序员,只需要会改这几个模板,就能应付大部分实验逻辑。

从那以后我每次设计新实验,都强制自己先画流程图、再用 List 管变量、最后自己跑三遍。这套习惯让我少熬了很多夜,也少挨了很多被试的抱怨。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询