分布是一系列数字的规律组合。如果在收集了历史中的几百个数据后,我想知道这群数据背后的发射机制是什么,那么就得去寻找这个分布。当然这里的重点不是寻找分布,而是在已知分布的情况下,如何模拟这个机制发射出来的一系列数字呢?

MCMC(Markov Chain Monte Carlo)是马尔科夫链下的蒙特卡洛方法,因为马尔科夫链在满足某些条件下具有平稳分布,如果能够将平稳分布与目标分布联系起来,那么就可以达到对目标分布进行抽样的目的。这里主要介绍的是Metropolis Hasting 算法和Gibbs sampling 算法。

一、Metropolis Hasting

1、算法理解

我们的目标是对Target Distribution进行抽样,首先,我们要引入一条具有平稳分布的马氏链,这条马氏链收敛的平稳分布我们称为Proposal Distribution,而这条马氏链的表现形式是概率转移矩阵

,状态空间
,状态空间也即是Proposal distribution的所有可能取值集合。

如何根据这条马氏链求得目标分布呢?这里由马氏链的细致平稳性引入。

是目标分布下的随机变量,
是proposal distribution下的随机变量。
(1.1)成立。(由马氏链的细致平稳性得到,表示i,j状态之间的能量转换相等)
(1.2)(因为
是两个不同的分布)
(1.3)

为了使(1.2)式成立,所以引入了接受率

。其中
即将不等式的左右两边互相相乘,即可得到式子(1.3)。接受率
表示是否决定抽取下一个样本(i.e., 接受样本j),因此我们需要将这个概率实现,因为在实际抽样过程中,决定抽样和不抽样是一个二元过程,而不是说以多大的概率决定抽样。这个概率实现可以用伯努利分布,也可以用均匀分布:当均匀分布下的数值小于接受率时,决定抽样,反之不抽样。

以上就是Metropolis抽样方法的全部内容了,而Metropolis hasting 算法则对接受率做了一点改进。当接受率太小的时候,我们很难从当前的样本值跳到其他状态,所以对

进行了扩大。将
中的较大值扩充到1(即一定会抽取下个样本),另外一个值等比例扩大。经过计算可以得到表达式
。在计算接受率的过程中,我们就会发现,目标分布的常数项被抵消了,也去除了归一化的过程。

2、proposal distribution的选取

当proposal distribution与目标分布越靠近时,抽取的样本也就越合理。但是proposal distribution下的马氏链如何确定,两个分布的距离如何衡量,这些也都是可以继续探讨也需要权衡的问题。

3、共轭的正态分布示例

已知,
未知,在贝叶斯统计下,
是一个随机变量,其先验分布为
已知。如何利用Metropolis-Hasting算法,在观察数据Y下求得
后验分布得期望和方差?

我们用M-H抽样算法来检验上面得后验分布是否准确。即在已知得各参数和观测值y下抽出一系列的

  1. 找到下一个状态
    。这里proposal distribution设为正态分布。生成
    ,
    .
  2. 接受率
    .其中,
    为随机变量
    的概率密度。
  3. 接受率的概率实现。如果接受,
    ,否则,
import 

二、Gibbs sampling

1、算法理解

Gibbs sampling适用于高维分布的抽样问题。在M-H抽样算法的基础上,如果我们能够比较容易的得到条件分布,那么就可以通过固定其他维度,一次只对一个维度上的条件分布抽样的方法进行全局抽样。

Gibbs sampling里的接受率恒为1。举例说明,

两个样本点满足马氏链的细致平稳条件。因为
其中,
表示从A点转移到B点的转移概率。所以在二维的分布中,可以得到从任意一个点转移到另外一个点都是平稳的,限制是每次变换只能转移一个维度。二维转移图可如下所示。

2、示例

一只鸡每天会下N个蛋,N服从参数为

的泊松分布,每个鸡蛋成功孵出小鸡的比例为p。p未知,其先验分布服从beta分布。
.参数
已知。我们的观测数据只有每天孵出的小鸡个数
,
属于隐变量,观测不到。如何通过Gibbs Sampling 方法找到p的后验期望呢?

在不引入随机变量N的时候,后验分布比较麻烦。引入N后,可得,

通过迭代,即可得到p,N的抽样值。

x, lambda1, a, b = 7, 10, 1, 1
niter = 10000
p = [0 for i in range(niter)]
N = [0 for i in range(niter)]#初始值
p[0] = 0.5
N[0] = 2*x
for i in range(1,niter):p[i] = random.betavariate(x+a, N[i-1]-x+b)N[i] = x + np.random.poisson(lambda1*(1-p[i-1]))plt.hist(x = p, bins = 100,normed=True)
plt.hist(x = N, bins = 100,normed=True)
plt.show()

[1][2][3]

参考

  1. ^https://blog.csdn.net/lin360580306/article/details/51240398
  2. ^https://www.jianshu.com/p/dc7624cf6adb
  3. ^Introduction to Probability--Joseph K.Blitzstein

