Example:
> M <- array(1:2, dim=c(2,2)) > (svdM <- svd(M)) $d [1] 3.162278 0.000000
$u [,1] [,2] [1,] -0.4472136 -0.8944272 [2,] -0.8944272 0.4472136
$v [,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], where 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
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help