2013-01-22 5 views
0

아래 WinBUGS 코드를 작동시키지 못했습니다. 그것은 일반 전임자에게는 효과가 있지만 제복을 입은 전임자에게는 적용되지 않습니다. compile을 클릭하면 나타나는 오류 메시지는 array index is greater than array upper bound for age입니다. 그게 무슨 뜻 이죠? 어느 누구도 제발 아래의 코드를 작동하도록 도울 수 있습니까?WinBUGS 코드의 오류

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) 
+0

이것은 매우 모호한 설명입니다. 왜 작동하지 않는지에 대해 더 구체적으로 설명해야합니다. 어쨌든, 나는 코드에서 균일 한 사전을 보지 못합니다. – TMS

+0

@ 토마스, 사과드립니다. 나는 그 질문을 편집했다. 이 경우 무엇을 제안 하시겠습니까? 의견을 보내 주셔서 감사합니다. –

답변

4

아, 그건 확실합니다. WinBUGS는 array index is greater than array upper bound for age라고 말합니다. 분명히 오류가 힌트 은 -> 난 당신이 n = 100이 확인하고 age 목록이 충분히되지 않습니다 :

> 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 

어쨌든, 나는 전에 여기 유니폼을 사용하지 것이다; 당신이 실제로 무엇을하는지 알지 못한다면 평평한 정상을 추천 할 것입니다. dnorm(0, 1.0E-10) 정도입니다. 또한 계수에 음수 값을 허용해야합니다. "귀무 가설"은 일반적으로 계수가 0이므로 계수의 사후 분포의 평균값이 0이 되려면 "양쪽면에서 약간의 공간을 허용해야합니다"(직관적으로 말하면).

+0

사실, 베이지안 방식을 사용하는 유일한 이유는 양의 회귀 계수를 얻는 것입니다. 그렇게하기 위해 할 수있는 일은 무엇입니까? 정상적인 전임자는 일하지만 통일 된 전임자는 그렇지 않습니다. 이 문제를 해결할 제안이 있습니까? –

+0

'dunif (0,1)'대신'dbeta (1,1)'을 사용했다. 그게 맞습니까? 어쨌든, 이제 작동합니다. 출력에서 전혀 차이가 없습니까? 또한 베타 프리우스가 작동하는 이유는 궁금하지만 제복 전임자는 그렇지 않습니다. –

+0

@ 에드, 인덱스 때문에 작동하지 않는다고 언급 했으므로 내 조언이 도움이 될 것입니다! – TMS