Python PyMC3:在第二个MCMC过程中从后道随机取样

Python PyMC3:在第二个MCMC过程中从后道随机取样,python,pymc3,hierarchical-bayesian,Python,Pymc3,Hierarchical Bayesian,我正在寻求一些关于如何构建分层贝叶斯模型的智慧。这个项目太复杂了,没有必要按原样包含在这里。我可能会制作一个最小的玩具示例,但它的简单性将驱使人们朝着不适合复杂情况的方向思考。因此,我希望从概念上讨论它就足够了 该项目使用了一个数据集,其中包含超过10个特征,以及我们最终想要预测的100个不同物理站点中的每一个的物理观测值 概述 分析的第一阶段是对所有数据建立全局模型(具有负二项误差结构的对数线性glm),以确定每个特征的全局系数 在第二阶段,将这些全局系数应用于数据集的每一行(站点),并进

我正在寻求一些关于如何构建分层贝叶斯模型的智慧。这个项目太复杂了,没有必要按原样包含在这里。我可能会制作一个最小的玩具示例,但它的简单性将驱使人们朝着不适合复杂情况的方向思考。因此,我希望从概念上讨论它就足够了

该项目使用了一个数据集,其中包含超过10个特征,以及我们最终想要预测的100个不同物理站点中的每一个的物理观测值

概述

  • 分析的第一阶段是对所有数据建立全局模型(具有负二项误差结构的对数线性glm),以确定每个特征的全局系数

  • 在第二阶段,将这些全局系数应用于数据集的每一行(站点),并进行第二轮建模,以确定站点特定的因素,这些因素解释了系统偏离全局模型的隐藏结构驱动因素

  • 最后,对每个场地的物理观测值进行预测

阶段1的对数线性glm为每个系数生成后验概率。将这些系数分布应用于任何单独的物理场地,给出了该场地可观测到的整体模型“平均”分布。随后对可观测值与“总体平均值”的偏差进行建模时,最肯定的是应包括整个分布

我认为,对于pymc3建模者来说,最有效的MCMC ic方法是在第二阶段建模过程中测试/采取的每个步骤中,从全局模型跟踪中提取不同的样本。这或许可以通过以下方式实现:

  • 定义均匀分布,例如,如果全局模型以5000个增量运行,则在0和4999之间
  • 将步骤1中绘制的轨迹增量的系数应用于物理站点
  • 对偏差进行建模,以推断特定位置参数的后验分布
  • 然而,为了使其工作,我需要pymc3模型从均匀分布“先验”中采样,同时将其排除在能量计算之外。在某种意义上,我需要它是“确定性的”,但在某种意义上,它是预定义的和固定的,不应该是模型假设的参数空间的一部分,应该“缩小”到后验概率的集合中

    或者这是一种幼稚的做法?这只是概念上的两个阶段吗?像这样的分层贝叶斯模型应该总是在一个阶段中建模,即使这会创建一个非常复杂的参数空间?在我能找到的所有简单的例子中似乎都是这样,但我不知道对于更复杂的例子是否必须这样。我不确定是否有可能只在参数空间的一部分强加定义的错误结构。如果真的有可能施加这种错误结构,我可以使用第1阶段为第2阶段中的全局参数子集定义良好的先验值,并且假设这些全局参数的后验值不会有太大变化。但这似乎有些草率

    当然,我也可以在第二阶段(特定站点)建模中使用蛮力采样跟踪,但这将是缓慢而低效的,而且我认为,与MCMC方法相反

    如果有任何指导,我将不胜感激