[R] Matrix eigenvectors in R and MatLab

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Apr 8 17:48:49 CEST 2003


On Tue, 8 Apr 2003, Spencer Graves wrote:

> Regarding the relationship between eigen and svd:
> 
> 	  For symmetric matrices, the svd is a solution to the Eigenvalue 
> problem.  However, if eigenvectors are not normalized to length 1, then 
> the two solutions will not look the same.
> 
> 	  Another current question asked about the differences in eigenanalysis 
> between R and Matlab.  In sum, it appears that R sorts the eigenvalues 
> in decreasing order of absolute values while Matlab does not, but Matlab 
> normalizes the eigenvectors to length 1 while R does not.

The last is not wholly accurate for R 1.6.2 (it only applies to
eigen(symmetric=FALSE)), and the imminent R 1.7.0 will normalize
the eigenvectors (except in back-compatibility mode).

> 
> Spencer Graves
> 
> David Brahm wrote:
> > Mikael Niva <mikael.niva at ebc.uu.se> wrote:
> > 
> >>Is there anyone who knows why I get different eigenvectors when I run
> >>MatLab and R?
> > 
> > 
> > R orders the eigenvalues by absolute value, which seems sensible; the MatLab
> > eigenvalues you gave do not seem to be in any particular order.
> > 
> > R does not normalize the eigenvectors (as MatLab does), but you can easily do
> > so yourself:
> > 
> > R> PA9900<-c(11/24 ,10/53 ,0/1 ,0/1 ,29/43 ,1/24 ,27/53 ,0/1 ,0/1 ,13/43
> > R>   ,14/24 ,178/53 ,146/244 ,17/23 ,15/43 ,2/24 ,4/53 ,0/1 ,2/23 ,2/43 ,4/24
> > R>   ,58/53 ,26/244 ,0/1 ,5/43)
> > R> PA9900<-matrix(PA9900,nrow=5,byrow=T)
> > R> eig <- eigen(PA9900)
> > 
> > R> eig$values   # Note they are in descending order of absolute value:
> > [1]  1.2352970  0.3901522 -0.2562860  0.2259411  0.1742592
> > 
> > R> sweep(eig$vectors, 2, sqrt(colSums(eig$vectors^2)), "/")
> >             [,1]         [,2]        [,3]        [,4]        [,5]
> > [1,] -0.22500913 -0.499825704 -0.43295788 -0.18537961 -0.17952679
> > [2,] -0.10826756  0.159919608 -0.17713941 -0.05825639 -0.06137926
> > [3,] -0.94030246 -0.845706299  0.71911349  0.97075584  0.96165016
> > [4,] -0.03271669 -0.096681499  0.07518268 -0.11595437 -0.17499009
> > [5,] -0.22893213  0.005790397  0.50832318  0.08017655  0.09279089
> > 
> > 
> > This is the same as the MatLab result you gave, except for 2 things:
> > 
> > 1) The column order matches the eigenvalue order, so R's columns are in a
> >    different order than Matlab's.
> > 
> > 2) The sign is different for one of the vectors (my column 3, your 2).  The
> >    sign of an eigenvector is not well defined, even after normalization.
> > 
> > MatLab> wmat =
> > MatLab>    -0.2250    0.4330   -0.4998   -0.1795   -0.1854
> > MatLab>    -0.1083    0.1771    0.1599   -0.0614   -0.0583
> > MatLab>    -0.9403   -0.7191   -0.8457    0.9617    0.9708
> > MatLab>    -0.0327   -0.0752   -0.0967   -0.1750   -0.1160
> > MatLab>    -0.2289   -0.5083    0.0058    0.0928    0.0802
> > MatLab> 
> > MatLab> dmat =
> > MatLab>     1.2353         0         0         0         0
> > MatLab>          0   -0.2563         0         0         0
> > MatLab>          0         0    0.3902         0         0
> > MatLab>          0         0         0    0.1743         0
> > MatLab>          0         0         0         0    0.2259
> > 
> >    Side note: there is some relation between eigenvectors and svd (singular
> > value decomposition) which I have not fully grokked yet; if anyone has a simple
> > explanation I'd be grateful.
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> 

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-help mailing list