私はPyMC3
を初めて使っていて、実験のデータに合ったパラメータのセットを見つけようとしています。私の問題は、私の尤度関数は参加者の以前の反応に条件付きであるということです。pymc3条件付き決定論的尤度関数
データは、以下の行列形式を有する:Xは、参加者が0, 1, or 2
の値と、その試験に応答成文化
participant | trial0 | trial1 | ... | trialn
p0 | x | x | ... | x
....
p1 | x | x | ... | x
。さて、各参加者の可能性の高いパラメータを推測することに興味がありますp。簡単にするために、想定参加者は3つのタイプ、T1、T2、T3であること、そして第三のパラメータLがあることをこれらのタイプ間一定に保持することができます。私は実験を通して彼女の行動、参加者よりもタイプの一般的な分布、そしてlのベストフィットを考慮して、各参加者の可能性のあるタイプを推測したいと思います。
問題:私の尤度関数、LHSそれを呼び出す、決定論的です。参加者のタイプ(t = {1,2,3})、lの値、および参加者の過去の応答を接続して、観察されたデータの確率を与えますx = {0、 1,2}となりました。私の問題は、PyMC3モデルに試行nの各応答(0,1、または2)について、尤度関数が最大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
モデルのモデル、データコード化または例についての提案は非常に感謝しています。
かなり長いので、私は不特定の可能性を残しました。