Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R solve:system is exactly singular

Tags:

I am solving simple optimization problem. The data set has 26 columns and over 3000 rows. The source code looks like

Means   <- colMeans(Returns) Sigma   <- cov(Returns) invSigma1 <- solve(Sigma) 

And everything works perfect- but then I want to do the same for shorter period (only 261 rows) and the solve function writes the following error:

solve(Sigma) Error in solve.default(Sigma) :    Lapack routine dgesv: system is exactly singular  

Its weird because when I do the same with some random numbers:

Returns<-matrix(runif(6786,-1,1), nrow=261) Means   <- colMeans(Returns) Sigma   <- cov(Returns) invSigma <- solve(Sigma) 

no error occurs at all. Could someone explain me where could be the problem and how to treat it. Thank you very much, Alex

like image 666
Alex Avatar asked Jul 04 '11 13:07

Alex


People also ask

Can a matrix be singular in R?

By definition, a matrix is singular if it has a determinant of zero.

What does it mean if a matrix is singular?

A square matrix that does not have a matrix inverse. A matrix is singular iff its determinant is 0.

What is a singular matrix give an example?

The matrices are known to be singular if their determinant is equal to the zero. For example, if we take a matrix x, whose elements of the first column are zero. Then by the rules and property of determinants, one can say that the determinant, in this case, is zero. Therefore, matrix x is definitely a singular matrix.


2 Answers

Using solve with a single parameter is a request to invert a matrix. The error message is telling you that your matrix is singular and cannot be inverted.

like image 81
borrible Avatar answered Jan 05 '23 13:01

borrible


I guess your code uses somewhere in the second case a singular matrix (i.e. not invertible), and the solve function needs to invert it. This has nothing to do with the size but with the fact that some of your vectors are (probably) colinear.

like image 29
drolex Avatar answered Jan 05 '23 13:01

drolex