[R] Solve an ordinary or generalized eigenvalue problem in R?

peter dalgaard pdalgd at gmail.com
Sat Apr 21 20:20:54 CEST 2012


On Apr 21, 2012, at 19:13 , Berend Hasselman wrote:

> 
> On 21-04-2012, at 16:40, peter dalgaard wrote:
> 
>> 
>> On Apr 21, 2012, at 15:22 , Luke Hartigan wrote:
>> 
>>> Hi all,
>>> 
>>> In my experience, using eigen to solve generalized eigenvalue / eigenvector
>>> problems only gives correct looking eigenvalues while the eigenvectors seem
>>> to be wrong (in comparison to results from MATLAB's 'eig' function for
>>> example).
>> 
>> Could you please document that? There are many misconceptions about when eigenvectors are "correct" and platform dependencies too. As far as I can tell, both R and Matlab use the same LAPACK routines.
> 
> 
> The OP posted two matrices:
> 
> A <- matrix(c(1457.738, 1053.181, 1256.953,
>              1053.181, 1213.728, 1302.838,
>              1256.953, 1302.838, 1428.269), nrow=3, byrow=TRUE)
> 
> B <- matrix(c(4806.033, 1767.480, 2622.744,
>              1767.480, 3353.603, 3259.680,
>              2622.744, 3259.680, 3476.790), nrow=3, byrow=TRUE)
> 
> I've tried
> 
> eigen(solve(B)%*%A) 
> 
> (which is probably not the best way to handle this problem numerically) to approximate the generalized ev problem.
> And the geigen function
> 
> geigen(A,B,TRUE,TRUE)
> 
> The eigenvalues are identical upto the printed 9 digits but the eigenvectors appear to be quite different.
> Maybe this is what Luke meant.
> 
> Berend
> 


They look quite similar to me:

> ev <- eigen(solve(B,A) )$vectors
> ge <- geigen(A, B, TRUE , TRUE)
> ev / ge$vl
          [,1]     [,2]       [,3]
[1,] 0.9324603 0.813422 -0.7423694
[2,] 0.9324603 0.813422 -0.7423694
[3,] 0.9324603 0.813422 -0.7423694
> ev / ge$vr
          [,1]     [,2]       [,3]
[1,] 0.9324603 0.813422 -0.7423694
[2,] 0.9324603 0.813422 -0.7423694
[3,] 0.9324603 0.813422 -0.7423694

(and of course, eigenvectors of any sort are only defined up to a constant multiplier)
-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list