一、情况说明
这次使用WinBUGS14编写具有四个类别的因变量的有序logit模型,所以需要三个切点,即代码中的gamma1、gamma2、gamma3。
二、错误与解决
如图1所示,这里的错误原因是对gamma2赋了0值,而gamma2应该大于gamma1且小于gamma3,所以在迭代时报错:error:cannot bracket slice for node gamma[3]。
因此对gamma2赋了跟gamma3一样的分布,如图2所示。
改变了gamma2赋值之后发现问题仍然存在,最后发现对变量赋初值时,gamma2的初值也应该比gamma3小,原来初值都为1所以依旧报错,修改后如图3所示。
到此问题解决!
以下是完整代码:
# Ordered logit model
model {
# Likelihood
for (i in 1:4000) {
seve[i] ~ dcat(p[i,])
p[i,1] <- max(min(cdf[i,1],1),0)
p[i,2] <- max(min(cdf[i,2] - cdf[i,1], 1), 0)
p[i,3] <- max(min(cdf[i,3] - cdf[i,2], 1), 0)
p[i,4] <- max(min(1 - cdf[i,3], 1), 0)
}
# define linear predictor
for (i in 1:4000) {
Z[i] <- beta[1]
+ beta[2]*age_small[i]
+ beta[3]*age_middle[i]
+ beta[4]*driver_gender[i]
+ beta[5]*Drunken_driving[i]
+ beta[6]*Responsible_party[i]
+ beta[7]*Safety_equipment[i]
+ beta[8]*auto_age[i]
+ beta[9]*car[i]
+ beta[10]*Van[i]
+ beta[11]*Light_truck[i]
+ beta[12]*low_speed[i]
+ beta[13]*medium_speed[i]
+ beta[14]*not_con[i]
+ beta[15]*around_con[i]
+ beta[16]*Accident_in_the_road[i]
+ beta[17]*Rear_end[i]
+ beta[18]*Frontal[i]
for (j in 1:3) {
logit(cdf[i,j]) <- gamma[j] - Z[i]
}}
# Priors for coefficients
for (k in 1:18) {
beta[k] ~ dnorm(0.0,1.0E-04)}
# Thresholds
gamma[1]<- 0.0
gamma[2]~ dnorm(0,0.001)I(0,)
gamma[3]~ dnorm(0,0.001)I(0,)
}
# Initials
list(beta =c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
gamma=c(NA,0.3,1))