五月山雨 2023-12-07 21:02 采纳率: 75%
浏览 5
已结题

如何通过求后验分布求得样本中属于两种物种其中一种的概率?

问题:两种物种,物种A平均质量10,标准差5;物种B平均质量15,标准差2.5。现在从一群生物中选出20个已知质量的样本,怎么通过这些样本估算这群生物属于各物种的比例?
需求:先设一个uniform从0-1的先验p,怎么通过求p的后验分布图像求得这群生物属于物种A的比例?(用PyMC做)
如果可以的话请讲一下背后的数学原理,谢谢!

  • 写回答

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的质量分布。最后,我们通过将先验分布与似然函数相乘来计算后验分布。

    通过后验分布,我们可以观察到样本中属于两种物种其中一种的概率。在这个例子中,我们可以通过绘制后验分布图像来观察这个概率。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月7日

悬赏问题

  • ¥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 通信专业本科生论文选这两个哪个方向好研究呀