pymc3 条件确定性似然函数
pymc3 Conditional deterministic likelihood function
我是 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
模型的示例将不胜感激。
我没有指定可能性,因为它很长。
看来您要做的是在给定一系列响应的情况下为每个人推断类型 t1、t2 或 t3 的概率(我觉得这个模型可能有点像马尔可夫链)。
post 似然代码或此处有关模型的一些文档将对我们有所帮助,以便我们了解它是如何实现的——这将是一个有点模糊的答案,直到我可以看看可能性。
在 pymc3 中执行条件的最简单方法是使用 Theano 的 switch op,记录在此处:http://deeplearning.net/software/theano/tutorial/conditions.html。
基本上switch可以这样使用:theano.switch(condition, expression_if_true, expression_if_false)
。您想在 pymc3 可能性中使用它而不是 ifelse,因为 switch 可以按元素使用,但 ifelse 不能。
我是 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
模型的示例将不胜感激。
我没有指定可能性,因为它很长。
看来您要做的是在给定一系列响应的情况下为每个人推断类型 t1、t2 或 t3 的概率(我觉得这个模型可能有点像马尔可夫链)。
post 似然代码或此处有关模型的一些文档将对我们有所帮助,以便我们了解它是如何实现的——这将是一个有点模糊的答案,直到我可以看看可能性。
在 pymc3 中执行条件的最简单方法是使用 Theano 的 switch op,记录在此处:http://deeplearning.net/software/theano/tutorial/conditions.html。
基本上switch可以这样使用:theano.switch(condition, expression_if_true, expression_if_false)
。您想在 pymc3 可能性中使用它而不是 ifelse,因为 switch 可以按元素使用,但 ifelse 不能。