我是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
模型的示例的建议将不胜感激。
我留下了未指明的可能性,因为它很长。
答案 0 :(得分:1)
似乎您要做的是在给定一系列响应的情况下推断每个人的类型t1,t2或t3的概率(我觉得这个模型可能类似马尔可夫链)。
在这里发布关于模型的可能性代码或一些文档会有所帮助,以便我们了解它是如何实现的 - 这将是一个模糊的答案,直到我能看一看可能性。
在pymc3中执行条件的最简单方法是使用Theano的switch op,这里记录:http://deeplearning.net/software/theano/tutorial/conditions.html。
基本上可以使用开关,如:{{1}}。你想在pymc3中使用这个而不是ifelse,因为switch可以在元素方面使用,但ifelse不能。