2017-06-03 55 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不能。