R resolver: el sistema es exactamente singular
optimization in r (3)
Lapack es un paquete de Álgebra Lineal que es usado por R (en realidad se usa en todas partes) debajo de solve()
, dgesv escupe este tipo de error cuando la matriz que pasaste como parámetro es singular.
Como un addendum: dgesv realiza la descomposición de LU, lo cual, al usar su matriz, fuerza una división por 0, ya que esto no está bien definido, produce este error. Esto solo sucede cuando la matriz es singular o cuando es singular en su máquina (debido a la aproximación, puede hacer que un número realmente pequeño se considere 0)
Le sugiero que verifique su determinante si la matriz que está utilizando contiene en su mayoría enteros y no es grande. Si es grande, entonces mira este enlace .
Estoy resolviendo el problema de optimización simple. El conjunto de datos tiene 26 columnas y más de 3000 filas. El código fuente parece
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 raro 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 en absoluto. ¿Podría alguien explicarme dónde podría estar el problema y cómo tratarlo? Muchas gracias alex
Supongo que su código usa en algún lugar del segundo caso una matriz singular (es decir, no invertible), y la función de resolución necesita invertirlo. Esto no tiene nada que ver con el tamaño, sino con el hecho de que algunos de sus vectores son (probablemente) colineales.
Usar solve
con un solo parámetro es una solicitud para invertir una matriz. El mensaje de error le indica que su matriz es singular y no se puede invertir.