2017-06-03 32 views
1

我是PyMC3的新手,试图找到一组适合实验数据的参数。我的问题是,我的可能性功能是以参与者以前的答复为条件的。pymc3条件确定性似然函数

的数据具有以下矩阵形式:

participant | trial0 | trial1 | ... | trialn 
p0 | x | x | ... | x 
.... 
p1 | x | x | ... | x 

其中X编纂了参与者在该试验的反应,与0, 1, or 2值。现在,我有兴趣推断每位参与者的可能参数p。为简单起见,假设参加者可以是三种类型之一,T1T2T3的,并且有一第三参数横跨保持这些类型的常量。我想推断在整个实验中给定她的行为的每个参与者的可能类型,参与者类型的一般分布以及最适合于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

看来你试图做的是推导出每个人给定一系列响应(我觉得这个模型可能像马尔可夫链)的类型t1,t2或t3的概率。

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

在pymc3中执行条件的最简单方法是使用Theano的开关操作,此处记录如下:http://deeplearning.net/software/theano/tutorial/conditions.html

基本上可以使用开关:theano.switch(condition, expression_if_true, expression_if_false)。你想在pymc3可能性中使用这个而不是ifelse,因为开关可以按照元素使用,但是ifelse不能。