第一节 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解释是不同的):
\(r_i \sim Binomial(p_i, ~n_i)\)
\(logit(p_i)=\alpha_0 + \alpha_1 x_{1i} + \alpha_2 x_{2i} + \alpha_{12} x_{1i} x_{2i} + b_i\)
\(b_i \sim Normal(0, \tau)\)
其中\(x_{1i}\)
是种子的类型,\(x_{2i}\)
是根提取物的类型,\(\alpha_{12} x_{1i} x_{2i}\)
是交互项, \(\alpha_0,~\alpha_1,~\alpha_2,~\alpha_{12},~\tau\)
是给定的独立的 “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模型
数据
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在统计分析中的应用 第二部分完
发表/查看评论