6

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

 3 years ago
source link: https://cosx.org/2008/12/statistical-analysis-and-winbugs-part-2/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

关键词:SAS; WinBUGS; 贝叶斯

第一节 WinBUGS 数据分析案例

在这一节中,我将拿一个经典的研究数据,利用 WinBUGS 给出简单的分析。首先介绍一下这个数据:Seeds

seed O. aegyptiaco 75 	seed O. aegyptiaco 73	Bean 	Cucumber 	Bean 	Cucumber
r 	n 	r/n 	r 	n 	r/n 	r 	n 	r/n 	r 	n 	r/n
10 	39 	0.26 	5 	6 	0.83 	8 	16 	0.5 	3 	12 	0.25
23 	62 	0.37 	53 	74 	0.72 	10 	30 	0.33 	22 	41 	0.54
23 	81 	0.28 	55 	72 	0.76 	8 	28 	0.29 	15 	30 	0.5
26 	51 	0.51 	32 	51 	0.63 	23 	45 	0.51 	32 	51 	0.63
17 	39 	0.44 	46 	79 	0.58 	0 	4 	0 	3 	7 	0.43
10 	13 	0.77

这个数据来自 Crowder (1978)。之后 Breslow and Clayton (1993) 作为例子,也分析过这个数据。数据反映的是某一品种的豆类种子和某一品种的黄瓜种子,分别放在 21 个培养皿(plates)中分别培养,在根提取物 aegyptiaco 75 和 aegyptiaco 73 的作用下的出芽率的差异。其中 r 是出芽的个数,n 是种子的个数,而 r/n 是出芽率。我们用 random effect logistic regression 模型来进行分析(注意,在 Bayesian 分析中,通常是将 covariates 看做是服从某一个分布的随机变量,这和一般意义上的 GLM, GLME, LME 中对于 covariates 解释是不同的):

ri∼Binomial(pi, ni)ri∼Binomial(pi,ni)

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

bi∼Normal(0,τ)bi∼Normal(0,τ)

其中 x1ix1i 是种子的类型,x2ix2i 是根提取物的类型,α12x1ix2iα12x1ix2i 是交互项, α0, α1, α2, α12, τα0,α1,α2,α12,τ 是给定的独立的 “noninformative” 先验参数。在 Bayesian 分析中,通常我们会定义一个 DAG 图 (即 Directed Acyclic Graph 有向无圈图) 。我们可以在 WinBUGS 中通过设计 DAG 图来定义模型。不过这一节中我们还是用 WinBUGS 中的 BUGS 语言来定义模型,如何在 WinBUGS 中通过设计 DAG 图来定义模型我将在下一节中详细介绍,但是必须要说明的是 BUGS 语言比 DAG 图灵活,不过直观性不如后者。

model
{
 for( i in 1 : 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)
}

WinBUGS doodle模型WinBUGS doodle 模型

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, 1,   1,   1,  1,   1,   1,  0,   0,   0,   0, 0,   1,  1,   1,   1, 1),
   N = 21)
list(alpha0 = 0, alpha1 = 0, alpha2 = 0, alpha12 = 0, tau = 1)

经过 10000 次迭代,我们得到参数的估计如下:

node    mean     sd MC error   2.50%  median  97.50% start
 alpha0 -0.5546 0.1941 0.007696 -0.9353 -0.5577 -0.1597  1001
 alpha1 0.08497 0.3127  0.01283 -0.5814 0.09742  0.6679  1001
alpha12 -0.8229 0.4321  0.01785  -1.697 -0.8218 0.01641  1001
 alpha2   1.356 0.2743  0.01236  0.8257   1.347   1.909  1001
  sigma  0.2731 0.1437 0.007956 0.04133  0.2654  0.5862  1001

第二节 结合 SAS 做比较分析

下面我们用同样的数据在 SAS 中进行分析,看看结果相差多少:

首先生成数据:

data seeds;
 input plate r n seed extract;
 datalines;
1   10  39  0   0
2   23  62 0   0
3   23  81 0   0
4   26  51 0   0
5   17  39 0   0
6    5   6  0   1
7   53  74 0   1
8   55  72 0   1
9   32  51 0   1
10  46  79 0   1
11  10  13 0   1
12   8  16 1   0
13  10  30 1   0
14   8  28 1   0
15  23  45 1   0
16   0   4  1   0
17   3  12 1   1
18  22  41 1   1
19  15  30 1   1
20  32  51 1   1
21   3   7  1   1
;
run;
data seeds;
 set seeds;
 interact=seed*extract;
run;
proc print; run;

然后调用 GENMOD 过程,拟合经典的 logistic regression 回归模型

proc genmod data=seeds;
/* Basic logistic regression WHITHOUT random plate effect */
title ‘Classical logistic regression’;
 model r/n= seed extract interact / dist=B;
run;
Analysis Of Parameter Estimates
Parameter	DF	Estimate	Standard Error	Wald 95% Confidence Limits	Chi-Square	Pr > ChiSq
Intercept	1	-0.5582		0.126		-0.8052	-0.3112			19.62	     	<.0001
seed		1	0.1459		0.2232		-0.2915	0.5833			0.43		0.5132
extract		1	1.3182		0.1775		0.9704	1.666			55.17	      	<.0001
interact	1	-0.7781		0.3064		-1.3787	-0.1775			6.45		0.0111
Scale		0	1		0		1	1

调用 NLMIXED 过程,拟合经典的 logistic regression 回归模型

proc nlmixed data=seeds;
/* Cassical logistic regression using NLMIXED */
title 'Classical logistic regression with NLMIXED';
parms b0=-0.55 b1=0.15 b2=1.32 b12=-0.78;
logitp=b0+b1*seed+b2*extract+b12*interact;
p=exp(logitp)/(1+exp(logitp));
model r ~ binomial(n,p) ;
run;
Parameter Estimates
Parameter	Estimate	Standard Error	DF	t Value	Pr > |t|	Alpha	Lower	Upper	Gradient
b0		-0.5582		0.126		21	-4.43	0.0002		0.05	-0.8202	-0.2961	-0.00000229
b1		0.1459		0.2232		21	0.65	0.5203		0.05	-0.3182	0.61	-8.82E-07
b2		1.3182		0.1775		21	7.43	<.0001		0.05	0.9491	1.6872	-0.00000161
b12		-0.7781		0.3064		21	-2.54	0.0191		0.05	-1.4154	-0.1408	-6.61E-07

调用 NLMIXED 过程,拟合经典带随机截距的 logistic regression 回归模型

proc nlmixed data=seeds;
/* Logistic regression + RANDOM plate INTERCEPT */
title 'Logistic regression with random plate intercept (NLMIXED)';
parms b0=-0.55 b1=0.15 b2=1.32 b12=-0.78;
logitp=b0+b1*seed+b2*extract+b12*interact+alpha;
p=exp(logitp)/(1+exp(logitp));
random alpha ~ normal(0,varu) subject=plate out=seedmixed;
model r ~ binomial(n,p) ;
run;
Parameter Estimates
Parameter	Estimate	Standard Error	DF	t Value	Pr > |t|	Alpha	Lower	Upper	Gradient
b0		-0.5484		0.1666		20	-3.29	0.0036		0.05	-0.896	-0.2009	-0.00087
b1		0.097		0.278		20	0.35	0.7308		0.05	-0.483	0.677	0.00022
b2		1.337		0.2369		20	5.64	<.0001		0.05	0.8428	1.8313	-0.00018
b12		-0.8104		0.3852		20	-2.1	0.0482		0.05	-1.6139	-0.007	0.00037
1.07		0.295 varu	0.05581		0.05	20	9		0.05	-0.0527	0.1643	0.001515

当然了 winBUGS 的强大之处并不在于此,而是在处理诸如 GLME(有些文献称 GLMM),空间数据模型等计算复杂的模型,之后还会继续讨论。

参考文献:

[1] Crowder M J (1978) Beta-binomial Anova for proportions. Applied Statistics. 27, 34-37.

[2] Breslow N E and Clayton D G (1993) Approximate inference in generalized linear mixed models. Journal of the American Statistical Association. 88, 9-25.

最后再送出一本书,供大家研究参考

Disease Mapping with WINBUGS and MLWin(djvu 格式)

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

敬告各位友媒,如需转载,请与统计之都小编联系(直接留言或发至邮箱:[email protected]),获准转载的请在显著位置注明作者和出处(转载自:统计之都),并在文章结尾处附上统计之都微信二维码。

统计之都微信二维码

← 统计之都《本周导读》第四辑 第一届中国 R 语言会议纪要 →

发表 / 查看评论


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK