【发布时间】:2017-11-04 18:31:32
【问题描述】:
我是PyMC3 的新手,并试图找到一组适合实验数据的参数。我的问题是我的似然函数取决于参与者之前的反应。
数据具有以下矩阵形式:
participant | trial0 | trial1 | ... | trialn
p0 | x | x | ... | x
....
p1 | x | x | ... | x
其中 x 将参与者在该试验中的响应编码为0, 1, or 2。现在,我有兴趣为每个参与者 p 推断可能的参数。为简单起见,假设参与者可能是三种类型之一,t1、t2、t3,并且还有第三个参数 l 在这些类型中保持不变。我想根据她在整个实验中的行为、参与者类型的一般分布以及 l 的最佳拟合来推断每个参与者的可能类型。
问题:我的似然函数,称为 lhs,是确定性的;插入参与者类型 (t={1,2,3}),l 的值,以及参与者过去的反应,它会给你概率在当前试验中观察到的数据 x={0,1,2}。我的问题是我不知道如何告诉 PyMC3 模型对于试验 n 中的每个响应(0,1 或 2),似然函数取决于试验中的响应序列最多 n。我需要这个,因为在每次试验之后,lhs 会根据试验的值进行更新(参与者在实验中学习,因此他们表现出特定反应的可能性也会发生变化。
我假设要么有一种聪明的方法来编码每次试验的响应,即模型递归地计算试验n > 0 的每个响应的似然函数,或者有一个功能可以告诉它数据取决于以前的数据。唉,我还没有找到任何一个例子来说明这两种想法是如何起作用的。
这是我所拥有的:
import numpy as np
import pymc3 as pm
#data is a pandas dataframe where each row
#is a participant, each column a trial, and
#each cell has value 0,1, or 2.
with pm.Model() as model:
#Priors
l = pm.Gamma('lam',10,1.0/0.5) #my prior for the value of l
p_tau = pm.Dirichlet('p_tau',np.ones(3)) #unbiased prior over types
tau = pm.Categorical('tau', p=p_tau, shape=3) #distr. over types I want to infer
#data likelihood function
lhs = ... #likelihood function; takes l, tau,
#and sequentially observed data up to trial n-1
#to compute the likelihood of the response of trial n
#Here's the issue. data would be 0,1,2
#But lhs should depend on previous trials
pm.Categorical('obs', p=lhs, observed=data)
我们将不胜感激有关模型的建议、数据编码或具有相似特征的已实施PyMC3 模型的示例。
我没有说明可能性,因为它很长。
【问题讨论】:
标签: python pymc data-fitting pymc3 model-fitting