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

Thomas Lumley tlumley at u.washington.edu
Fri Jul 11 18:16:36 CEST 2003

```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

```