如何在PyMC3中定义在多个条件下将一个参数限制为相同值的模型

Aloctavodia

我想写一个模型,就像下面的模型一样。主要思想是我有几个条件(或处理方法),每个参数的所有参数都是独立估计的,除了kappa参数对于所有条件都相同。

with pm.Model() as model:
    trace_per_condition = []
    # define the kappa hyperparameter
    kappa = pm.Gamma('kappa', 1, 0.1)
    for condition in range(0, ncond):
        z_cond = z[condition]
        # define the mu hyperparameter
        mu = pm.Beta('mu', 1, 1)
        # define the prior
        theta = pm.Beta('theta', mu * kappa, (1 - mu) * kappa, shape=len(z_cond))
        # define the likelihood
        y = pm.Binomial('y', p=theta, n=trials, observed=z_cond)
    # Generate a MCMC chain
        start = pm.find_MAP()
        step1 = pm.Metropolis([theta, mu])
        step2 = pm.NUTS([kappa])
        trace = pm.sample(1000, [step1, step2], progressbar=False)
        trace_per_condition.append(trace)

当我运行模型时,我收到以下消息。

/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/gradient.py:513:  UserWarning: grad method was asked to compute the gradient with respect to a variable that is not part of the computational graph of the cost, or is used only by a non-differentiable operator: mu handle_disconnected(elem)
/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/gradient.py:533: UserWarning: grad method was asked to compute the gradient with respect to a variable that is not part of the computational graph of the cost, or is used only by a non-differentiable operator: <DisconnectedType>
  handle_disconnected(rval[i])
/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/gradient.py:513: UserWarning: grad method was asked to compute the gradient with respect to a variable that is not part of the computational graph of the cost, or is used only by a non-differentiable operator: theta
  handle_disconnected(elem)
Traceback (most recent call last):
  File "<stdin>", line 46, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/tuning/starting.py", line 80, in find_MAP
    start), fprime=grad_logp_o, disp=disp, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 777, in fmin_bfgs
    res = _minimize_bfgs(f, x0, args, fprime, callback=callback, **opts)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 832, in _minimize_bfgs
    gfk = myfprime(x0)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 281, in function_wrapper
    return function(*(wrapper_args + args))
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/tuning/starting.py", line 75, in grad_logp_o
    return nan_to_num(-dlogp(point))
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/blocking.py", line 119, in __call__
    return self.fa(self.fb(x))
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/model.py", line 284, in __call__
    return self.f(**state)
  File "/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/compile/function_module.py", line 516, in __call__
    self[k] = arg
  File "/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/compile/function_module.py", line 452, in __setitem__
    self.value[item] = value
  File "/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/compile/function_module.py", line 413, in __setitem__
    "of the inputs of your function for duplicates." % str(item)) 
TypeError: Ambiguous name: mu - please check the names of the inputs of your function for duplicates.

编辑根据chris-fonnesbeck的回答,我尝试了以下操作:

with pm.Model() as model:
    trace_per_condition = []
    # define the kappa hyperparameter
    kappa = pm.Gamma('kappa', 1, 0.1)
    for condition in range(0, ncond):
        z_cond = z[condition]
        # define the mu hyperparameter
        mu = pm.Beta('mu_%i' % condition, 1, 1)
        # define the prior
        theta = pm.Beta('theta_%i' % condition, mu * kappa, (1 - mu) * kappa, shape=len(z_cond))
        # define the likelihood
        y = pm.Binomial('y_%i' % condition, p=theta, n=trials, observed=z_cond)
    # Generate a MCMC chain
        start = pm.find_MAP()
        step1 = pm.Metropolis([theta, mu])
        step2 = pm.NUTS([kappa])
        trace = pm.sample(10000, [step1, step2], start=start, progressbar=False)
        trace_per_condition.append(trace)

我得到了错误:

/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/gradient.py:513:
UserWarning: grad method was asked to compute the gradient with respect to a variable  
that  is not part of the computational graph of the cost, or is used only by a  
non-differentiable operator: mu_1
handle_disconnected(elem)

/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/gradient.py:533: 
UserWarning: grad method was asked to compute the gradient with respect to a variable 
that is not part of the computational graph of the cost, or is used only by a 
non-differentiable operator: <DisconnectedType>
handle_disconnected(rval[i])

/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/gradient.py:513: 
UserWarning: grad method was asked to compute the gradient with respect to a variable 
that is not part of the computational graph of the cost, or is used only by a 
non-differentiable operator: theta_1
handle_disconnected(elem)


Traceback (most recent call last):
  File "<stdin>", line 43, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/tuning/starting.py", line 80, in find_MAP
    start), fprime=grad_logp_o, disp=disp, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 777, in fmin_bfgs
    res = _minimize_bfgs(f, x0, args, fprime, callback=callback, **opts)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 837, in _minimize_bfgs
    old_fval = f(x0)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 281, in function_wrapper
    return function(*(wrapper_args + args))
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/tuning/starting.py", line 72, in logp_o
    return nan_to_high(-logp(point))
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/blocking.py", line 119, in __call__
    return self.fa(self.fb(x))
  File "/usr/local/lib/python2.7/dist-packages/pymc-3.0-py2.7.egg/pymc/model.py", line 283, in __call__
    return self.f(**state)
  File "/usr/local/lib/python2.7/dist-packages/Theano-0.6.0-py2.7.egg/theano/compile/function_module.py", line 482, in __call__
    raise TypeError("Too many parameter passed to theano function")
