python - pymc3 条件确定性似然函数

标签 python pymc data-fitting pymc3 model-fitting

我是 PyMC3 的新手,正在尝试找到一组适合实验数据的参数。我的问题是,我的似然函数取决于参与者之前的响应。

数据具有以下矩阵形式:

participant | trial0 | trial1 | ... | trialn
p0 | x | x | ... | x
....
p1 | x | x | ... | x

其中x0、1或2的值来编码该试验中参与者的 react 。现在,我有兴趣推断每个参与者的可能参数p。为简单起见,假设参与者可能属于以下三种类型之一:t1t2t3,并且存在第三个参数我在这些类型中保持不变。我想根据每个参与者在整个实验中的行为、参与者类型的一般分布以及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/

相关文章:

python - pymc3:如何在多级线性回归中建模相关截距和斜率

plot - 使用 gnuplot 拟合阻尼正弦波数据集,出现很多错误

python - 在没有已知函数的情况下将数据拟合到曲线

python - 在 python 与 gnuplot 中将数据拟合到方程

python - 如何在 Alteryx 或 Python 中将日期转换为一周中的第 n 天?

php - mod_cgi、mod_fastcgi、mod_scgi、mod_wsgi、mod_python、FLUP。我不知道还有多少。什么是 mod_php 等价物?

python - 在 pymc3 中重写用于动态系统参数估计的 pymc 脚本

Python multiprocessing+savefig 导致报错或系统死机

Python - 将多个刻度放在一个地方

PyMC @observed 装饰器计算的对数概率无法转换为浮点错误