To: The BUGS Team & Anyone who can help,
I'd appreciate some help with the following problem.
Every time I run the code included below in WinBUGS 1.3,
I receive a run-time Trap 0 error message stating
(on the status bar of the window)
"linear predictor in probit regression too large".
This always happens at about the 460th iteration.
Here's a snippet of the Trap:
TRAP 0
GraphProbit.Node.Value [000002B5H]
.node GraphProbit.Node [0112E040H]
.p REAL 0.9999825552165432
.x REAL 9.653736694765698
GraphScaler.Node.Value [00001885H]
.i INTEGER 1
.j INTEGER 1
.k INTEGER 1
.node GraphScaler.Node [01043440H]
.op INTEGER 0
.p GraphNodes.Node [0112E040H]
.top INTEGER 1
.work ARRAY 10 OF REAL Elements
GraphNormal.Node.Likelihood [00000388H]
.logTau REAL 5.075173815233827
.mu REAL 1.0
.node GraphNormal.Node [01156360H]
.tau REAL 160.0
.x REAL 1.0
What is going on here?
How can I avoid the error?
I originally began with much less informative priors, but
now have narrowed them in attempts to avoid the Trap.
Also, the min and max functions for node y.mu[i,j] were
added in an attempt to avoid the probit trap.
Unfortunately, none of these measures helped.
Finally, what I really want is
probit(p.sat[i,j]) <- mu.brand[j]+mu.pers[i]+sigma[i]*z[i,j],
with priors mu.brand[1:N.q]~dmnorm and z[i,1:N.q]~dmnorm
having different precision matrices.
When I've implemented this in WinBUGS, I get
errors during compilation of the multivariate normal
nodes. Does anyone have a solution to this?
Thanks in advance,
-Michael L. Thompson
model Brand.Ratings.Survey.Analysis;
# Michael L. Thompson, 4/2000, (c)
{
# Prior for brand effect: brand properties' influence on utility
for( j in 1 : N.q ) {
mu.brand[j] ~ dnorm( phi.brand,2) # (Really want it to be multivariate
normal, but WinBUGS won't allow it.)
}
for( i in 1 : N.people ) {
# Prior for demographic effect or bias: Personal traits' influence on
survey-recorded utility
mu.pers[i] ~ dnorm(phi.pers,2) # Originally, precision was 0.1.
for( j in 1 : N.q ) {
# Likelihood derived from measured survey responses, x (allows for
"fuzzy" cut offs)
x[i , j] ~ dnorm(x.induced[i,j],160) # Originally, precision was 16.
# Induced rating probability, p.sat, based on cut off points and
induced discrete rating response, x.induced
# (Number of rating levels for each question: 1=Excellent,...,5=Poor.)
x.induced[i , j] <- 5 - (step(p.sat[i , j] - cut[1]) + step(p.sat[i ,
j] - cut[2]) + step(p.sat[i , j] - cut[3]) + step(p.sat[i , j] - cut[4]))
# Utility function relating satisfaction probability to brand effect
and personal bias in filling out survey
y.mu[i , j] <- min(5,max(-5,mu.brand[j] + mu.pers[i])) # Min & Max
added in (failed) attempt to avoid probit trap
probit(p.sat[i , j]) <- y[i , j]
# Individual's intrinsic utility & personal variability (sensitivity)
in filling out survey
z[i , j] <- dy[i , j]*sigma[i]
dy[i , j] <- y[i , j] - y.mu[i , j]
}
y[i , 1:N.q] ~ dmnorm(y.mu[i , 1:N.q] , z.icov[1:N.q , 1:N.q])
sigma[i] <- 1/(sd(dy[i , 1:N.q]) + 1.0E-16)
}
# Prior for inverse covariance matrix of intrinsic utility: how impressions
about separate attributes contribute to overall impression
z.icov[1:N.q , 1:N.q] ~ dwish(S[1:N.q , 1:N.q], N.q)
# Prior mean of brand effect
phi.brand <- 0
# Prior mean of personal bias
phi.pers <- 0
}
DATA
# Also requires a data file of survey responses: x, which should be an N.people
by N.q matrix of values in set {1,2,...,N.levels}
list(
# Number of rating levels for each question (1=Excellent,5=Poor)
#N.levels=5,
# Number of survey questions
N.q=5,
# Number of consumers surveyed
N.people=10,,
# Implied cumulative probability cut off levels for converting satisfaction
probabilities into discrete ratings (N.levels -1 elements)
cut=c(0.125, 0.375, 0.625, 0.875),
# Prior covariance matrix (N.q by N.q)
S=structure(.Data=c(
10,0,0,0,0,
0,10,0,0,0,
0,0,10,0,0,
0,0,0,10,0,
0,0,0,0,10
), .Dim=c(5,5))
)
INITS
list(
mu.brand=c(0,0,0,0,0), # N.q elements
mu.pers=c(0,0,0,0,0,0,0,0,0,0), # N.people elements
# Covariance matrix (N.q by N.q)
z.icov=structure(.Data=c(
100,0,0,0,0,
0,100,0,0,0,
0,0,100,0,0,
0,0,0,100,0,
0,0,0,0,100
), .Dim=c(5,5))
)
Data file:
x[,1] x[,2] x[,3] x[,4] x[,5]
3 2 3 2 3
1 1 3 2 3
3 2 4 5 2
4 1 3 1 3
2 2 2 1 4
1 1 2 3 2
4 4 5 5 2
2 1 1 2 3
1 1 1 1 2
3 2 5 3 2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|