贝叶斯统计后验概率Python实现

from scipy.stats import beta
import matplotlib.pyplot as plt
import numpy as np
import sympy as sy
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#X二项分布,n=5,x=3
#似然函数
x1=np.arange(0,1,0.01)
y1=10*x1**3*(1-x1)**2
plt.plot(x1,y1,label="似然函数")

#先验为U(0,1)
a,b=4,3
x2 = np.linspace(beta.ppf(0, a, b),beta.ppf(1, a, b), 100)#ppf分位数
plt.plot(x2, beta.pdf(x2, a, b),label="先验为U(0,1)")

# 先验为三角分布-2x+2
x3=np.arange(0,1,0.01)
y3=140*(-x3+1)*x3**3*(1-x3)**2
plt.plot(x3,y3,label="先验为三角分布-2x+2")

#先验分布为倒三角分布2x
x4=np.arange(0,1,0.01)
y4=105*x4**4*(1-x4)**2
plt.plot(x4,y4,label="先验为倒三角分布2x")

plt.title("不同先验分布下的后验分布对比\n X$\sim B(5,"r"\theta),x=3$")#latex语法,注意Python中“\”为转义字符
plt.legend()#图例,loc关键字传参

#算期望
xx=sy.symbols("xx")
yy=xx*105*xx**4*(1-xx)**2
sy.integrate(yy,(xx,0,1))

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贝叶斯统计是一种基于概率统计方法,用于推断未知参数的概率分布。在Python中,可以使用一些库来实现贝叶斯统计,比如PyMC3和Stan等。 下面我们以PyMC3为例来演示如何实现贝叶斯统计。 首先,我们需要安装PyMC3库。可以使用pip来安装: ``` pip install pymc3 ``` 接下来,我们用一个简单的例子来说明如何使用PyMC3来实现贝叶斯统计。假设我们有一枚硬币,我们不知道它正面朝上的概率是多少,我们可以通过投掷硬币的结果来推断这个概率。我们假设这个硬币正面朝上的概率是p,我们可以用伯努利分布来描述硬币的投掷结果,即: $$ Y \sim \text{Bernoulli}(p) $$ 其中,Y表示硬币的投掷结果,取值为0或1,0表示反面朝上,1表示正面朝上。 我们需要定义一个先分布来描述我们对p的先知识,假设我们对p的先分布是Beta分布,即: $$ p \sim \text{Beta}(a, b) $$ 其中,a和b是Beta分布的参数,表示我们对p的先知识。 我们可以使用PyMC3中的模型来描述这个问题: ```python import pymc3 as pm # 定义模型 with pm.Model() as coin_model: # 定义先分布 p = pm.Beta('p', alpha=1, beta=1) # 定义似然函数 y = pm.Bernoulli('y', p=p, observed=[1, 0, 0, 1, 1]) # 进行推断 trace = pm.sample(1000, tune=1000) ``` 在这个模型中,我们首先定义了一个模型coin_model,然后定义了一个Beta分布作为p的先分布,参数alpha和beta都设为1,表示我们对p的先知识不是很确定。 接着,我们定义了一个似然函数,使用Bernoulli分布来描述硬币的投掷结果,observed参数表示我们观测到的数据,即硬币投掷的结果。 最后,我们使用PyMC3中的sample函数来进行推断,参数1000表示我们要采样1000次,tune参数表示我们要进行1000次的热身,使得采样结果更加准确。 我们可以使用traceplot函数来查看采样结果: ```python import matplotlib.pyplot as plt pm.traceplot(trace) plt.show() ``` 可以看到,我们的后分布大致呈现出一个Beta分布的形状,这是因为我们使用Beta分布作为先分布的缘故。我们可以使用summary函数来查看后分布的统计信息: ```python pm.summary(trace) ``` 输出结果: ``` mean sd hpd_3% hpd_97% ... ess_sd ess_bulk ess_tail r_hat p 0.57112 0.143434 0.2972 0.84165 ... 918.91 909.534 1082.69 1.0 [1 rows x 11 columns] ``` 可以看到,后分布的均值为0.57112,标准差为0.143434,95%的后分布置信区间为[0.2972, 0.84165]。我们还可以计算出后分布的其他统计量,比如中位数、标准误等。 使用PyMC3来实现贝叶斯统计非常简单,只需要定义一个模型,然后在模型中定义先分布和似然函数,最后使用sample函数进行采样即可。PyMC3提供了丰富的统计函数和可视化工具,可以方便地对采样结果进行分析和展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值