数据分享|Python用PyMC3贝叶斯模型平均BMA:采样、信息准则比较和预测可视化灵长类动物的乳汁成分数据

简介: 数据分享|Python用PyMC3贝叶斯模型平均BMA:采样、信息准则比较和预测可视化灵长类动物的乳汁成分数据

全文链接:https://tecdat.cn/?p=33449


当面对多个模型时,我们有多种选择点击文末“阅读原文”获取完整代码数据


模型选择因其简单性而具有吸引力,但我们正在丢弃有关模型中不确定性的信息。

print(f"Runing

image.png

模型平均


一种替代方法是执行模型选择,但讨论所有不同的模型以及给定信息准则的计算值。重要的是要将所有这些数字和测试放在我们问题的背景下,以便我们和客户能够更好地了解方法可能存在的局限性和缺点。如果你在学术界,你可以使用这种方法向论文、演示文稿、论文等的讨论部分添加元素。

另一种方法是执行模型平均。现在的想法是使用模型的加权平均值生成元模型(和元预测)。有几种方法可以做到这一点,PyMC3 包括其中的 3 种,我们将简要讨论,您将在 Yuling Yao 等人的工作中找到更彻底的解释。

伪贝叶斯模型平均

贝叶斯模型可以通过其边缘概率进行加权,这被称为贝叶斯模型平均。我们可以使用以下公式来做到这一点:

image.png

这种方法称为伪贝叶斯模型平均或类似赤池的加权,是一种启发式方法,用于根据信息标准值计算每个模型(给定一组固定的模型)的相对概率。看看分母只是一个归一化项,以确保权重总和为 1。

使用贝叶斯自举进行伪贝叶斯模型平均

上述计算权重的公式是一种非常好且简单的方法,但它没有考虑 IC 计算中的不确定性。

堆叠

在PyMC3中实现的第三种方法被称为预测分布的堆叠,并且最近被提出。我们希望在一个元模型中组合多个模型,以最小化元模型和真实生成模型之间的分歧,当使用对数评分规则时,这相当于:

image.png

加权后验预测样本

一旦我们计算了权重,使用上述 3 种方法中的任何一种,我们就可以使用它们来获得加权后验预测样本。PyMC3 提供了以简单方式执行这些步骤的函数,因此让我们通过示例查看它们的实际效果。

简而言之,我们的问题如下:我们想探索几种灵长类动物的乳汁成分数据查看文末了解数据免费获取方式,假设来自大脑较大的灵长类动物的雌性产生更有营养的牛奶(这样做是为了*支持这种大大脑的发育)。对于进化生物学家来说,这是一个重要的问题,为了给出和回答,我们将使用3个变量,两个预测变量:新皮层的比例与总质量的比较 大脑和母亲体重的对数。对于预测变量,每克牛奶的千卡。使用这些变量,我们将构建 3 个不同的线性模型:

  1. 仅使用新皮层变量的模型
  2. 仅使用质量变量对数的模型
  3. 使用两个变量的模型
d.iloc[:, 1:] = d.iloc[:, 1:] - d.iloc[:, 1:].mean()
d.head()

image.png

现在我们有了数据,我们将仅使用 neocortex

with pm.Model() as model_0:
  
    trace_0 = pm.sample(2000, return_inferencedata=True)

image.png

第二个模型与第一个模型完全相同,只是我们现在使用质量的对数

with pm.Model() as model_1:
 
    trace_1 = pm.sample(2000, return_inferencedata=True)

image.png

最后是第三个模型使用 neocortex和 变量log_mass

with pm.Model() as model_2:
   
    trace_2 = pm.sample(2000, return_inferencedata=True)

image.png

现在我们已经对 3 个模型的后验进行了采样,我们将对它们进行视觉比较。一种选择是使用forestplot支持绘制多个迹线的函数。

az.plot_fo

image.png

另一种选择是在同一图中绘制多条迹线是使用densityplot


点击标题查阅往期内容


R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资


01

02

03

04


az.plot_d

image.png

现在我们已经对 3 个模型的后验进行了采样,我们将使用 WAIC(广泛适用的信息标准)来比较 3 个模型。我们可以使用 PyMC3 附带的compare功能来做到这一点。

comp = az.compare(model_dict)
comp

image.png

我们可以看到最好的模型是,具有两个预测变量的模型。请注意,数据帧按从最低到最高 WAIC 的顺序(最差的模型)。

现在,我们将使用copmuted来生成预测,而不是基于单个模型,而是基于加权模型集。

ppc_w = pm.sample_posterior_predictive_w(

image.png

请注意,我们正在传递按其索引排序的权重。

我们还将计算最低 WAIC 模型的 PPC

ppc_2 = pm.sample_posterior_predi

比较这两种预测的一种简单方法是绘制它们的平均值和 hpd 区间

plt.yticks([])
plt.ylim(-1, 2)
plt.legend();

image.png

正如我们所看到的,两个预测的平均值几乎相同,但加权模型中的不确定性更大。我们已经有效地将我们应该选择哪个模型的不确定性传递到后验预测样本中。


结语:


还有其他方法可以平均模型,例如,显式构建一个包含我们拥有的所有模型的元模型。然后,我们在模型之间跳转时执行参数推理。这种方法的一个问题是,在模型之间跳跃可能会妨碍后验的正确采样。


版本信息


%load_ext watermark
%watermark -n -u -v -iv -w

image.png

相关文章
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
2月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
565 7
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
146 5
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
3月前
|
数据可视化 搜索推荐 Shell
Python与Plotly:B站每周必看榜单的可视化解决方案
Python与Plotly:B站每周必看榜单的可视化解决方案
|
3月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第33天】本文将介绍如何使用Python编程语言进行数据分析和可视化。我们将从数据清洗开始,然后进行数据探索性分析,最后使用matplotlib和seaborn库进行数据可视化。通过阅读本文,你将学会如何运用Python进行数据处理和可视化展示。
|
3月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
114 0
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
72 2
|
3月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
83 2

热门文章

最新文章

推荐镜像

更多