
简介面向心理学与行为研究者的E-Prime实验设计进阶资源覆盖移动窗口、随机方位、N-back、双任务、鼠标选择、多字符反应、同种材料不连续呈现以及Inline语句反应时记录等典型实验范式。压缩包共46个文件约4.2MB内含可运行的实验程序es3/ebs3、结果数据文件edat3、窗口位置配置wndpos以及自动生成的报告与日志xml/txt并配有示例图片和xsl样式表便于直接加载运行与解析输出。已有621人学习下载适合从入门到中级的E-Prime使用者对照完整工程文件理解各常用技术的设计框架与参数设置逻辑快速迁移到自身研究课题中。资源按实验技术模块组织每个模块均提供工程文件、数据与报告可显著减少环境配置和脚本调试的时间成本是开展行为实验设计时值得备查的样例集。1. 这套E-Prime课程到底在解决什么问题做过行为实验的人几乎都经历过这种时刻实验设计在纸面上完美无缺刺激材料反复打磨被试也招募到位了结果一进实验室程序要么报错弹窗、要么时间精度跑偏、要么数据存得七零八落。这时候你才发现真正卡住你的不是实验设计本身而是E-Prime这个工具到底怎么驾驭。我接触E-Prime这么多年带过不少学生也帮人排查过无数个实验程序最大的感受是E-Prime入门不难难的是把实验设计里的“常用技术”吃透。很多人的学习路径是东抄一段代码、西问一个同学程序能跑就把问题抛在脑后结果换一个实验范式、加一个条件变量又得从头折腾。这套“E-Prime系列课程5”里打包的样例核心就是把这些高频的、反复用到的实验设计技术集中拆开讲清楚配合zip里的完整程序样例让你不是只会“照着改”而是真正理解E-Prime的运作逻辑。这套课程和样例适合谁说实话从本科生到博士、从心理学到认知神经科学领域只要你的研究需要用到精确的刺激呈现和时间记录它都适用。尤其是那些刚完成入门、正准备做正式实验却不知从何下手的人这套内容能帮你少走好几个月的弯路。2. 实验设计前必须想清楚的几个底层问题2.1 时间精度是E-Prime的命根子心理学实验里时间不是“大概准”就行。一个刺激呈现300ms还是350ms一个注视点出现500ms还是550ms直接关系到你采集到的反应时数据有没有效、能不能解释你的假设。E-Prime之所以在行为实验中地位稳固核心原因就是它能把刺激呈现和反应记录的精度控制在毫秒级别前提是你得用对方法而不是简单拖几个控件就完事了。从技术上来说E-Prime是通过与操作系统底层的时间接口配合配合显示设备的刷新周期来计算刺激的实际呈现时间。这里有一个概念你得刻在脑子里logical timing和real timing的差别。你在程序里设置的Duration只是“逻辑时间”而刺激真正出现在屏幕上那一刻、以及屏幕真正完成刷新那一刻才是“真实时间”。如果你不检查、不校准两者之间的偏差积累下来足以毁掉一个实验。我在用E-Prime做实验时默认都会做一个动作在每个关键刺激前插入一个极短时间的事件比如10ms用OnsetTime来记录刺激实际开始呈现的时间。还有一个高频操作是打开“Refresh Timer”相关的设置让刺激出现的时刻与显示器刷新周期对齐。很多新手的程序跑起来后时间精度不好甚至出现刺激跳帧、闪烁的情况恰恰是因为忽略了这一层。2.2 结构先于编程你的实验流程画清楚了吗另一个我反复强调的问题是E-Prime的编程本质上是在“翻译”你的实验流程而不是让你边编边想流程。如果流程没想清楚程序写出来一定是到处打补丁。举个例子很多新手拿到任务就直接打开E-Prime开始拖控件结果做到一半发现中间少了一个指导语页面或者变量顺序不对又回头疯狂修改。这种习惯非常消耗士气。正确的做法是动手编程前先把整个实验流程用流程图或文字逐帧写出来——从指导语、练习、正式实验每个试次的内部顺序、n-back里每个block的结束反馈到最终的结束语全部列清楚再开始搭程序。这个“先流程后编程”的思路也是我在看那套“实验设计常用技术”样例时最欣赏的地方。样例程序的命名、层级结构、变量放置方式都透露出设计者一开始就有清晰的全局观。你打开样例应该先看它的Session Procedure和List结构感受它是如何组织一个完整实验的这比直接看单个控件设置要有价值得多。3. 常用技术拆解从控件到核心机制3.1 三个控件就够用不你还差一个万能的SlideE-Prime的工具箱里控件一大堆什么TextDisplay、ImageDisplay、Fixation、SoundOut、Keyboard等但其实你仔细看就会发现它们大多是对少数几个基础控件的“预包装”。真正用得最多、最灵活的其实是Sample里反复出现的三个List试次列表、Slide复合刺激页面和InLine内嵌代码。很多人第一反应是用TextDisplay放指导语用ImageDisplay放刺激图用Fixation放注视点。这个思路没错但一旦你的试次设计要求在同一屏上同时呈现多个刺激——比如经典的Stroop任务需要在色块上叠汉字或者注意线索任务需要在中央注视点旁边同时出现提示箭头——单一的TextDisplay或ImageDisplay就不够用了。这时候你就得用Slide。Slide的核心价值在于它可以在一个页面里容纳多个对象而且每个对象都可以单独设置出现和消失的时间、位置、大小这种精细控制在E-Prime里属于比较核心的进阶能力。我常用的一个技巧是在Slide里把注视点和刺激放在同一个页面上让注视点在0ms出现刺激在500ms后叠加或替换——这样做的好处是两个事件之间没有页面切换的空白时间连续性更好数据的Onset标记也更干净。3.2 List是你整个实验的“总调度”List控件也许是E-Prime里最容易被低估的一个。有人觉得它就是一个放刺激材料的表格随便填就行但实际上List的层次结构和随机化机制决定了你整个实验的平衡和效率。高阶用法里有个特别实用但很多人不知道的技术嵌套List。简单说你可以在一个List里调用另一个List让主List管“条件组合”子List管“具体刺激材料”。例如你做一个2×3的实验设计就可以在外层List里放6个条件组合的循环内层List放每个组合下的20个具体试次。这种设计不仅让程序结构一目了然更重要的是方便你后期单独调整某个条件下的刺激材料而不用动到整个程序。另一个和List绑定紧密的技术是随机化。E-Prime的List支持多种随机模式比如不带限制的完全随机、带替换随机、或用seed控制随机种子等。但真正的平衡设计常用的方法是“分层随机固定间隔”先按条件分组在组内随机再确保每个条件下的试次数一致。这些都是可以通过List属性面板轻松实现的前提是你知道去哪里设置。3.3 精准触发从行为实验到脑电、近红外实验的同步打标如果你做的实验不只是按键反应还要同时采集脑电或近红外信号那“同步触发”就是一门绕不开的技术。E-Prime实验设计里的一个高频需求是在某个刺激出现的精确时刻向外部设备发送一个标记信号trigger让后端的脑电数据知道“此刻被试看到了什么”。实现这个最常用、最可靠的方式是在事件对象里加一个Port Output或者在InLine里用WritePort命令手动控制并口发送特定数值的触发信号。用InLine的方式更灵活因为你可以根据当前试次的条件变量动态计算要发送的触发编码比如条件A发1条件B发2而不是每个试次都要手动配置。这里有个特别值得注意的点触发命令的发送位置要放在OnsetTime之后、刺激呈现的同一帧内确保触发的发生和视觉刺激的出现尽可能同步。如果触发信号发得太早或太晚脑电数据里的标记和真实刺激时间就会出现偏移后续分析时你还得手动校正非常麻烦。实操中我习惯在关键的刺激事件前一行放一个短延时或随附的Wait让端口写入和屏幕刷新尽量对齐。4. 实操过程从零搭一个标准试次还需要几步4.1 事件的顺序与精细时间轴设计搭试次程序的时候最常见的模板是Fixation → Cue或Stimulus → Response界面 → 反馈或空白间隔 → 下一个试次。在E-Prime的Session Procedure里你要把这些事件按顺序拖进去然后在每个事件里配置属性和时间参数。以我经常用的一个简单2-选择反应时任务为例程序结构是这样Fixation800ms→ Slide呈现提示箭头持续200ms→ ImageDisplay呈现目标刺激等待反应或2000ms超时→ TextDisplay空屏或反馈800ms→ List进入下一个试次每个板块的时间参数我习惯列一个表模块设置值作用与说明FixationDuration800ms给被试一个稳定的视觉锚点Slide提示Duration200msPreRelease200ms短提示PreRelease可减少页面切换延迟ImageDisplay目标Time Limit2000msMaxRT2000ms超时自动结束并记录无响应空屏/反馈Duration800ms试次间隔防数据的连续触发重叠PreRelease这里是很多人会忽略的细节。它允许你的刺激在下一次屏幕刷新开始前提前释放资源对维持时间线的连贯性很有帮助。尤其当你用到大量图片或声音刺激时PreRelease能明显减少刺激呈现前的卡顿实测下来稳定性和流畅感都会上升。4.2 写一个小段的InLine代码来收集数据很多标准实验需求通过属性面板就能完成但一些特殊逻辑还是需要InLine。比如你想根据被试在上一试次的反应正误动态调整当前试次的呈现时间或进入不同的反馈分支这就必须写代码。我经常会给学生看一个最简单的InLine代码示例作用是根据反应正确性给变量赋值if Target.ACC 1 then c.SetAttrib TrialResult, 正确 elseif Target.ACC 0 then c.SetAttrib TrialResult, 错误 else c.SetAttrib TrialResult, 超时 end if这段代码的意思是读取当前试次里名为“Target”的刺激事件的ACC属性正确为1错误为0把结果文字存到变量“TrialResult”里后续可以用于反馈或数据分析。虽然看起来很简单但它展示了E-Prime的数据记录机制每个刺激对象都自带RT、ACC等属性你的核心工作不过是怎么把这些属性组合成你需要的变量。另外还有一个细节如果你有多个刺激对象想合并它们的反应时间或者是希望判断“任意一个刺激上的按键反应”就要考虑设置Input Masks或使用联合判断的代码逻辑不要天真地在每个对象上单独设键盘响应很容易造成同一反应被重复记录或记录不到。4.3 数据记录与导出edat文件的隐藏信息量实验跑完之后E-Prime默认会给每个被试生成一个edat文件。很多新手会把edat文件一交了事但其实edat文件里有大量隐藏信息值得你一一确认。我正在用的排查方式是实验结束后马上打开edat文件用E-DataAid查看每个关键变量的记录是否完整。重点看四个东西一是OnsetTime和OffsetTime有没有异常值比如跟设置值差了很多二是ACC和RT字段有没有空值或不合理值三是变量列名的命名有没有冲突或拼写错误四是总试次数是否符合预期。如果在edat文件里发现某个试次的OnsetTime比实际刺激出现时间晚了几十毫秒甚至更多那说明你的事件设置有问题需要回到程序里调PreRelease或者检查是否有太多大体积刺激同时加载。如果你的实验是多被试收集数据建议用E-Merge把多个edat文件合并成一个sav或csv方便后续导入SPSS、R或Python做统计分析。合并前检查一下每个文件的变量列是否一致这种小细节能在数据预处理阶段帮你省掉大把时间。5. 常见问题与排查技巧实录5.1 刺激画面闪烁、跳帧怎么办这是我在支持同学做实验时被问得最多的问题之一。刺激一闪一闪或者本该连续显示的页面之间出现了明显的断裂感这个问题的根源绝大多数是时间控制没做好。解决思路按这个顺序排查第一步检查所有事件是否都有合理的PreRelease第二步看图片素材的体积E-Prime在每次呈现大尺寸或高分辨率图片时都会有加载负担尽量统一用压缩过的bmp或png格式第三步检查显示器的刷新率设置建议把刷新率固定在60Hz因为这个数值下E-Prime的时间调度最稳定。实测下来大部分闪烁问题在优化前两步后就能缓解七八成。5.2 反应收集不完整或漏记数据文件里频繁出现某些试次没有反应时有时候不是被试没按键而是你的“Input Object”设计有问题。比如你在一个ImageDisplay上设置了键盘响应但又被Slide上一个隐藏对象抢先阻止了输入或者Input的Device设置成了鼠标却要求被试按键盘都会导致“明明按了却没记录”的现象。我习惯在正式实验前跑一个“假被试”的快速自测把每个试次的所有可能按键方式都按一遍看edat文件里的记录是否完整。这个方法虽然土但非常管用。5.3 程序报错E-Prime错误提示其实并不难懂E-Prime的报错弹窗看起来很吓人一屏英文加一串编号但真正经常遇到的就那几类变量名不存在的“Undefined variable”、对象引用错误的“Run-time error”、以及List文件路径丢失导致的“File not found”。应对报错我的建议是把错误信息截图然后只看两个信息一个是错误类型关键词一个是出错行号。大多数情况下error message里会直接告诉你是哪一行代码或哪个对象出了问题。逐个排查的效率远比你从头到尾读一遍程序要高。5.4 练习阶段和正式阶段数据混在一起如果你设计里包含练习试次你一定不希望练习阶段的数据混入最终统计。这个问题的解决办法其实非常优雅在List的退出条件或者InLine代码里设置一个变量比如“PracticeFlag”练习阶段赋值为1正式阶段赋值为0然后在数据分析时用这个变量筛掉练习数据就行。还可以在程序的练习结束节点插入一个条件判断的InLine自动跳过练习或根据被试正确率决定是否进入正式实验实现一个简单的自适应筛选逻辑。这种设计在Stroop、Flanker这些需要“掌握度达标才能进入正式实验”的任务里非常实用。6. 我的实操心得与最后一个小技巧做了这么多年实验编程我逐渐意识到一个事实E-Prime本身只是个工具决定实验质量的始终是你对实验流程和时间精度的理解深度。不要沉迷于堆砌复杂代码把基础控件的用法吃透、把时间轴的逻辑理顺就已经能应对绝大多数行为实验的需求了。最后再分享一个小技巧虽然不起眼但非常实用在正式实验前的每个阶段末尾插入一个简短的“请按任意键继续”的提示页面并在开始时加一个确认被试编号的输入页面。这两个细节能避免至少一半的人为失误——被试坐错位置、忘记输入被试号、或者中途手误跳过关键指导语都是真实发生过的悲剧。无论你是刚接触E-Prime还是已经有一定基础把这套实验设计常用技术里的逻辑真正消化掉你会发现自己做实验的“翻车率”直线下降程序也能在一次调试后稳定跑完整个数据收集周期。本文还有配套的精品资源点击获取