`
penergy
  • 浏览: 39814 次
社区版块
存档分类
最新评论
阅读更多
这篇文章并非原创,只是对下面PPT的总结和理解,作为入门性文字说明。
http://www.people.fas.harvard.edu/~plam/teaching/methods/mcmc/mcmc.pdf

MH算法:Metropolis Hasting Algorithm
Gibbs抽样:Gibbs Sampling

上述两个算法是两个典型的马尔科夫链蒙特卡洛方法(Markov Chain Mento Carlo Method),作为随机抽样方法,普遍用于多元随机变量的抽样。通俗的说,通过迭代方法从目标随机概率分布中抽取样本。

关于蒙特卡洛方法和马尔科夫链,以及大数法则和中心极限定理,这边的证明略去。PPT中有详细解释。

1. Gibbs 抽样
Gibbs抽样的本质就是从已知的联合概率分布p(θ1, θ2,....|Y)(后验分布)推导出满条件分布,然后从满条件分布中抽取样本——p(θj|θ-j, Y)
这里有个问题:为什么可以从联合概率分布中求解满条件分布?
因为根据Hammersley-Clifford Theorem,任何联合概率可以由他的条件概率计算得来。
有了以上基本概念后,Gibbs抽样可以总结,先求取满条件分布,再对满条件分布抽烟。
满条件分布求取:
     a)先对后验分布进行整理,忽略相关的常数
     b)分别对参数θ1,θ2,.......进行条件分布求解
     c)正规化条件分布
Gibbs Sampler: 假设有三个参数θ1,θ2,θ3,后验分布为p(θ|Y)
     a)给参数 θ 初始值,记作 θ(0), θ取自于初始转移分布得来。
     b)对任意一个参数进行基于满条件分布的参数估计。为方便起见,我们从θ1开始,从p(θ1|θ2(0),θ3(0),Y)中得到θ1(1)
     c)同理,从p(θ2|θ1(1),θ3(0),Y)中得到θ2(1)
     d)从p(θ3|θ1(1),θ2(1),Y)中得到θ3(1)
     e)反复b,c,d步骤,直到求取到M个值之后停止。
     f)可以对样本进行burn-in和thinning操作
例子:
       一个核电厂有十个水泵,已知数据各水泵出故障次数,以及观察到出故障的时间
     
 
       y <- c(5, 1, 5, 14, 3, 19, 1, 1, 4, 22)
       t <- c(94, 16, 63, 126, 5, 31, 1, 1, 2, 10)
      

建立关于水泵故障次数的泊松分布,λi 为单位时间每个水泵的故障次数。似然函数有:
                   ∏i=1~10 Poisson(λi *ti)
假设Gamma(α, β) 是 λ 的先验分布。α=1.8. 所有的 λi都来自于这个分布。
假设Gamma(γ , δ) 是 β 的先验分布。γ=0.01 , δ=1
所以有:
p(λ, β|y, t) ∝  (∏i=1~10 Poisson(λi *ti)*Gamma(α, β))*Gamma(γ , δ)
经过整理有:
p(λ, β|y, t) ∝ ( ∏i=1~10 λi^(yi +α−1)*e^(−(ti +β)λi))*(β^(10α+γ−1)e^(−δβ))
通过上述联合分布,可以求得满条件分布:
p(λi |λ−i , β, y, t) ∝ λi^(yi +α−1)*e^(−(ti +β)λi)
p(β|λ, y, t)∝ β^(10α+γ−1)e^−β(δ+Sumi=1~10 λi)

gibbs<-function(n.sims,beta.start,alpha,gamma,delta,y,t,burnin=0,thin=1){
  beta.draws<-c()
  lambda.draws<-matrix(NA,nrow=n.sims,ncol=length(y))
  beta.cur<-beta.start
  lambda.update<-function(alpha,beta,y,t){
    rgamma(length(y),y+alpha,t+beta)
  }
  beta.update<-function(alpha,gamma,delta,lambda,y){
    rgamma(1,length(y)*alpha+gamma,delta+sum(lambda))
  }
  for(i in 1:n.sims){
    lambda.cur<-lambda.update(alpha=alpha,beta=beta.cur,y=y,t=t)
    beta.cur<- beta.update(alpha=alpha,gamma=gamma,delta=delta,lambda=lambda.cur,y=y)
    if(i>burnin&&(i-burnin)%%thin==0){
      lambda.draws[(i-burnin)%/%thin,]<-lambda.cur
      beta.draws[(i-burnin)/thin]<-beta.cur
    }
  }
  return(list(lambda.draws=lambda.draws,beta.draws=beta.draws))
}

其中lambda.update 方法和beta.update 方法是Gibbs Sampler过程。循环语句是对样本进行burn-in和thinning操作。

最后求取平均值,即所求参数λ, β的期望值。
posterior <- gibbs(n.sims = 10000, beta.start = 1, alpha = 1.8, gamma = 0.01, delta = 1, y = y, t = t)
colMeans(posterior$lambda.draws)
mean(posterior$beta.draws)

      


     
分享到:
评论

相关推荐

    统计计算-Gibbs抽样

    在R语言中,可以通过编写类似于上述代码的程序来实现Gibbs抽样,以解决实际问题,如贝叶斯统计分析。通过不断迭代,Gibbs抽样可以生成近似的样本序列,这些序列对于理解和探索复杂概率分布的性质至关重要。

    matlab_code.rar_Gibbs 抽样算法_MCMC抽样_gibbs抽样matlab_分布 抽样_联合概率分布

    Gibbs抽样是一种在统计学和统计物理学中广泛使用的马尔科夫链蒙特卡洛(MCMC)方法,用于模拟复杂多维概率分布的样本。在给定的"matlab_code.rar"压缩包中,包含了两个关键的MATLAB代码文件——"Gibbs.m"和"MC.m",...

    LDA详解,Gibbs抽样

    ### LDA详解与Gibbs抽样方法 #### 引言 本文档旨在详细介绍文本分析中的参数估计方法,特别是针对离散概率分布的情况,这对于理解基于主题的文本分析方法(如概率潜在语义分析(PLSA)、潜在狄利克雷分配(LDA)等...

    Gibbs抽样R语言_-Gibbs-.zip

    Gibbs抽样R语言_-Gibbs-

    LDA与Gibbs抽样原理

    精要的证明推理,有关:LDA,主题模型,数学推导,GIbbs抽样 英文版的,但是还是很容易看懂 很短

    R语言——简单的抽样方法梳理

    我的课程作业……包括Metropolis,Metropolis Hastings, Laplace Approximation, Gibbs,Bayesian liner regression,Bayesian logistic regression的原理简单介绍和算法,水平有限一定会有错,发这就是为了保存...

    基于EM算法和Gibbs抽样的污染模型的参数估计.pdf

    ### 基于EM算法和Gibbs抽样的污染模型的参数估计 #### 摘要及背景 本文探讨了当简单回归模型中的响应变量受到另一随机变量序列污染时,如何进行模型参数和污染系数的估计。研究采用了两种不同的方法:极大似然估计...

    Markov chains, Gibbs Fields Monte Carlo Simulation, and Queues.pdf

    根据提供的文件信息,本书《Markov chains, Gibbs Fields Monte Carlo Simulation, and Queues》由Pierre Bremaud撰写,被广泛认为是学习随机过程的重要教材之一。以下将根据标题、描述以及部分目录信息来总结书中的...

    基于LDA的主题分析

    本文主要阐述了基于LDA模型的主题文本分析,涵盖了LDA的基本原理、基于LDA模型的主题文本分析、实验设计、Gibbs抽样等方面的知识点。 第一,LDA模型的基本原理:LDA模型是一种基于概率论的主题模型,通过将文档表示...

    统计实验及R语言模拟

    R语言支持多种MCMC算法,如Metropolis-Hastings和Gibbs采样。 5. 系统模拟仿真:系统模拟仿真涉及使用计算机程序来模拟现实世界系统的运作。R语言可用于构建模型、运行模拟实验,并分析结果。系统仿真在工业工程、...

    基于Gibbs抽样的贝叶斯随机波动模型分析

    为了从参数的后验分布中获得模型参数的估计值及其置信区间,研究者往往采用蒙特卡洛马尔可夫链(MCMC)模拟技术,其中Gibbs抽样是一种重要的算法。通过Gibbs抽样,可以从复杂的多维后验分布中逐一抽取参数样本,进而...

    gibbs_shiny:Gibbs 采样器演示(Shiny 应用程序)

    这个项目是一个基于R语言的Shiny应用程序,专门用于展示Gibbs采样器的工作原理和应用。Gibbs采样器是马尔可夫链蒙特卡洛(MCMC)方法中的一种,广泛用于统计推断,特别是在处理多变量贝叶斯模型时。通过交互式界面,...

    吉布斯采样matlab代码-gibbs_ldaplusplus_multi_thread:gibbs_ldaplusplus_multi_th

    在IT领域,吉布斯采样是一种常用的马尔科夫链蒙特卡洛(MCMC)方法,常用于处理高维概率分布的抽样问题,尤其在统计机器学习、图形模型等领域应用广泛。本资源是基于MATLAB实现的多线程吉布斯采样代码——"gibbs_...

    基于Gibbs抽样算法的贝叶斯动态面板数据模型分析 (2011年)

    针对现有动态面板数据分析中存在偶发参数和没有考虑模型参数的不确定性风险问题,提出了基于Gibbs抽样算法的贝叶斯随机系数动态面板数据模型。假设初始值服从平稳分布,自回归系数服从Logit正态分布的条件下,设计了...

    mcmc-gibbs-introduction

    在统计学和机器学习领域,马尔可夫链蒙特卡洛(MCMC)方法和吉布斯抽样(Gibbs Sampling)是非常重要的随机模拟技术。本篇入门资料《mcmc-gibbs-introduction》将为读者提供MCMC和Gibbs抽样的基础知识。 首先,文档...

    吉布斯采样matlab代码-Bayesian_Approximate_Inference:该项目应用Gibbs采样和均值场方法来计算推理和MA

    吉布斯抽样 用均值场法计算推论和推论。 此外,通过Jupyter Notebook的变量消除方法可以计算出准确的结果。 ================================================== ============================ [[Bayesian_roximate...

    实验4 周期信号的合成、分解与Gibbs现象

    "实验4 周期信号的合成、分解与Gibbs现象" 本实验的主要目的是让学生熟悉信号的合成、分解原理,加深对傅立叶级数的理解,并了解吉布斯现象(Gibbs)。实验内容包括信号的合成、分解、吉布斯现象的分析,并使用...

    实验报告2连续时间信号的频域分析

    4. **MATLAB编程**:实验中使用的Q2_2.m, Q2_4.m等文件很可能是MATLAB编写的代码,用于实现傅里叶变换、绘制频谱图等操作。例如,Q2_7.m和Q2_6.m可能是用于执行不同信号的频域分析,而Q2_2.m可能涉及基本的傅里叶...

    GibbsLDA++(C++版)

    3. **Gibbs抽样**:通过Gibbs抽样迭代更新每个单词的主题分配,每次迭代都根据当前状态重新估计主题分布。 4. **参数估计**:随着迭代次数增加,模型参数趋于稳定,最终得到主题-单词分布和文档-主题分布。 5. **...

Global site tag (gtag.js) - Google Analytics