Bayesian inference Using Gibbs Sampling

允许用户指定复杂的多层模型,并可使用MCMC算法来估计模型中的未知参数。

We use DAGs to specify models.


这里只涉及简单的贝叶斯网络,具体学习可见:

Carnegie Mellon University course 10-708, Spring 2017, Probabilistic Graphical Models

Ref: http://www.cnblogs.com/Dzhouqi/p/3204481.html

例子一

X and Y 不独立,但

X and Y 在Z情况下 条件独立。

表示:X ⊥ Y |Z

f (X, Y |Z) = f (X|Z) f (Y |Z).

知道了C 反而条件独立了? 如此理解:

a 孩子的血型是AB,其实“反作用”于c双亲不可能是O型血。然后,这个推断也影响了b孩子的血型可能性,即:也不可能是O型血。

  知道了c,比如c父母只有A and B血型因子,那么a and b孩子变为了在c已知的条件下的独立。

例子二

此例同上。

例子三

已知c,能得出a and b条件独立? 不能。


在Gibbs的一点用处

If we want to sample from p(A, B, C, D, F ) with a Gibbs sampler we define each marginal full conditional distribution using the conditional independence pattern of the DAG.


手头有这样的数据,如下:

建立一个模型吧:

简化模型:

指定”似然函数“和”先验分布”:

Deterministic functions can be removed/restructured, so that:


Bayesian inference Using Gibbs Sampling

Download:

http://www.openbugs.net/w/Downloads

Install:

To install this, unpack by typing

tar zxvf OpenBUGS-3.2.3.tar.gz
cd OpenBUGS-3.2.3

then compile and install by typing

./configure
make
sudo make install

Run:

lolo@lolo-UX303UB$ OpenBUGS
OpenBUGS version 3.2. rev
type 'modelQuit()' to quit
OpenBUGS>

Use:

https://www.youtube.com/watch?v=UhYAz6d5_qg

打开三类文件:model, data, init。

Model --> Specification 依次加载各个文件。

Inference --> Samples 其实就是监视Init里的四个参数。

Model --> Update 迭代操作一次(Here 每次1000下)


Prior Sensitivity Analysis  

The choice of prior(s) distribution must be determined with care, particularly, when the likelihood doesn't dominate the posterior.

If the likelihood dominates the posterior, the posterior distribution will essentially be invariant over a wide range of priors.

When the number of studies is large, the prior distribution will be less important. 数据量越大,先验的选择越不重要。

The non-informative prior distribution will be very useful in the situation when prior information, expectations and beliefs are minimal or not available.

Figure, 先验概率,后验概率 和 似然函数的关系

贝叶斯后验均值估计的最基本特性是伸缩性(shrinkage)。

  • 当似然函数的精度h0较大时, 后验均值主要受样本均值支配; 相反,
  • 当先验精度h1较大时, 后验均值主要受先验均值支配。

这就是为什么贝叶斯估计通常取先验精度较低的原因(方差给得较大),

也可以看出贝叶斯估计在调整先验精度下可以达到经典估计的效果,从某种意义上说经典估计是贝叶斯估计的特殊形式。

通过两种精度的调整达到对后验均值的估计叫做伸缩性估计特性, 所有贝叶斯估计的均值都具有伸缩性估计这个特性。

最后,推荐一篇至少题目看上去很牛的文章:


官方:http://www.openbugs.net/Manuals/InferenceMenu.html

民间1:http://www.biostat.jhsph.edu/~fdominic/teaching/bio656/labs/labs08/Lab8.IntroWinBUGS.pdf

民间2:http://www.stats.ox.ac.uk/~cholmes/Courses/BDA/Winbugs/winbugs-help.pdf

民间的更好,详细,良心作品。

收敛性检验:

• For models with many parameters, it is inpractical to check convergence for every parameter, so just chose a random selection of relevant parameters to monitor

一个一个地检查。

– For example, rather than checking convergence for every element of a vector of random effects, just chose a random subset (say, the first 5 or 10).

• Examine trace plots of the sample values versus iteration to look for evidence of when the simulation appears to have stabilised: (查看是否有稳定的迹象)

