我是PyMC3
的新手,试图找到一组适合实验数据的参数。我的问题是,我的可能性功能是以参与者以前的答复为条件的。pymc3条件确定性似然函数
的数据具有以下矩阵形式:
participant | trial0 | trial1 | ... | trialn
p0 | x | x | ... | x
....
p1 | x | x | ... | x
其中X编纂了参与者在该试验的反应,与0, 1, or 2
值。现在,我有兴趣推断每位参与者的可能参数p。为简单起见,假设参加者可以是三种类型之一,T1,T2,T3的,并且有一第三参数升横跨保持这些类型的常量。我想推断在整个实验中给定她的行为的每个参与者的可能类型,参与者类型的一般分布以及最适合于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
模型的示例将不胜感激。
我遗漏了未指定的可能性,因为相当长。