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
By definition, a matrix is singular if it has a determinant of zero.
A square matrix that does not have a matrix inverse. A matrix is singular iff its determinant is 0.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With