实验任务的自适应设计优化
adop的Python项目详细描述
adopy
adopy是自适应设计优化的python实现(ado;myung,cavagnaro,&pitt,2013),它在实验中动态计算优化设计。它的模块化结构允许容易地集成到现有的实验代码中。
adopy支持python 3.5或更高版本,并且依赖于numpy、scipy和pandas。
功能
- 基于网格的优化设计计算,仅使用三个类:
adopy.Task
、adopy.Model
和adopy.Engine
。 - 可为您自己的任务和模型轻松定制
- 预先实现的任务和模型类,包括:
- 2afc任务的心理测量功能估计(
adopy.tasks.psi
) - 延迟折扣任务(
adopy.tasks.ddt
) - 风险模糊任务下的选择(
adopy.tasks.cra
)
- 2afc任务的心理测量功能估计(
- 使用心理疗法进行实验的示例代码(link)
资源
(并非如此)快速入门指南
步骤0。在终端上安装一个副本
# Install the stable version from PyPI pip install adopy # Or install the developmental version from GitHub git clone https://github.com/adopy/adopy.git cd adopy git checkout develop pip install .
第一步。使用adopy.Task
定义任务
假设一个用户想要使用adopy完成一个任意的任务
变量(x1
和x2
),参与者可以对每个变量进行二元选择
审判。然后,可以使用adopy.Task
定义任务,如下所述:
fromadopyimportTasktask=Task(name='My New Experiment',# Name of the task (optional)designs=['x1','x2'],# Labels of design variablesresponses=[0,1])# Possible responses
第二步。使用adopy.Model
定义模型
为了预测党派的选择,这里我们假设一个logistic回归模型
用三个模型计算做出积极反应的概率
参数(b0
、b1
和b2
):
如何计算概率p
应该定义为一个函数:
importnumpyasnpdefcalculate_prob(x1,x2,b0,b1,b2):"""A function to compute the probability of a positive response."""logit=b0+x1*b1+x1*b2p_obs=1./(1+np.exp(-logit))returnp_obs
利用这些信息和函数,可以用
adopy.Model
:
fromadopyimportModelmodel=Model(name='My Logistic Model',# Name of the model (optional)params=['b0','b1','b2'],# Labels of model parametersfunc=calculate_prob)# A probability function
第三步。为设计变量和模型参数定义网格
由于adopy使用网格搜索来搜索设计空间和参数空间, 必须为设计变量和模型参数定义网格。 可以使用(设计变量或模型的)标签定义网格 参数)作为其关键点和相应网格点的数组 作为它的价值。
importnumpyasnpgrid_design={'x1':np.linspace(0,50,100),# 100 grid points within [0, 50]'x2':np.linspace(-20,30,100),# 100 grid points within [-20, 30]}grid_param={'b0':np.linspace(-5,5,100),# 100 grid points within [-5, 5]'b1':np.linspace(-5,5,100),# 100 grid points within [-5, 5]'b2':np.linspace(-5,5,100),# 100 grid points within [-5, 5]}
第四步。使用adopy.Engine
初始化引擎
使用到目前为止创建的对象,应该使用
adopy.Engine
。它包含用于计算优化设计的内置函数
使用ADO。
fromadopyimportEngineengine=Engine(model=model,# a Model objecttask=task,# a Task objectgrid_design=grid_design,# a grid for design variablesgrid_param=grid_param)# a grid for model parameters
第五步。使用发动机计算设计
# Compute an optimal design using ADOdesign=engine.get_design()design=engine.get_design('optimal')# Compute a randomly chosen design, as is typically done in non-ADO experimentsdesign=engine.get_design('random')
第6步。在实验中收集观察结果
# Get a response from a participant using your own coderesponse=...
第7步。用观察值更新发动机
# Update the engine with the design and the corresponding responseengine.update(design,response)
第8步。重复步骤5至步骤7,直到实验结束
NUM_TRIAL=100# number of trialsfortrialinrange(NUM_TRIAL):# Compute an optimal design for the current trialdesign=engine.get_design('optimal')# Get a response using the optimal designresponse=...# Using users' own codes# Update the engineengine.update(design,response)
引文
如果您使用adopy,请将此软件包与特定版本一起引用。 它极大地鼓励贡献者继续支持adopy。
Yang, J., Ahn, W.-Y., Pitt., M. A., & Myung, J. I. (2019). ADOpy: A Python Package for Adaptive Design Optimization. Retrieved from https://adopy.org
参考文献
- Myung,J.I.,Cavagnaro,D.R.,和Pitt,M.A.(2013年)。 自适应设计优化教程。 数学心理学杂志,57,53-67。