问题:两种物种,物种A平均质量10,标准差5;物种B平均质量15,标准差2.5。现在从一群生物中选出20个已知质量的样本,怎么通过这些样本估算这群生物属于各物种的比例?
需求:先设一个uniform从0-1的先验p,怎么通过求p的后验分布图像求得这群生物属于物种A的比例?(用PyMC做)
如果可以的话请讲一下背后的数学原理,谢谢!
如何通过求后验分布求得样本中属于两种物种其中一种的概率?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
13条回答 默认 最新
- Leodong. 2023-12-07 21:21关注
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索并已验证,得到内容具体如下:
首先,我们需要导入所需的库,并定义物种A和物种B的参数。然后,我们将使用PyMC3库来构建贝叶斯模型,并通过后验分布计算样本中属于两种物种其中一种的概率。以下是完整的代码:
import numpy as np import pymc3 as pm import matplotlib.pyplot as plt # 定义物种A和物种B的参数 mean_A = 10 std_dev_A = 5 mean_B = 15 std_dev_B = 2.5 # 生成已知质量的样本 samples = np.random.normal(loc=[mean_A, mean_B], scale=[std_dev_A, std_dev_B], size=20) # 使用PyMC3构建贝叶斯模型 with pm.Model() as model: # 定义先验分布 prior = pm.Uniform('prior', lower=0, upper=1) # 定义似然函数 likelihood_A = pm.Normal('likelihood_A', mu=mean_A, sigma=std_dev_A, observed=samples[:, 0]) likelihood_B = pm.Normal('likelihood_B', mu=mean_B, sigma=std_dev_B, observed=samples[:, 1]) # 定义后验分布 posterior = pm.Deterministic('posterior', prior * (likelihood_A / (likelihood_A + likelihood_B))) # 采样 trace = pm.sample(2000, tune=1000) # 绘制后验分布图像 pm.plot_posterior(trace) plt.xlabel('后验概率') plt.ylabel('密度') plt.show()
背后的数学原理是贝叶斯推断。在这个问题中,我们有一个已知质量的样本集合,以及两个物种(物种A和物种B)的参数。我们的目标是估计这两个物种在样本集合中的相对比例。
为了实现这个目标,我们首先定义了一个均匀分布作为先验分布,表示我们对物种A和物种B之间没有特定关系的信念。然后,我们定义了两个正态分布作为似然函数,分别对应于物种A和物种B的质量分布。最后,我们通过将先验分布与似然函数相乘来计算后验分布。
通过后验分布,我们可以观察到样本中属于两种物种其中一种的概率。在这个例子中,我们可以通过绘制后验分布图像来观察这个概率。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 上传图片时提交的存储类型
- ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
- ¥15 VB.NET如何绘制倾斜的椭圆
- ¥15 在rhel8中安装qemu-kvm时遇到“cannot initialize crypto:unable to initialize gcrypt“报错”
- ¥15 arbotix没有/cmd_vel话题
- ¥15 paddle库安装时报错提示需要安装common、dual等库,安装了上面的库以后还是显示报错未安装,要怎么办呀?
- ¥20 找能定制Python脚本的
- ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
- ¥15 用C语言怎么判断字符串的输入是否符合设定?
- ¥15 通信专业本科生论文选这两个哪个方向好研究呀