如何使用WinBugs做贝叶斯统计
(2011-07-08 15:17:38)
标签:
it |
原文地址:http://yinlianqian.blog.163.com/blog/static/6488756720082268510559/
作者:思想的成长轨迹
写在这里保存下来,我自己以后要看看:)
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 前面较不稳定的资料。