五月山雨 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 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?