1. 延迟折扣任务(DDT)概述
延迟折扣任务(Delay Discounting Task,简称DDT)是心理学和行为经济学中常用的实验范式,用于测量个体对即时奖励和延迟奖励的偏好程度。简单来说,就是研究人们在"现在拿小钱"和"以后拿大钱"之间如何做出选择。
这个任务最早由经济学家提出,后来被广泛应用于成瘾研究、冲动性测量、决策障碍评估等领域。比如我们会发现,烟瘾患者往往更倾向于选择即时的小奖励而非延迟的大奖励,这种"折扣率"偏高的情况与他们的成瘾行为高度相关。
PsychoPy作为一款开源的心理学实验构建工具,因其跨平台特性和可视化编程界面,成为实现DDT的理想选择。而鲲码园作为国内知名的实验程序分享平台,汇集了大量PsychoPy实现的经典实验范式。
2. 实验设计原理
2.1 核心参数设置
一个标准的DDT实验包含几个关键参数:
- 即时奖励金额(通常固定为某个小值,如100元)
- 延迟奖励金额(按一定比例递增,如110元、120元等)
- 延迟时间(如1天、1周、1个月等)
- 试次数量(通常每个延迟时间对应多个金额组合)
这些参数的设置直接影响实验的敏感度和数据质量。根据我的经验,建议:
- 延迟时间采用对数间隔(如1天、3天、1周、2周、1月、3月、6月、1年)
- 延迟奖励金额采用等比递增(如即时奖励的1.1倍、1.2倍...2倍)
- 每个组合重复3-5次以增加可靠性
2.2 心理测量学考量
设计DDT时需要特别注意几个心理测量学指标:
- 一致性检验:被试的选择应该大体符合单调性(如果A>B,那么在所有情况下都应选择A)
- 折扣率计算:通常采用双曲线折扣模型V=A/(1+kD),其中k就是我们要测量的折扣率
- 数据有效性:需要设置注意力检查项(如明显的选择偏好)来筛选有效数据
3. PsychoPy实现详解
3.1 实验界面构建
使用PsychoPy Builder视图可以快速搭建DDT界面。主要包含以下组件:
- 指导语界面:清晰说明任务规则
- 选择界面:并排显示两个选项(左:即时奖励;右:延迟奖励)
- 反馈界面:显示选择结果(可选)
- 结束界面:感谢语
关键技巧:
- 使用"ImageStim"组件显示选项框
- 用"TextStim"动态显示金额和时间
- 通过"RatingScale"组件记录选择
3.2 实验逻辑编程
在PsychoPy的Code组件中,我们需要实现以下逻辑:
python复制# 参数初始化
immediate_amount = 100
delayed_amounts = [110, 120, 150, 200]
delays = [1, 7, 30, 365] # 天为单位
# 试次循环
for delay in delays:
for amount in delayed_amounts:
# 显示选择界面
show_options(immediate_amount, amount, delay)
# 记录选择
choice = record_response()
# 存储数据
save_data(choice, immediate_amount, amount, delay)
3.3 数据记录方案
建议采用两种数据存储方式:
- CSV文件:记录原始选择数据
- Excel文件:汇总计算后的指标
关键字段应包括:
- 被试ID
- 试次编号
- 即时奖励金额
- 延迟奖励金额
- 延迟时间
- 选择结果(0=即时,1=延迟)
- 反应时
4. 进阶优化技巧
4.1 自适应参数调整
传统DDT的缺点是耗时较长。我们可以实现自适应算法:
- 开始时使用较大的金额步长
- 根据被试的选择动态调整
- 快速收敛到无差别点(indifference point)
python复制def adaptive_adjustment(previous_choices):
# 基于之前的选择调整参数
if sum(previous_choices[-3:]) == 3: # 连续3次选择延迟
next_amount = current_amount * 0.9 # 降低金额
elif sum(previous_choices[-3:]) == 0: # 连续3次选择即时
next_amount = current_amount * 1.1 # 提高金额
else:
next_amount = current_amount
return next_amount
4.2 可视化增强
提升实验体验的几个技巧:
- 添加倒计时动画显示延迟时间
- 使用颜色区分不同延迟(如红色=短期,蓝色=长期)
- 在选项上添加货币图标增强真实感
5. 数据分析方法
5.1 折扣率计算
使用SciPy进行曲线拟合:
python复制from scipy.optimize import curve_fit
def hyperbolic(x, k):
return 1 / (1 + k * x)
# x是延迟时间,y是选择无差别点(延迟金额/即时金额)
popt, pcov = curve_fit(hyperbolic, xdata, ydata)
k = popt[0] # 这就是折扣率
5.2 数据质量控制
需要检查的几个指标:
- 一致性:选择是否符合单调性
- 稳定性:重复试次的选择是否一致
- 注意力:是否认真完成所有试次
建议排除标准:
- 一致性<70%
- 反应时<300ms的试次>20%
- 完成时间过短(<平均时间的50%)
6. 常见问题解决
6.1 程序崩溃问题
常见原因及解决方案:
- 中文路径问题 → 改用全英文路径
- 显卡兼容问题 → 关闭硬件加速
- Python包冲突 → 使用PsychoPy专用环境
6.2 数据丢失问题
预防措施:
- 实时保存到两个不同位置
- 每5个试次自动备份一次
- 添加异常捕获机制
python复制try:
run_experiment()
except Exception as e:
save_emergency_data()
log_error(e)
6.3 被试理解困难
优化方案:
- 添加练习试次
- 提供示例说明
- 简化指导语
- 添加进度提示
7. 应用场景扩展
除了传统的心理学研究,DDT还可以应用于:
- 消费者行为研究:产品折扣偏好
- 教育评估:学生对即时奖励和延迟奖励的偏好
- 健康管理:锻炼和饮食选择的长期考量
我在最近一个健康干预项目中,使用改良的DDT测量了参与者对"立即吃零食"和"延迟获得健康奖励"的选择模式,发现这种测量能很好地预测后续的干预效果。