– To obtain ’live’ trace plots for a parameter:

  ∗ Select Samples from the Inference menu.

  ∗ Type the name of the parameter in the white box marked node.

  ∗ Click once with the LMB on the box marked trace: an empty graphics window will appear on screen.

  ∗ Repeat for each parameter required.

  ∗ Once you start running the simulations (using the Update Tool, trace plots for these parameters will appear ’live’ in the graphics windows.

– To obtain a trace plot showing the full history of the samples for any parameter for which you have previously set a sample monitor and carried out some updates:

  ∗ Select Samples from the Inference menu.

  ∗ Type the name of the parameter in the white box marked node (or select name from pull down list).

  ∗ Click once with the LMB on the box marked history: a graphics window showing the sample trace will appear.

  ∗ Repeat for each parameter required.

uniform时,将初始值调高,看明显看出收敛的速度。毕竟在实践当中,我们并不会知道,甚至无法估计参数的大概范围。

以下是model中变量的假设分布换为gaussian分布,收敛快了许多。

[Bayes] openBUGS: this is not the annoying bugs in programming的更多相关文章

  1. [Math] Hidden Markov Model

    链接:https://www.zhihu.com/question/20962240/answer/33438846   霍金曾经说过,你多写一个公式,就会少一半的读者. 还是用最经典的例子,掷骰子. ...

  2. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...

  3. [PGM] What is Probabalistic Graphical Models

    学术潜规则: 概率图模型提出的意义在于将过去看似零散的topic/model以一种统一的方式串联了起来,它便于从整体上看待这些问题,而非具体解决了某个细节. 举个例子:梯度下降,并非解决神经网络收敛问 ...

  4. [Scikit-learn] Dynamic Bayesian Network - Kalman Filter

    看上去不错的网站:http://iacs-courses.seas.harvard.edu/courses/am207/blog/lecture-18.html SciPy Cookbook:http ...

  5. 科学计算软件——Octave安装

    Octave是一个旨在提供与Matlab语法兼容的开放源代码科学计算及数值分析的工具,是Matlab商业软件的一个强有力的竞争产品. 参考:[ML:Octave Installation] Gener ...

  6. [Django] Setting up Django Development Environment in Ubuntu 14.04

    1. Python Of course you will need Python. Still Python 2.7 is preferred, however if you would like t ...

  7. Core Java Volume I — 3.5. Operators

    3.5. OperatorsThe usual arithmetic operators +, -, *, / are used in Java for addition, subtraction, ...

  8. 转:PHP – Best Practises

    原文来自于:http://thisinterestsme.com/php-best-practises/ There are a number of good practises that you s ...

  9. Delphi资源大全

    A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awe ...

随机推荐

  1. asp.net通过distinct过滤集合(list)中重复项的办法

    /// <summary> /// 权限Distinct比较器 /// </summary> public class PermissionIdComparer : IEqua ...

  2. JavaScript之Date日期对象扩展

    各种时间加减 收藏起来以备后用 //名称:日期加法函数 //参数:part(year.month.day.hour.minute.second.millisecond) //返回:Date对象 Dat ...

  3. 你应该更新的 Java 知识之常用程序库【转载】

    在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进.如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东 ...

  4. WPF如何为程序添加splashScreen(初始屏幕)

    一.考虑到大部分的splashscreen其实都只是一个图片,所以最简单的做法是,先导入一张图片,然后设置它的生成操作为“splash screen” 二.通过程序设置SplashScreen pub ...

  5. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...

  6. ShardedJedisPool的使用

    package com.test; import java.util.ArrayList; import java.util.List; import redis.clients.jedis.Jedi ...

  7. 【SqlServer】SqlServer中的更新锁(UPDLOCK)

    UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改.当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加 ...

  8. SQL Server 数据库基础笔记分享(下)

    前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...

  9. mongodb高级聚合查询(转)

    在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...

  10. mysql分享二-防止sql注入

    一:pdo 提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理.如果应用程序只使用预处理语句,可以确保不会发生SQL 注入.(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQ ...