WinBUGS在统计分析中的应用.docx

上传人:b****5 文档编号:5541710 上传时间:2022-12-19 格式:DOCX 页数:34 大小:79.89KB
下载 相关 举报
WinBUGS在统计分析中的应用.docx_第1页
第1页 / 共34页
WinBUGS在统计分析中的应用.docx_第2页
第2页 / 共34页
WinBUGS在统计分析中的应用.docx_第3页
第3页 / 共34页
WinBUGS在统计分析中的应用.docx_第4页
第4页 / 共34页
WinBUGS在统计分析中的应用.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

WinBUGS在统计分析中的应用.docx

《WinBUGS在统计分析中的应用.docx》由会员分享,可在线阅读,更多相关《WinBUGS在统计分析中的应用.docx(34页珍藏版)》请在冰豆网上搜索。

WinBUGS在统计分析中的应用.docx

WinBUGS在统计分析中的应用

WinBUGS在统计分析中的应用(第一部分)

By齐韬@2008/12/08

关键词:

MCMC,R,WinBUGS,空间统计分类:

统计软件

作者信息:

ComputationalMathematicianinAnnproAnalyticTechnologies,Inc.

版权声明:

本文版权归原作者所有,未经许可不得转载。

原文可能随时需要修改纰漏,全文复制转载会带来不必要的误导,若您想推荐给朋友阅读,敬请以负责的态度提供原文链接;点此查看如何在学术刊物中引用本文

常规引用方式

齐韬.WinBUGS在统计分析中的应用(第一部分).统计之都,2008.12.URL:

http:

//cos.name/2008/12/statistical-analysis-and-winbugs-part-1/.

BibTeX引用

