Roy Nitze wrote:
We have a problem inverting a matrix which has the following eigenvalues:
>>eigen(tcross, only.values=TRUE)
$values
[1] 7.917775e+20 2.130980e+16 7.961620e+13 8.241041e+12 2.258325e+12
[6] 3.869428e+11 6.791041e+10 2.485352e+09 9.863098e+08 9.819373e+05
[11] 3.263408e+05 2.929853e+05 2.920419e+05 2.714355e+05 8.733435e+04
[16] 8.127136e+04 6.543883e+04 5.335074e+04 3.773311e+04 2.904373e+04
[21] 2.418297e+04 1.387422e+04 8.925090e+03 5.538344e+03 4.831908e+03
[26] 1.133571e+03 9.882477e+02 7.725812e+02 5.081682e+02 3.010545e+02
[31] 1.801611e+02 1.319787e+02 1.050521e+02 7.096471e+01 5.576549e+01
[36] 4.192645e+01 3.549810e+01 2.638731e+01 2.444429e+01 1.735139e+01
[41] 1.058796e+01 7.425778e+00 7.209576e+00 4.689665e+00 3.181650e+00
[46] 3.002956e+00 1.959247e+00 1.551665e+00 1.079589e+00 1.064981e+00
[51] 5.409617e-01 4.076501e-01 2.010129e-01 1.302394e-01 4.029787e-02
[56] 2.599448e-02 1.061294e-02 1.634286e-03 4.095303e-09 1.021885e-10
[61] 2.124763e-11 6.906665e-12 2.850103e-12 9.440867e-13 6.269723e-13
[66] 1.043794e-13 -1.300171e-13 -7.220665e-13 -4.166945e-12 -6.145350e-12
[71] -2.776804e-11 -5.269669e-11 -7.154246e-10 -1.490515e-09 -1.294256e-08
[76] -1.224821e-02 -3.278657e+00 -4.620100e+01 -9.781843e+02 -1.303929e+04
[81] -5.545949e+04 -8.077540e+04 -8.577861e+04 -1.329961e+05 -1.450908e+05
[86] -3.022353e+05 -4.015776e+05
As yout can see, the eigenvalues spread very much (between e+20 and e-13).
We presume, that it has something to do with R's floating point precision,
which I read is about 22-digits in mantissa as default.
Less than that. It depends a bit on the platform and the exact
calculation, but you can't count on more than 15-16 decimal digits
precision.
Can this precision
be set to values above 22?
No. R generally uses the floating point hardware type "double
precision", and it's a fixed size.
The problem occurs especially when trying to
perform 2SLS with the 'systemfit' package. There appears always an error
message like the following from the inverting routine:
solve(tcross)
Error in solve.default(tcross) : Lapack routine dgesv: system is exactly
singular
You will have to find a different solution to the problem. To machine
precision, that matrix looks singular. This usually indicates that it's
not the right matrix to try to invert.
Duncan Murdoch
R-help (AT) stat (DOT) math.ethz.ch mailing list
PLEASE do read the posting guide!