R solve:system is exactly singular

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


Solution 1:

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.

Solution 2:

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.