@ARTICLE{,

AUTHOR={齐韬},

TITLE={WinBUGS在统计分析中的应用(第一部分)},

JOURNAL={统计之都},

YEAR={2008},

month={12},

URL={http:

//cos.name/2008/12/statistical-analysis-and-winbugs-part-1/},

}

开篇词

首先非常感谢COS论坛提供了这样一个良好的平台,敝人心存感激之余,也打算把一些学习心得拿出来供大家分享,文中纰漏之处还请各位老师指正。

下面我将以WinBUGS的统计应用为题,分几次来谈一谈WinBUGS这个软件。

其中会涉及到空间数据的分析、GeoBUGS的使用、面向R及SPLUS的接口包R2WinBUGS的使用、GIS与统计分析等等衍生出的话题。

如有问题,请大家留下评论,我会调整内容,择机给予回答。

第一节什么是WinBUGS?

WinBUGS对于研究Bayesian统计分析的人来说,应该不会陌生。

至少对于MCMC方法是不陌生的。

WinBUGS(BayesianinferenceUsingGibbsSampling)就是一款通过MCMC方法来分析复杂统计模型的软件。

其基本原理就是通过Gibbssampling和Metropolis算法,从完全条件概率分布中抽样,从而生成马尔科夫链,通过迭代,最终估计出模型参数。

引入Gibbs抽样与MCMC的好处是不言而喻的,就是想避免计算一个具有高维积分形式的完全联合后验概率公布,而代之以计算每个估计参数的单变量条件概率分布。

具体的算法思想,在讲到具体问题的时候再加以叙述,在此不过多论述。

就不拿公式出来吓人了(毕竟打公式也挺费劲啊)。

第二节为什么要用WinBUGS?

第一、因为同类分析软件中它做得最好。

同类的软件:

OpenBUGS、JAGS等在成熟度、灵活性以及兼容性方面和它相比还有一定距离。

在处理spatialdata的方面,它采用了Gibbs抽样和MCMC的方法,在模型支持方面又具有极大的灵活性,较之名声大噪的GeoR包,虽然也实现了bayesian的手法,但是灵活性还是不及WinBUGS。

第二、因为它免费。

免费的东西总有吸引人之处。

第三、有各色的R包为WinBUGS实现了针对R的、SPLUS的、Matlab的软件接口。

只要你喜欢,就直接在R下调用WinBUGS吧,无非是装个R2WinBUGS包,简简单单。

第四、详细的文档、帮助、指导、范例。

当然没有中文版的,小小一点遗憾。

第三节如何得到WinBUGS?

WinBUGS目前是一款免费的软件,去http:

//www.mrc-bsu.cam.ac.uk/bugs/下载就好了。

不过要用高级功能(如GeoBUGS)的话,还是去http:

//www.mrc-bsu.cam.ac.uk/bugs/winbugs/contents.shtml注册一下好了,挺方便的。

系统会立即把注册码发到你邮箱(真是好人啊)。

不过只可以用一个月。

这倒无妨,到时在注册一下就好了。

第四节初试WinBUGS

WinBUGS-GUI

我们先找一个例子来实际地运行一下WinBUGS,感受一下基本的操作流程,然后再考虑高级的操作。

第一步,打开WinBUGS,通过菜单File->New新建一个空白的窗口

第二步,在第一步中新建的空白窗口中输入三部分内容:

模型定义、数据定义、初始值定义(代码见附录)

第三步,点击菜单Model->Specification,弹出一个SpecificationTool面板。

第四步,在第二步中的提到的那个窗口中,将model这个关键字高亮起来,点击checkmodel。

你会看到WinBUGS的左下角状态栏上显示”modelissyntacticallycorrect.”

第五步,把定义的data前的关键字list也高亮起来,点SpecificationTool面板上的loaddata

第六步,改SpecificationTool面板上的马尔科夫链的数目,默认为1就好了

第七步,点击SpecificationTool面板上的compile

第八步,把定义的初始值中的list关键字也高亮起来,再点击SpecificationTool面板上的loadinits

第九步,关了SpecificationTool面板

第十步,点击菜单Inference->Samples,弹出一个SampleMonitorTool面板。

第十一步,在SampleMonitorTool面板的node中填要估计的参数名,这里可以是tau,alpha0,alpha1,b,把它们一个一个填在node中,逐一点set。

第十二步,关了SampleMonitorTool面板

第十三步,点击菜单Model->Update,弹出一个UpdateTool面板。

第十四步,将UpdateTool面板中的updates改大点,比如50000,点update按钮。

第十五步,运行完后,关了UpdateTool面板

第十六步,点击菜单Inference->Samples

第十七步,在弹出的SampleMonitorTool面板上选一个node

第十八步,点history看所有迭代的时间序列图,点trace看最后一次迭代的时间序列图,点autocor看correlogram时间序列图,点stat看参数估计的结果

EstimationresultsbyWinBUGS1.4

附第二步中的代码如下:

#MODEL

model

{

for(iin1:

N){

O[i]~dpois(mu[i])

log(mu[i])<-log(E[i])+alpha0+alpha1*X[i]/10+

b[i]

#Area-specificrelativerisk(formaps)

RR[i]<-exp(alpha0+alpha1*X[i]/10+b[i])

}

#CARpriordistributionforrandomeffects:

b[1:

N]~car.normal(adj[],weights[],num[],tau)

for(kin1:

sumNumNeigh){

weights[k]<-1

}

#Otherpriors:

alpha0~dflat()

alpha1~dnorm(0,1e-05)

tau~dgamma(0.5,5e-04)

#prioronprecision

sigma<-sqrt(1/tau)

#standarddeviation

}

#DATA

list(N=56,O=c(9,39,11,9,15,8,26,7,6,

20,13,5,3,8,17,9,2,7,9,7,16,31,11,7,19,15,

7,10,16,11,5,3,7,8,11,9,11,8,6,4,10,8,2,

6,19,3,2,3,28,6,1,1,1,1,0,0),E=c(1.4,8.7,

3,2.5,4.3,2.4,8.1,2.3,2,6.6,4.4,1.8,1.1,3.3,7.8,

4.6,1.1,4.2,5.5,4.4,10.5,22.7,8.8,5.6,15.5,12.5,

6,9,14.4,10.2,4.8,2.9,7,8.5,12.3,10.1,12.7,9.4,

7.2,5.3,18.8,15.8,4.3,14.6,50.7,8.2,5.6,9.3,88.7,

19.6,3.4,3.6,5.7,7,4.2,1.8),X=c(16,16,10,24,

10,24,10,7,7,16,7,16,10,24,7,16,10,7,7,10,

7,16,10,7,1,1,7,7,10,10,7,24,10,7,7,0,10,

1,16,0,1,16,16,0,1,7,1,1,0,1,1,0,1,1,16,

10),num=c(3,2,1,3,3,0,5,0,5,4,0,2,3,3,2,

6,6,6,5,3,3,2,4,8,3,3,4,4,11,6,7,3,4,9,

4,2,4,6,3,4,5,5,4,5,4,6,6,4,9,2,4,4,4,

5,6,5),adj=c(19,9,5,10,7,12,28,20,18,19,12,

1,17,16,13,10,2,29,23,19,17,1,22,16,7,2,5,

3,19,17,7,35,32,31,29,25,29,22,21,17,10,7,

29,19,16,13,9,7,56,55,33,28,20,4,17,13,9,5,

1,56,18,4,50,29,16,16,10,39,34,29,9,56,55,

48,47,44,31,30,27,29,26,15,43,29,25,56,32,31,

24,45,33,18,4,50,43,34,26,25,23,21,17,16,15,

9,55,45,44,42,38,24,47,46,35,32,27,24,14,31,

27,14,55,45,28,18,54,52,51,43,42,40,39,29,23,

46,37,31,14,41,37,46,41,36,35,54,51,49,44,42,

30,40,34,23,52,49,39,34,53,49,46,37,36,51,43,

38,34,30,42,34,29,26,49,48,38,30,24,55,33,30,

28,53,47,41,37,35,31,53,49,48,46,31,24,49,47,

44,24,54,53,52,48,47,44,41,40,38,29,21,54,42,

38,34,54,49,40,34,49,47,46,41,52,51,49,38,34,

56,45,33,30,24,18,55,27,24,20,18),sumNumNeigh=234)

#INITIALVALUES

list(tau=1,alpha0=0,alpha1=0,b=c(0,0,

0,0,0,NA,0,NA,0,0,NA,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))

WinBUGS在统计分析中的应用第一部分完

1.胡江堂on2008/12/09at18:

03

WinBugs,头一回听说啊。

老齐在annpro,有空分享一下工作心得吧。

回复

2.刘思喆on2008/12/10at11:

13

土了,还以为是windows下的debug工具。

原来是这!

回复

3.谢益辉on2008/12/15at20:

14

呵呵,能写点公式还是写点吧,看代码不知道做的问题是什么……

回复

4.谢益辉:

统计之都《本周导读》第三辑|统计之都on2008/12/15at20:

23

[...]WinBUGS是贝叶斯统计的有力工具(而不是Windows下面的Debug工具),齐韬加入COS主站之后发表了第一篇文章WinBUGS在统计分析中的应用(第一部分),为我们讲述了WinBUGS的一些基本操作。

[...]

回复

5.齐韬on2008/12/16at11:

45

我会在第二部分中将相关的理论部分加上,看来得要学习一下怎么嵌入LaTex了.

回复

6.王化儒on2008/12/16at16:

57

嗯,楼主辛苦了!

跟着一点一点学,期待着空间数据分析。

回复

7.胡江堂on2008/12/18at11:

09

贴一首诗吧,刚BUGSteam发过来的,非常有意思:

Eachyearyouwaitwithbatedbreath,

TheoldWinBUGSkeynearingdeath,

Andwillthebrandnewkeyappear

Intimetojointhefestivecheer?

Thewaiting’sover–raiseyourglass,

Anddrinktoritualsthatpass.

Relax,sitbackandhaveachortle;

ThistimeyourWinBUGSkey’simmortal.

回复

8.xjxon2008/12/27at18:

18

不知道在linux下能不能用?

回复

9.hongon2009/04/25at21:

55

大家好

麻烦问一下这个迭代次数如何选择.谢谢回答

回复

10.DJon2009/05/23at17:

50

很好的教程,谢谢了。

MCMC万岁!

回复

11.左伊秩訾on2009/05/26at22:

35

前几天上课时听说了这个软件,真是及时雨!

谢谢了!

回复

12.icweion2009/06/01at21:

35

小弟现正在剑桥mrc-bsu做postdoc,具体的项目就是BUGS的开发以及在生物及医学方面应用。

WinBUGS这个软件是我两个老板DavidSpiegehalter,DaveLunn和其它一些牛人共同开发的。

我们现在正在从WinBUGS转向openBUGS,目的是将它做成opensource的软件以应用在更广的领域。

我现在正在开发BUGS中的WBDiff部分并将它应用在二型糖尿病的动态系统的数据分析中。

有兴趣或有问题的同学可以和我联系:

chen.wei@mrc-bsu.cam.ac.uk

还有我们这里每年会举办3-4次BUGS的培训,2天的课程,在英国或能到英国出差的同学有兴趣的话可以参加,主讲人是Davidspeigehalter和DaveLunn。

回复

oDJon2009/06/07at22:

08

楼上的大牛人啊!

回复

omapleon2009/11/09at17:

14

这位仁兄真牛

回复

o海涛on2009/11/14at10:

53

请问在

winbugs中我编译FRAILTY模型时提示

educationalversioncannotdothismodel难道这个软件还有别的版本?

我用的版本是1.4

我编译的模型是帮助文件ExamplesVolume1中的最后一个文件Coxregressionwithrandomeffects

回复

13.zynon2009/06/16at15:

42

希望能和您联系,我这边看了gibbssampling有不少问题,不知道您可否提供帮助?

回复

14.phlissiaon2009/09/18at11:

10

弱弱的问一句,执行到第四步checkmodel的时候,winbugs坐下角显示的不是“modelissyntacticallycorrect”,而是在alpha1~dnorm(0,1e-05)一句1e处显示e处应为”expectedrightparenthesis,在代码最后0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))指示”invalidorunexpectedtokenscanned”,