TypeError: Too many parameter passed to theano function

UserWarning与起点的优化有关,如果我不使用pm.find_MAP(),则将其删除。其余错误仍然存​​在。

约翰·萨尔瓦捷

我注意到的一件事是,每次添加条件时都在采样,我想您可能想将其拉出循环。

同样,您无需为每个条件的每个mu,theta,y定义单独的变量。例如,如果您的数据data在列中,则yu应该能够执行以下操作

with pm.Model() as model:

    kappa = pm.Gamma('kappa', 1, 0.1)

    mu = pm.Beta('mu', 1, 1, shape=ncond)

    mu_c = mu[data.condition]
    theta = pm.Beta('theta', mu_c * kappa, (1 - mu_c) * kappa, shape=len(data))

    y = pm.Binomial('y', p=theta, n=data.trials, observed=data.z_cond)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PyMC3中定义在多个条件下将一个参数限制为相同值的模型

来自分类Dev

在特定条件下如何在一个会话中存储值

来自分类Dev

在一个条件下比较多个值

来自分类Dev

如何根据值将ForeignKey字段限制为另一个模型FK

来自分类Dev

在一个条件下搜索数组中的值

来自分类Dev

如何在python中另一个组的条件下按组获取最小值?

来自分类Dev

如何在特定条件下按特定顺序将列表放入一个更大的列表中?- Python 3.x

来自分类Dev

如何在if条件下检查至少一个枚举值是否等于变量

来自分类Dev

如何使用密码将动作限制为多个关系中的一个

来自分类Dev

如何在PyMC3中采样多个链

来自分类Dev

如何在一定条件下将数组分为3个对象

来自分类Dev

如何基于PyMC3中的另一个值来测量一个值的贝叶斯不确定性

来自分类Dev

如何在R中只有一个变量的条件下创建新矩阵?

来自分类Dev

如何在 Python 中的特定条件下创建一个从另一个表返回值的新列

来自分类Dev

如何在两个条件下计算Excel中的唯一值

来自分类Dev

如何在一个条件下向div添加一个类?

来自分类Dev

如何在一个或多个条件下对字母数字字符串列表进行排序?

来自分类Dev

相同条件下的多个值

来自分类Dev

如何将任务数量限制为 GNU Parallel 中的第一个参数?

来自分类Dev

如何在多个条件下获得正确的值?

来自分类Dev

如何将参数限制为变量类型的一个变量

来自分类Dev

将字段的值限制为休眠中另一个表中的条目

来自分类Dev

如何在Scala中创建一个工厂方法,该方法返回一个类,该类的通用参数被限制为ClassManifest?

来自分类Dev

如何在PyMC3中定义自定义优先级

来自分类Dev

如何在PyMC3中定义自定义优先级

来自分类Dev

如何在另一个查询的LIKE条件下使用SQL查询结果?

来自分类Dev

如何将sort()限制为一个列表?

来自分类Dev

如何在sql中找出两个不同条件下字段的最大值

来自分类Dev

如何添加一个“。” R中的条件下的字符串之后

Related 相关文章

  1. 1

    如何在PyMC3中定义在多个条件下将一个参数限制为相同值的模型

  2. 2

    在特定条件下如何在一个会话中存储值

  3. 3

    在一个条件下比较多个值

  4. 4

    如何根据值将ForeignKey字段限制为另一个模型FK

  5. 5

    在一个条件下搜索数组中的值

  6. 6

    如何在python中另一个组的条件下按组获取最小值?

  7. 7

    如何在特定条件下按特定顺序将列表放入一个更大的列表中?- Python 3.x

  8. 8

    如何在if条件下检查至少一个枚举值是否等于变量

  9. 9

    如何使用密码将动作限制为多个关系中的一个

  10. 10

    如何在PyMC3中采样多个链

  11. 11

    如何在一定条件下将数组分为3个对象

  12. 12

    如何基于PyMC3中的另一个值来测量一个值的贝叶斯不确定性

  13. 13

    如何在R中只有一个变量的条件下创建新矩阵?

  14. 14

    如何在 Python 中的特定条件下创建一个从另一个表返回值的新列

  15. 15

    如何在两个条件下计算Excel中的唯一值

  16. 16

    如何在一个条件下向div添加一个类?

  17. 17

    如何在一个或多个条件下对字母数字字符串列表进行排序?

  18. 18

    相同条件下的多个值

  19. 19

    如何将任务数量限制为 GNU Parallel 中的第一个参数?

  20. 20

    如何在多个条件下获得正确的值?

  21. 21

    如何将参数限制为变量类型的一个变量

  22. 22

    将字段的值限制为休眠中另一个表中的条目

  23. 23

    如何在Scala中创建一个工厂方法,该方法返回一个类,该类的通用参数被限制为ClassManifest?

  24. 24

    如何在PyMC3中定义自定义优先级

  25. 25

    如何在PyMC3中定义自定义优先级

  26. 26

    如何在另一个查询的LIKE条件下使用SQL查询结果?

  27. 27

    如何将sort()限制为一个列表?

  28. 28

    如何在sql中找出两个不同条件下字段的最大值

  29. 29

    如何添加一个“。” R中的条件下的字符串之后

热门标签

归档