[R] Matrix inversion-different answers from LAPACK and LINPACK

Albyn Jones jones at reed.edu
Wed Jun 17 21:02:19 CEST 2009


As you seem to be aware, the matrix is poorly conditioned:

> kappa(PLLH,exact=TRUE)
[1] 115868900869

It might be worth your while to think about reparametrizing.

albyn

On Wed, Jun 17, 2009 at 11:37:48AM -0400, Avraham.Adler at guycarp.com wrote:
> 
> Hello.
> 
> I am trying to invert a matrix, and I am finding that I can get different
> answers depending on whether I set LAPACK true or false using "qr". I had
> understood that LAPACK is, in general more robust and faster than LINPACK,
> so I am confused as to why I am getting what seems to be invalid answers.
> The matrix is ostensibly the Hessian for a function I am optimizing. I want
> to get the parameter correlations, so I need to invert the matrix. There
> are times where the standard "solve(X)" returns an error, but "solve(qr(X,
> LAPACK=TRUE))" returns values. However, there are times, where the latter
> returns what seems to be bizarre results.
> 
> For example, an example matrix is PLLH (Pareto LogLikelihood Hessian)
> 
>                       alpha                    theta
> alpha 1144.6262175141619082 -0.012907777205604828788
> theta   -0.0129077772056048  0.000000155437688485563
> 
> Running plain "solve (PLLH)" or "solve (qr(PLLH))" returns:
> 
>                        [,1]                  [,2]
> alpha    0.0137466171688024      1141.53956787721
> theta 1141.5395678772131305 101228592.41439932585
> 
> However, running "solve(qr(PLLH, LAPACK=TRUE)) returns:
> 
>                       [,1]                  [,2]
> [1,]    0.0137466171688024    0.0137466171688024
> [2,] 1141.5395678772131305 1141.5395678772131305
> 
> which seems wrong as the original matrix had identical entries on the off
> diagonals.
> 
> I am neither a programmer nor an expert in matrix calculus, so I do not
> understand why I should be getting different answers using different
> libraries to perform the ostensibly same function. I understand the
> extremely small value of d²X/d(theta)² (PLLH[2,2]) may be contributing to
> the error, but I would appreciate confirmation, or correction, from the
> experts on this list.
> 
> Thank you very much,
> 
> --Avraham Adler
> 
> 
> 
> PS: For completeness, the QR decompositions per "R" under LINPACK and
> LAPACK are shown below:
> 
> > qr(PLLH)
> $qr
>                           alpha                     theta
> alpha -1144.6262175869414932095 0.01290777720653695122277
> theta    -0.0000112768491646264 0.00000000987863187747112
> 
> $rank
> [1] 2
> 
> $qraux
> [1] 1.99999999993641619511209 0.00000000987863187747112
> 
> $pivot
> [1] 1 2
> 
> attr(,"class")
> [1] "qr"
> >
> 
> > qr(PLLH, LAPACK=TRUE)
> $qr
>                            alpha                     theta
> alpha -1144.62621758694149320945 0.01290777720653695122277
> theta    -0.00000563842458249248 0.00000000987863187747112
> 
> $rank
> [1] 2
> 
> $qraux
> [1] 1.99999999993642 0.00000000000000
> 
> $pivot
> [1] 1 2
> 
> attr(,"useLAPACK")
> [1] TRUE
> attr(,"class")
> [1] "qr"
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>




More information about the R-help mailing list