这要怎么弄呢?

第一次接触这个软件,还不会使,请高手指点。

WinBUGS在统计分析中的应用(第二部分)

By齐韬@2008/12/18

关键词:

BayesianAnalysis,SAS,WinBUGS分类:

数据分析,统计软件,贝叶斯统计

作者信息:

ComputationalMathematicianinAnnproAnalyticTechnologies,Inc.

版权声明:

本文版权归原作者所有,未经许可不得转载。

原文可能随时需要修改纰漏,全文复制转载会带来不必要的误导,若您想推荐给朋友阅读,敬请以负责的态度提供原文链接;点此查看如何在学术刊物中引用本文

常规引用方式

齐韬.WinBUGS在统计分析中的应用(第二部分).统计之都,2008.12.URL:

http:

//cos.name/2008/12/statistical-analysis-and-winbugs-part-2/.

BibTeX引用

@ARTICLE{,

AUTHOR={齐韬},

TITLE={WinBUGS在统计分析中的应用(第二部分)},

JOURNAL={统计之都},

YEAR={2008},

month={12},

URL={http:

//cos.name/2008/12/statistical-analysis-and-winbugs-part-2/},

}

第一节WinBUGS数据分析案例

在这一节中,我将拿一个经典的研究数据,利用WinBUGS给出简单的分析。

首先介绍一下这个数据:

Seeds

seedO.aegyptiaco75seedO.aegyptiaco73BeanCucumberBeanCucumber

rnr/nrnr/nrnr/nrnr/n

10390.26560.838160.53120.25

23620.3753740.7210300.3322410.54

23810.2855720.768280.2915300.5

26510.5132510.6323450.5132510.63

17390.4446790.58040370.43

10130.77

这个数据来自Crowder(1978)。

之后BreslowandClayton(1993)作为例子,也分析过这个数据。

数据反映的是某一品种的豆类种子和某一品种的黄瓜种子,分别放在21个培养皿(plates)中分别培养,在根提取物aegyptiaco75和aegyptiaco73的作用下的出芽率的差异。

其中r是出芽的个数,n是种子的个数,而r/n是出芽率。

我们用randomeffectlogisticregression模型来进行分析(注意,在Bayesian分析中,通常是将covariates看做是服从某一个分布的随机变量,这和一般意义上的GLM,GLME,LME中对于covariates解释是不同的):

其中

是种子的类型,

是根提取物的类型,

是交互项,

是给定的独立的“noninformative”先验参数。

在Bayesian分析中,通常我们会定义一个DAG图(即DirectedAcyclicGraph有向无圈图)。

我们可以在WinBUGS中通过设计DAG图来定义模型。

不过这一节中我们还是用WinBUGS中的BUGS语言来定义模型,如何在WinBUGS中通过设计DAG图来定义模型我将在下一节中详细介绍,但是必须要说明的是BUGS语言比DAG图灵活,不过直观性不如后者。

模型

model

{

for(iin1:

N){

r[i]~dbin(p[i],n[i])

b[i]~dnorm(0.0,tau)

logit(p[i])<-alpha0+alpha1*x1[i]+alpha2*x2[i]+

alpha12*x1[i]*x2[i]+b[i]

}

alpha0~dnorm(0.0,1.0E-6)

alpha1~dnorm(0.0,1.0E-6)

alpha2~dnorm(0.0,1.0E-6)

alpha12~dnorm(0.0,1.0E-6)

tau~dgamma(0.001,0.001)

sigma<-1/sqrt(tau)

}

WinBUGSdoodle模型

数据

list(r=c(10,23,23,26,17,5,53,55,32,46,10,8,10,8,23,0,3,22,15,32,3),

n=c(39,62,81,51,39,6,74,72,51,79,13,16,30,28,45,4,12,41,30,51,7),

x1=c(0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1),

x2=c(0,0,0,0,0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1