t分布f分布与样本均值抽样分布_分布模拟1——MCMC抽样方法相关推荐

  1. 概论第6章_正态总体的抽样分布_卡方分布_F分布_t分布

    一 卡方分布 定义 设 X 1 , X 2 , . . . , X n X_1, X_2,..., X_n X1​,X2​,...,Xn​ 独立同分布于标准正态分布N(0, 1), 则 χ 2 = X ...

  2. 数理统计四大分布---正态分布、卡方分布、学生t分布和F分布

    在统计学上,我们会遇到一些常见的分布,除了正态分布外,,如t检验对应的t分布,检验对应的分布,方差分析对应的F分布等.这些分布是统计学的基础,在假设检验.方差分析等领域都起着至关重要的作用.在此,我们 ...

  3. matlab中表示拉普拉斯分布_分布拟合——正态/拉普拉斯/对数高斯/瑞利 分布

    作者:桂. 时间:2017-03-16  20:30:20 声明:欢迎被转载,记得注明出处~ 前言 本文为曲线与分布拟合的一部分,主要介绍正态分布.拉普拉斯分布等常用分布拟合的理论推导以及代码实现. ...

  4. 各种各样的分布函数-t分布,F分布

    t-分布 设XXX~N(0,1)N(0,1)N(0,1),YYY ~ χ2(n)\chi^2(n)χ2(n),且XXX与YYY相互独立,则称随机变量T=XY/nT=\frac{X}{\sqrt{Y/n ...

  5. 常用的概率分布:二项式分布,贝塔分布,狄里克雷分布

    知识点:伯努利分布.二项式分布.多项式分布.先验概率,后验概率,共轭分布.贝塔分布.贝塔-二项分布.负二项分布.狄里克雷分布,伽马函数.分布 一,伯努利分布(bernouli distribution ...

  6. 《概率论与数理统计》-第二章 随机变量及其分布-第二节 连续型随机变量及其分布-笔记

    目录 第二节 连续型随机变量及其分布 密度函数 定义 性质 常用离散型随机变量的分布 第二节 连续型随机变量及其分布 密度函数 定义 设F(x)F(x)F(x)是随机变量XXX的分布函数,若对任意的实 ...

  7. 分布问题(二元,多元变量分布,Beta,Dir)

    这涉及到数学的概率问题. 二元变量分布:       伯努利分布,就是0-1分布(比如一次抛硬币,正面朝上概率) 那么一次抛硬币的概率分布如下: 假设训练数据如下: 那么根据最大似然估计(MLE),我 ...

  8. 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

    详情链接 :基于R语言.MaxEnt模型融合技术的物种分布模拟.参数优化方法.结果分析制图与论文写作 内容介绍:  第一章 .理论篇 以问题导入的方式,深入掌握原理基础 : 什么是MaxEnt模型? ...

  9. R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

    基于R语言.MaxEnt模型融合技术的物种分布模拟.参数优化方法.结果分析制图与论文写作技术应用 第一章.理论篇以问题导入的方式,深入掌握原理基础 什么是MaxEnt模型? MaxEnt模型的原理是什 ...

最新文章

  1. Linux之sed命令
  2. 十以内的加减java编写程序_Java实现随机出题,10道10以内加减法计算代码实例
  3. tomcat访问软链接资源
  4. QT的QPlace类的使用
  5. python redis 性能测试台_Redis性能测试
  6. zabbix mysql复制延迟_Zabbix监控mysql主从复制状态
  7. ServletResponse的getOutputStream()与getWriter()使用冲突
  8. 淘宝爬登录、取个人资料、微博绑定、收货地址、支付宝绑定设置、安全设置等信息、购物车、收藏宝贝和店铺、个人积分、退款维权、我的足迹...
  9. 软件工程的完整生命周期
  10. ”今日校园“App用户体验分析
  11. 给上层添加SuperSu来获取root权限
  12. WebSocket实现在线人数统计
  13. PHP发送邮件SMTP发邮件,超简单引用,CtrlCV即可实现邮件反馈系统
  14. Win10+Python3+OpenCV+CUDA——在win中配置OpenCV4.5并与Python环境绑定
  15. ICC_floorplan流程笔记
  16. SpringBoot 如何进行参数校验,老鸟们都这么玩的!
  17. 我能想到最快乐的事,就是把所有异性都处成朋友
  18. 边缘设备、系统及计算杂谈(4)—形态和玩家
  19. 企业为什么选择SDWAN代替MPLS?
  20. dapper mysql 拓展_Dapper.Common基于Dapper的开源LINQ超轻量扩展

热门文章

  1. LeetCode 908. 最小差值 I
  2. oracle 打开 ctl,Oracle 19c 随系统systemctl启动数据库
  3. ubuntu memcached php,如何在 Ubuntu 18.04 上安装 Memcached
  4. mysql的where字句调优_mysql中select和where子句优化的总结
  5. 利用Python把四张图片按照顺序拼接起来
  6. python自动化安装软件_python自动化安装源码软件包
  7. 为什么python是解释型面向对象的语言_python为什么是面向对象的
  8. matlab 转换为正整数_【MATLAB】专题1笔记 MATLAB基础知识
  9. 大众点评订单系统分库分表实践
  10. 开源开放 | 细粒度可循证医学文档知识融合表示和推理(CCKS2021)