首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinBUGS代码中的错误

WinBUGS代码中的错误
EN

Stack Overflow用户
提问于 2013-01-23 03:20:46
回答 1查看 1.9K关注 0票数 1

我无法让下面的WinBUGS代码正常工作。它适用于正常的先验,但不适用于统一的先验。单击compile后出现的错误消息是array index is greater than array upper bound for age。那是什么意思?有谁能帮我完成下面的代码吗?

代码语言:javascript
复制
model
{
for (i in 1:n) {
# Linear regression on logit
logit(p[i]) <- alpha + b.sex*sex[i] + b.age*age[i]
# Likelihood function for each data point
frac[i] ~ dbern(p[i])
}
alpha ~ dunif(0, 1) # Prior for intercept
b.sex ~ dunif(0, 1) # Prior for slope of sex
b.age ~ dunif(0, 1) # Prior for slope of age
}
Data
list(sex=c(1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0,     1,
1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1,     1, 0,
0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1,      1, 1,
0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1),
age= c(69, 57, 61, 60, 69, 74, 63, 68, 64, 53, 60, 58, 79, 56, 53, 74, 56, 76, 72,
56, 66, 52, 77, 70, 69, 76, 72, 53, 69, 59, 73, 77, 55, 77, 68, 62, 56, 68, 70, 60,
57, 51, 51, 63, 57, 80, 52, 65, 72, 80, 73, 76, 79, 66, 51, 76, 75, 66, 75, 78, 70,
67, 51, 70, 71, 71, 74, 74, 60, 58, 55, 61, 65, 52, 68, 75, 52, 53, 70),
frac=c(1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,        0,
1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,        1, 1,
1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1,      1, 1,
1, 0, 1, 1, 0, 0, 1, 0, 0, 1),
n=100)
Initial Values
list(alpha=0.5, b.sex=0.5, b.age=0.5)
EN

回答 1

Stack Overflow用户

发布于 2013-01-23 06:32:18

哦,这很清楚。WinBUGS说是array index is greater than array upper bound for age。这显然暗示了一个错误,我看到你有n = 100,而age列表不够长:

代码语言:javascript
复制
> your_list <- list(...)
> str(your_list)
List of 4
 $ sex : num [1:100] 1 1 1 0 1 1 0 0 0 0 ...
 $ age : num [1:79] 69 57 61 60 69 74 63 68 64 53 ...
 $ frac: num [1:100] 1 1 1 0 1 1 0 1 1 0 ...
 $ n   : num 100

无论如何,我不会在这里使用uniform prior;除非你真正知道自己在做什么,否则我会推荐flat normal,比如dnorm(0, 1.0E-10)或类似的东西。您还应该允许系数为负值。“零假设”通常是系数为零,因此对于系数的后验分布的平均值为零,您应该“从两边给它留出一些空间”(直观地说)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14466337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档