Dear WinBUGS community,
I recently asked a question about what was causing an "undefined real result" error. Thank you for the many very helpful answers: as was pointed out to me, the solution was to improve my initial values!
Now, however, the error has returned, and seems to be caused by the matrix inverse() function.
It would be great to hear if anyone has any suggestions as to why this is happening.
The issue:
I'm trying to generate the posterior density for a function of several other variables (stochastic nodes). I can generate the posteriors for each variable individually, but - because of correlations between variables - it would be much more preferable to get the posterior for this function of them all.
One step in this function involves taking the inverse of a matrix. However, when I do this (using the inverse() command in WinBUGS), the model immediately crashes into "undefined real result".
Specific details:
Specifically, the function I am trying to obtain is the expected first passage time of a Markov chain. Following the matrix methods in Grinstead & Snell (2006), I subtract a 7-by-7 matrix of probabilities (called "Q") from a 7-by-7 identity matrix (called "I"), generating a 7-by-7 matrix called "IminusQ". I then take the inverse of "IminusQ" using this line of code:
FundamentalMatrix[SAMPLE,1:7,1:7] <- inverse(IminusQ[SAMPLE,,])
It's this last step that seems to be causing the problems.
What I have tried:
What the TRAP error looks like:
The main part of the TRAP error that shows up is as follows:
undefined real result
Math.Sqrt [00000120H]
.x REAL -10.60785630107878
MathMatrix.LUDecomp [00000384H]
.a ARRAY 20, 20 OF REAL Elements
.i INTEGER 5
.j INTEGER 5
.k INTEGER -1
.size INTEGER 7
.sum REAL -10.60785630107878
MathMatrix.Invert [000004DFH]
.a ARRAY 20, 20 OF REAL Elements
.i INTEGER 6415876
.j INTEGER 0
.k INTEGER 0
.size INTEGER 7
.sum REAL 0.0
GraphInverse.Node.Evaluate [00000279H]
.component GraphInverse.Node NIL
.i INTEGER 7
.j INTEGER 7
.node GraphInverse.Node [04C97BB0H]
.off INTEGER 48
.p GraphNodes.Node [04C992E0H]
.size INTEGER 7
.values ARRAY 49 OF REAL Elements
GraphVector.Node.Value [00000121H]
.cursor GraphLogical.List NIL
.index INTEGER 918423085
.node GraphVector.Node [04C97BB0H]
.p GraphLogical.Node NIL
.q GraphVector.Node [04C97BB0H]
.value REAL 7.965856772862247E-307
MonitorsSamples.StdMonitor.Update [0000023DH]
.blocks POINTER NIL
.i INTEGER 884150886
.index INTEGER 0
.monitor MonitorsSamples.StdMonitor [04454240H]
.numBlocks INTEGER 0
.value REAL 1.761304528764966E-311
If this isn't easily soluble in WinBUGS, it's been suggested to me to use Stan. However, I'm keen to try to find the solution in WinBUGS before giving in! Very many thanks if you have any ideas that might solve this very perplexing problem!
Kind regards,
Patrick