我是 PyMC3
的新手,正在尝试找到一组适合实验数据的参数。我的问题是,我的似然函数取决于参与者之前的响应。
数据具有以下矩阵形式:
participant | trial0 | trial1 | ... | trialn
p0 | x | x | ... | x
....
p1 | x | x | ... | x
其中x用0、1或2
的值来编码该试验中参与者的 react 。现在,我有兴趣推断每个参与者的可能参数p。为简单起见,假设参与者可能属于以下三种类型之一:t1、t2、t3,并且存在第三个参数我在这些类型中保持不变。我想根据每个参与者在整个实验中的行为、参与者类型的一般分布以及l的最佳拟合来推断她可能的类型。
问题:我的似然函数,称之为lhs,是确定性的;代入参与者类型 (t={1,2,3})、l 值以及参与者过去的响应,它将为您提供概率当前试验中观察到的数据x={0,1,2}。我的问题是,我不知道如何告诉 PyMC3 模型,对于试验 n 的每个响应(0,1 或 2),似然函数取决于试验中响应的顺序直到n。我需要这个,因为每次试验后,lhs都会根据试验的值进行更新(参与者在实验中学习,因此他们表现出特定 react 的可能性也会改变。
我假设有一种巧妙的方法来编码每次试验的响应,使模型递归地计算试验 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 的概率(我觉得这个模型可能类似于马尔可夫链)。
在此处发布似然代码或有关模型的一些文档将很有帮助,以便我们了解如何实现它 - 在我可以查看之前,这将是一个有点模糊的答案可能性。
在 pymc3 中执行条件的最简单方法是使用 Theano 的 switch 操作,记录如下:http://deeplearning.net/software/theano/tutorial/conditions.html 。
基本上 switch 可以像这样使用:theano.switch(condition, expression_if_true, expression_if_false)
。您希望在 pymc3 可能性中使用 this 而不是 ifelse,因为 switch 可以按元素使用,但 ifelse 不能。
关于python - pymc3 条件确定性似然函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344291/