加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何使用WinBugs做贝叶斯统计

(2011-07-08 15:17:38)
标签:

it

原文地址:http://yinlianqian.blog.163.com/blog/static/6488756720082268510559/

作者:思想的成长轨迹

 

写在这里保存下来,我自己以后要看看:)

 Bugs 网站:www.mrc-bsu.cam.ac.uk/bugs

1. 点选 图示,进入WinBugs,开启 (1)新的程式编辑视窗or (2)已存在的程式功能表列:File-New 功能表列:File-Open

2. 撰写程式:程式包含三部份.

(1) Model:建构贝氏统计模式,设定各参数的prior distribution及各参数间的关系等.

(2) Data:以list指令起始,列出各参数的样本观察值及样本个数(N= ).

(3) Initial value:同样运用list指令,列出各参数的起始值.

ps:上述三大部份的程式撰写顺序并不会影响程式执行结果

例:Seeds: random effects logistic regression (下图为WinBugs Examples中Seeds的例子)

Model:

ri ~ Binomial(pi, ni)

logit(pi) = α0 + α1x1i + α2x2i + α12x1ix2i + bi

bi ~ Normal(0, τ)

在功能表列选取File → Save as 即可将程式储存於指定的档案夹内

这是状态列

Initial value

Data

Bayesian model

Prior distribution的设定

 

3. 执行程式

Step 1 在功能表列中点选:Model → Specification,开启Specification Tool 视窗

Step 2 Check model:

选取Model程式中的关键字"model ",按下Specification Tool视窗的check model

键,若此部份程式的语法及定义无误,则:

(1) Specification Tool 视窗的 compile 及 load data 键将会浮现,即可供执行

点选;

(2) WinBugs左下角的状态列将会显示'model is syntactically correct'

Step 3 Load data:

选取Data程式中的关键字" list ",按下Specification Tool视窗的 load data 键

若资料型式无误,则WinBugs左下角的状态列将会显示' data loaded '

可选择一次simulate数个chains

Step 4 Compile Model:

直接按下Specification Tool视窗的 compile 键,若程式无误,则WinBugs左

下角的状态列将会显示' model compiled '

Step 5 Load initial values:

选取Initial value程式中的关键字" list ",按下 load inits 键,若WinBugs

左下角的状态列显示:

(1) ' initial values loaded: model initialized ' 表示资料型式无误,接续Step6.

(2) ' initial values loaded: model contains uninitialized nodes ' 若程式没有缺

漏,会出现这样的讯息,则有两种可能:

(Ⅰ) 当只simulate一个chain时,出现上述的讯息表示程式中尚有一些参数

还未定义起始值,会发生这样的状况,有时是因为未提供起始值之参数

(如Seeds例子中的:sigma) 与其他参数间 (如:tau) 具有函数对应关

系,(如:sigma <- 1 / sqrt(tau));在此情况下,须再按下 gen inits 键,

让WinBugs依参数间的对应关系,自动为剩馀未定义起始值的参数生

成一个起始值,执行後,WinBugs左下角的状态列将会显示' initial

values generated: model initialized '.

(Ⅱ) 当simulate 两个以上的chains时,这个讯息代表至少有一个chains 的

参数尚未定义起始值;同样地,亦可按下 gen inits 键,自动生成起

始值,或者回到程式,自行定义起始值.

Step 6 关闭Specification Tool视窗


4. Monitor 感兴趣的参数

Step 1 在功能表列中点选:Inference → Samples,开启Sample Monitor Tool 视窗

Step 2 在node方块中输入想要monitor的参数,如:在Seeds范例中,欲generate posterior

samples的参数为:alpha0,alpha1,alpha2,alpha12,tau,sigma,此步骤便是

在node方块中输入这些参数名称,每输入一个参数名称,便按一次 set 键,

待完全键入後,关闭此视窗.

ps:由於此步骤之作用仅在monitor参数,视窗中之beg,end,thin或chains皆

不会有任何作用,亦即更改其中的数值皆不会对output有任何影响,在此先

省略不谈,之後在simulated value时将会对这些指令之功用提出简略的说明.

……


5. Update the Model

Step 1 在功能表列中点选:Model → Update,开启Update Tool 视窗

Step 2 在update方块中键入想要generate posterior samples的样本数,如:3000笔,按

下 update 键,则iteration将由0 run 至3000,WinBugs左下角的状态列将会

显示generate posterior samples所需的时间,如:' updates took 1 s ',执行完後

关闭Update Tool 视窗. refresh=100 表示在iteration方块中,将会以100为单位,显示正在update

的进度,refresh值愈小,将愈加重其显示的量,则update速度会变慢.

若thin方块中之数值改为5,表示每隔5笔收一笔资料,共收3000笔,以整

个Markov chain来看,WinBugs会保留的样本是第5, 10, 15,…, 15000笔资料

 

6. 显示simulated values (posterior samples)

Step 1 在功能表列中点选:Inference → Samples,开启Sample Monitor Tool 视窗

Step 2 Sample Monitor Tool视窗内各个选项的执行程序与作用:

(1) 由於之前曾在此视窗中monitor各个参数,因而现在若欲同时显现所有

monitor 参数的结果,则可在node 方块中键入'*',以代表全体参数;

若仅需部分参数的posterior samples及其统计推论结果,则在node方块中输

入该参数名即可.

(2) Burn in:为降低起始值的影响,选取递回後较稳定的资料,因此在分析时

常常需要Burn in 前面较不稳定的资料。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有