下面的程序是从一本收拷贝过来的:

model

{

for (i in 1:r)

{

for(j in n+1:n[i+1])

{

y[j, 1:mminus1+1] ~ dmulti(p[j,], ni[j])

p[j,1] <- Q[j,1]

for (k in 2:mminus1)

{

p[j,k] <- Q[j,k] - Q[j,k-1]

}

p[j,mminus1+1]<- 1 - Q[j,mminus1]

for (k in 1:mminus1)

{

logit(Q[j,k]) <- a[i,k] + gamma1*x1[j]

}

}

gamma1 ~ dnorm(beta1, t)

a[i,1] ~ dnorm(0,1.0E-4)I(, a[i,2])

a[i,2] ~ dnorm(0,1.0E-4)I(a[i,1], a[i,3])

a[i,3] ~ dnorm(0,1.0E-4)I(a[i,2], a[i,4])

a[i,4] ~ dnorm(0,1.0E-4)I(a[i,3], )

}

beta1 ~ dnorm(0,1.0E-4)

t ~ dgamma(0.001,0.001)

tausq <- 1/t

}



数据是按按求输入的:list(r=5, mminus1=4, n=c(0,2,4,6,8,10))

x1[] y[ ,1] y[ , 2] y[ ,3] y[ ,4] y[ ,5] ni[]

1 4 23 45 22 2 96

0 2 22 54 29 3 110

1 14 119 180 54 6 373

0 1 22 35 11 3 72

1 13 20 24 10 1 68

0 7 16 17 10 3 53

1 21 106 175 62 17 381

0 8 24 73 52 13 170

1 3 14 19 3 0 39

0 2 13 18 7 1 41

END



但在用winbugs计算时,模型检查没问题,数据导入没问题,但在“compli”却出现问题,请各位高手看看到底有什么问题?谢谢
6 天 后
for(j in n+1:n[i+1])-----------这行什么意思?

n是一个向量,for的上届有问题吧?
[quote]引用第1楼dingpeng于2009-12-08 20:51发表的  :

for(j in n+1:n[i+1])-----------这行什么意思?

n是一个向量,for的上届有问题吧?

[/quote]

谢谢版主的回复,我发原书的模型和CODE请您看一下,到底是什么问题。
谢谢版主。数据含义如下:



r表示研究,r=5表示有5个研究



在每个研究中,

x表示干预方式,其中1代表治疗组,0代表对照组

y代表治疗效果,分为5个等级,分别用y1-y5表示,数字表示某一等级病例数

NI表示每一组的总人数。



1.winbug code如果有错误的话,是不是在模型检测这一步就不能通过?



2.是不是数据输入方式不对?
3 个月 后

1.winbug code如果有错误的话,是不是在模型检测这一步就不能通过?

yes

2.是不是数据输入方式不对?

恩, 不确定, list头一行能看懂

后面就不明白了

x1[] y[ ,1] y[ , 2] y[ ,3] y[ ,4] y[ ,5] ni[]

1 4 23 45 22 2 96

0 2 22 54 29 3 110

1 14 119 180 54 6 373

0 1 22 35 11 3 72

1 13 20 24 10 1 68

0 7 16 17 10 3 53

1 21 106 175 62 17 381

0 8 24 73 52 13 170

1 3 14 19 3 0 39

0 2 13 18 7 1 41

END

看到code里有logit link

Q[j,k] 只能介于0,1之间

可是看看winbugs的错误提示,(虽然巨难懂)

如果发现Inf

貌似是prior(?数据)导致Q出了[0,1]

PS, 我一般是在R里把数据编辑成list, 然后写到txt文件, 在winbugs直接打开就好了

R里的function是bugs.data

About Priors,you may find this paper helpful

http://projecteuclid.org/DPubS?service=UI&version=1.0&verb=Display&handle=euclid.aoas/1231424214

1 年 后

回复 第2楼 的 dingpeng:我现在做一个了逆建模型,y是观测值,y*是模拟值(y*=ax+b),两者之差(也就是随机误

差项)符合标准正态分布:y=y*+ε(0,σ2),然后想用贝叶斯方法估计参数a,b,用到M

CMC方法,看文献都用winbugs计算,可是我试了几次模型编译compile都出错,觉得应该是

模型建立的问题,求各位指点迷津!!!

model

for( i in 1 : N ) { y <- y* + ε

y* <- a*x+b

ε ~ dnorm( 0.0,tau)

}

a ~ dunif(0, 1.5)

b ~ dunif(0, 0.8)

tau ~ dgamma(0.001,0.001)

sigma <- 1 / sqrt(tau)

}

compile的时候出现:multiple definition of node y[1]!

楼主能不能指点迷津啊


13 天 后

回复 第9楼 的 zjjvv:

个人觉得y*出了问题

what about just rename y* as y1, say

model

for( i in 1 : N ) { y <- y1 + ε

y1 <- a*x+b