在 PyMC3 中使用复数似然

2023-12-14

pymc.__version__ = '3.0'  
theano.__version__ = '0.6.0.dev-RELEASE'

我正在尝试将 PyMC3 与复杂的似然函数一起使用:

第一个问题:这可能吗?

这是我尝试使用托马斯·维茨基的帖子作为指导:

import numpy as np
import theano as th
import pymc as pm
import scipy as sp

# Actual data I'm trying to fit
x = np.array([52.08, 58.44, 60.0, 65.0, 65.10, 66.0, 70.0, 87.5, 110.0, 126.0])
y = np.array([0.522, 0.659, 0.462, 0.720, 0.609, 0.696, 0.667, 0.870, 0.889,  0.919])
yerr = np.array([0.104,  0.071,  0.138,  0.035,  0.102, 0.096,  0.136,  0.031, 0.024, 0.035])

th.config.compute_test_value = 'off'
a = th.tensor.dscalar('a')

with pm.Model() as model:
    # Priors
    alpha = pm.Normal('alpha', mu=0.3, sd=5)
    sig_alpha = pm.Normal('sig_alpha', mu=0.03, sd=5)
    t_double = pm.Normal('t_double', mu=4, sd=20)
    t_delay = pm.Normal('t_delay', mu=21, sd=20)
    nu = pm.Uniform('nu', lower=0, upper=20)

    # Some functions needed for calculation of the y estimator
    def T(eqd):
        doses = np.array([52.08, 58.44, 60.0, 65.0, 65.10, 
                          66.0, 70.0, 87.5, 110.0, 126.0])
        tmt_times = np.array([29,29,43,29,36,48,22,11,7,8])
        return np.interp(eqd, doses, tmt_times)

    def TCP(a):
        time = T(x)
        BCP = pm.exp(-1E7*pm.exp(-alpha*x*1.2 + 0.69315/t_delay(time-t_double)))
        return pm.prod(BCP)

    def normpdf(a, alpha, sig_alpha):
        return 1./(sig_alpha*pm.sqrt(2.*np.pi))*pm.exp(-pm.sqr(a-alpha)/(2*pm.sqr(sig_alpha)))

    def normcdf(a, alpha, sig_alpha):
        return 1./2.*(1+pm.erf((a-alpha)/(sig_alpha*pm.sqrt(2))))

    def integrand(a):
        return normpdf(a,alpha,sig_alpha)/(1.-normcdf(0,alpha,sig_alpha))*TCP(a)

    func = th.function([a,alpha,sig_alpha,t_double,t_delay], integrand(a))

    y_est = sp.integrate.quad(func(a, alpha, sig_alpha,t_double,t_delay), 0, np.inf)[0]

    likelihood = pm.T('TCP', mu=y_est, nu=nu, observed=y_tcp)

    start = pm.find_MAP()
    step = pm.NUTS(state=start)
    trace = pm.sample(2000, step, start=start, progressbar=True) 

它会生成以下有关 y_est 表达式的消息:

TypeError: ('在索引 0(基于 0)处名称为“:42”的 theano 函数的错误输入参数','预期是一个类似数组的对象,但找到了一个变量:也许您正在尝试在 (可能是共享的)变量而不是数值数组?')

我克服了各种其他障碍才走到这一步,而这就是我陷入困境的地方。那么,如果我的第一个问题的答案是“是”,那么我走在正确的道路上吗?任何指导都会有帮助!

注意:这里有一个我发现类似的问题, and another.

免责声明: 我对此很陌生。我之前唯一的经验是成功重现托马斯帖子中的线性回归示例。我还成功运行了 Theano 测试套件,所以我知道它是有效的。


是的,制造具有复杂或任意可能性的东西是可能的。虽然这看起来不像你在这里所做的。看起来您需要将一个变量转换为另一个变量,即积分步骤。

您的特殊例外是,integrate.quad 需要一个 numpy 数组,而不是 pymcVariable。如果你想在 pymc 中做四边形,你必须制作一个定制的theanoOp(带导数)为它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PyMC3 中使用复数似然 的相关文章

  • pymc3 中的自定义可能性

    如何在 PyMC3 中定义自定义可能性 在 PyMC2 中 我可以使用 pymc potential 我尝试使用pymc Potential然而 在 PyMC3 中 布尔运算似乎无法应用于参数 我收到类似的错误this当我这样做时 例如 以
  • 使用“LKJCorr”先验修改 PyMC3 中的 BPMF:使用“NUTS”的 PositiveDefiniteError

    我之前实现了原来的贝叶斯概率矩阵分解 BPMF 模型中pymc3 看我之前的问题供参考 数据源和问题设置 根据 twiecki 对该问题的回答 我使用以下方法实现了该模型的变体LKJCorr相关矩阵的先验和标准差的统一先验 在原始模型中 协
  • PyMC 3 中的生存分析

    我尝试移植简单的生存模型从这里 介绍中的第一个 从 PyMC 2 到 PyMC 3 但是 我没有找到任何与 观察到的 装饰器等效的东西 并且我尝试编写新发行版失败了 有人可以提供一个例子 这是如何在 PyMC 3 中完成的吗 这是一个棘手的
  • pymc3:多个观察值

    我有一些观测数据想要估计参数 我认为这将是尝试 PYMC3 的好机会 我的数据由一系列记录构成 每条记录包含一对与固定的一小时时间段相关的观察结果 一项观察是给定一小时内发生的事件总数 另一个观察结果是该时间段内的成功数量 例如 一个数据点
  • 安装和导入后,colaboratory 将不会承认 arviz

    在Google的合作实验室中 安装了arviz然后导入arviz没有错误 但在代码单元中 pm plot posterior samples 得到错误 arviz未安装 尝试绘制贝叶斯代码 pm plot posterior samples
  • 如何使用 pymc 制作离散状态马尔可夫模型?

    我试图找出如何正确制作离散状态马尔可夫链模型pymc http pymc devs github io pymc index html 举个例子 查看nbviewer http nbviewer ipython org github shp
  • PyMC3 将随机协方差矩阵传递给 pm.MvNormal()

    我尝试使用 PyMC3 将简单的 2D 高斯模型拟合到观察到的数据 import numpy as np import pymc3 as pm n 10000 np random seed 0 X np random multivariat
  • 如何使用pymc参数化概率图模型?

    如何使用 pymc 参数化概率图形模型 假设我有一个带有两个节点的 PGMX and Y 可以说X gt Y是图表 And X有两个值 0 1 and Y也有两个值 0 1 我想使用 pymc 来学习分布的参数并填充 用于运行推理的图形模型
  • pymc3中的多元线性回归

    我最近开始学习pymc3专门使用后emcee多年来 我遇到了一些概念问题 我正在练习第七章霍格的数据拟合模型 https arxiv org abs 1008 4686 这涉及到具有任意二维不确定性的直线的 mcmc 拟合 我很容易地完成了
  • PyMC - 方差-协方差矩阵估计

    我读了下面的论文 http www3 stat sinica edu tw statistica oldpdf A10n416 pdf http www3 stat sinica edu tw statistica oldpdf A10n4
  • 使用 PyMC3 进行贝叶斯概率矩阵分解 (BPMF):使用“NUTS”的 PositiveDefiniteError

    我已经实施了贝叶斯概率矩阵分解 https www cs toronto edu amnih papers bpmf pdf算法使用pymc3在Python中 我还实现了它的前身 概率矩阵分解 PMF 看我之前的问题 https stats
  • pymc3 具有来自核密度估计的自定义似然函数

    我正在尝试将 pymc3 与从一些观察数据派生的似然函数一起使用 这些观察到的数据不符合任何好的标准分布 所以我想根据这些观察来定义我自己的数据 一种方法是对观测值使用核密度估计 这在 pymc2 中是可能的 但与 pymc3 中的 The
  • 使用 PYMC3 对 RV 求和

    我正在尝试从图像中实现模型 我是 PyMC3 的新手 我不确定如何正确构建模型 我的尝试如下 sample data logprem np array 8 66768002 8 49862181 8 60410456 8 54966038
  • 在 PYMC3 中使用自定义可能性会导致“expected ndarray”错误

    我正在尝试在 PYMC3 中使用自定义分布 广义极值或 GEV 分布 我已经编写了一些代码来计算这个 但我得到一个错误 ValueError 需要一个 ndarray 应用导致错误的节点 MakeVector dtype float64 l
  • 我无法导入 pymc3

    我无法导入 pymc3 安装后出现以下错误消息 根据我安装的其他人指出的问题 pip 安装 pymc3 conda 安装 m2w64 工具链 conda安装theano 尝试导入 theano 时我也收到相同的错误消息 导入错误 无法从 t
  • 使用 pymc 与 MCMC 拟合两个正态分布(直方图)?

    我正在尝试拟合 CCD 上摄谱仪检测到的线轮廓 为了便于考虑 我提供了一个演示 如果解决了 它与我的演示非常相似actually想要解决 我看过这个 https stats stackexchange com questions 46626
  • Python 中的随机优化

    我正在尝试结合cvxopt http cvxopt org 优化求解器 和PyMC https github com pymc devs pymc 采样器 解决凸问题随机优化问题 作为参考 安装这两个软件包pip很简单 pip instal
  • 可以在 pystan 或 pymc3 中使用样本权重吗?

    如果我观察到的数据集具有权重 例如跟踪多重性 是否可以将其提供给 pystan 或 pymc3 类似于函数签名 http mc stan org rstanarm reference stan glm html http mc stan o
  • pymc 对多个变量进行观察

    我在用着黑客贝叶斯方法线性回归的示例 https nbviewer jupyter org github CamDavidsonPilon Probabilistic Programming and Bayesian Methods for
  • PyMC3-自定义 theano Op 进行数值积分

    我使用 PyMC3 进行参数估计 使用必须定义的特定似然函数 我用谷歌搜索了一下 发现我应该使用densitydist实现用户定义的似然函数的方法 但它不起作用 如何在 PyMC3 中合并用户定义的似然函数并找出最大 aposteriori

随机推荐