pymc3条件确定性似然函数

时间:2017-06-03 13:09:15

标签: python pymc data-fitting pymc3 model-fitting

我是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模型对于每个响应( 0,1,或2 )在试验n,似然函数取决于响应的顺序试验到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模型的示例的建议将不胜感激。

我留下了未指明的可能性,因为它很长。

1 个答案:

答案 0 :(得分:1)

似乎您要做的是在给定一系列响应的情况下推断每个人的类型t1,t2或t3的概率(我觉得这个模型可能类似马尔可夫链)。

在这里发布关于模型的可能性代码或一些文档会有所帮助,以便我们了解它是如何实现的 - 这将是一个模糊的答案,直到我能看一看可能性。

在pymc3中执行条件的最简单方法是使用Theano的switch op,这里记录:http://deeplearning.net/software/theano/tutorial/conditions.html

基本上可以使用开关,如:{{1}}。你想在pymc3中使用这个而不是ifelse,因为switch可以在元素方面使用,但ifelse不能。