Pregunta Resolver R: el sistema es exactamente singular


Estoy resolviendo un problema simple de optimización. El conjunto de datos tiene 26 columnas y más de 3000 filas. El código fuente se ve como

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

Y todo funciona perfectamente, pero luego quiero hacer lo mismo por un período más corto (solo 261 filas) y la función de resolución escribe el siguiente error:

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

Es extraño porque cuando hago lo mismo con algunos números aleatorios:

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

no se produce ningún error. ¿Podría alguien explicarme dónde podría estar el problema y cómo tratarlo? Muchas gracias, Alex


19
2017-07-04 13:23


origen


Respuestas:


Utilizando solve con un solo parámetro es una solicitud para invertir una matriz. El mensaje de error te dice que tu matriz es singular y no puede invertirse.


18
2017-07-04 13:29



Supongo que su código utiliza en algún lugar del segundo caso una matriz singular (es decir, no invertible), y la función de resolver necesita invertirla. Esto no tiene nada que ver con el tamaño, pero con el hecho de que algunos de sus vectores son (probablemente) colineales.


10
2017-07-04 13:29



Lapack es un paquete de Algebra Lineal que es usado por R (en realidad se usa en todas partes) debajo solve(), dgesv escupe este tipo de error cuando la matriz que pasó como parámetro es singular.

Como una adición: dgesv realiza la descomposición de LU, que, al usar su matriz, fuerza una división por 0, ya que está mal definida, arroja este error. Esto solo ocurre cuando la matriz es singular o cuando es singular en su máquina (debido a la aproximación puede tener un número muy pequeño como 0)

Te sugiero que verifiques su determinante si la matriz que estás usando contiene principalmente enteros y no es grande. Si es grande, entonces eche un vistazo a este enlace.


5
2017-08-06 10:50