[R] using SVD to get an inverse matrix of covariance matrix

Spencer Graves spencer.graves at pdf.com
Fri Jul 11 21:23:45 CEST 2003

	  More presicely, if M is singular, then M%*%x = b will have multiple 
solutions only if "b" is in the subspace spanned by columns of M.


 > M <- array(1:2, dim=c(2,2))
 > (svdM <- svd(M))
[1] 3.162278 0.000000

            [,1]       [,2]
[1,] -0.4472136 -0.8944272
[2,] -0.8944272  0.4472136

            [,1]       [,2]
[1,] -0.7071068 -0.7071068
[2,] -0.7071068  0.7071068

	  This "M" is not symmetrical and so cannot be a covariance matrix, but 
you can get the same effect with a symmetrical matrix.  I'm using this 
example because it is the simplest thing that comes to mind to 
illustrate the point.

	  By the definition of the singular value decomposition, M = svdM$u %*% 
diag(svdM$d) %*% t(svdM$v).  Since svdM$d[2] == 0,

	  M%*%x = svdM$u[, 1]*svdM$d[1]*t(svdM$v[,1])%*%x
	    = x1 * svdM$u[,1],
	  x1 = svdM$d[1]*t(svdM$v[,1])%*%x

	  Thus, if b is proportional to svdM$u[,1], the system has a solution. 
  That solution will be proportional to svdM$v[,1] + x2*svdM$v[,2], for 
any arbitrary value of x2.

hope this helps.
spencer graves

Thomas Lumley wrote:
> On Fri, 11 Jul 2003, ge yreyt wrote:
>>Dear R-users,
>>I have one question about using SVD to get an inverse
>>matrix of covariance matrix
>>Sometimes I met many singular values d are close to 0:
>>look this example
> <snip>
>>most values of inverse matrix
>>will be huge. This must be not a good way. MOre
>>special case, if a single value is 0, then
>>we can not calculate inverse d based on 1/d.
>>Therefore, my question is how I can calculate inverse
>>d (that is inverse diag(d) more efficiently???
> If singular values are zero the matrix doesn't have an inverse: that is,
> the equation   Mx=b  will have multiple solutions for any given b.
> It is possible to get a pseudoinverse, a matrix M that picks out one of
> the solutions.  One way to do this is to set the diagonal to 1/d where d
> is not (nearly) zero and to 0 when d is (nearly) zero. One place to find a
> discussion of this is `Matrix Computations' by Golub and van Loan.
> 	-thomas
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help

More information about the R-help mailing list