Como reparar em r: o sistema é exatamente singular
Um erro que você pode encontrar no R é:
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Este erro ocorre quando você tenta usar a função solve() , mas a matriz com a qual você está trabalhando é uma matriz singular que não possui uma matriz inversa.
Este tutorial explica como resolver esse erro na prática.
Como reproduzir o erro
Suponha que criemos a seguinte matriz em R:
#create singular matrix
mat <- matrix(c(1, 1, 1, 1), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 1
[2,] 1 1
Agora suponha que tentamos usar a função solve() para calcular o inverso da matriz:
#attempt to invert matrix
solve(mat)
Error in solve.default(mat):
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Recebemos um erro porque a matriz que criamos não possui uma matriz inversa.
Nota : Confira esta página do Wolfram MathWorld que mostra 10 exemplos diferentes de matrizes que não possuem uma matriz inversa.
Por definição, uma matriz é singular se tiver determinante zero.
Você pode usar a função det() para calcular o determinante de uma determinada matriz antes de tentar invertê-la:
#calculate determinant of matrix
det(mat)
[1] 0
O determinante da nossa matriz é zero, o que explica porque encontramos um erro.
Como corrigir o erro
A única maneira de corrigir esse erro é simplesmente criar uma matriz que não seja singular.
Por exemplo, suponha que usamos a função solve() para inverter a seguinte matriz em R:
#create matrix that is not singular
mat <- matrix(c(1, 7, 4, 2), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 4
[2,] 7 2
#calculate determinant of matrix
det(mat)
[1] -26
#invert matrix
solve(mat)
[,1] [,2]
[1,] -0.07692308 0.15384615
[2,] 0.26923077 -0.03846154
Não recebemos erros ao inverter a matriz porque a matriz não é singular.
Recursos adicionais
Os tutoriais a seguir explicam como corrigir outros erros comuns no R:
Como corrigir: a condição tem comprimento > 1 e apenas o primeiro elemento será usado
Como corrigir: argumento não numérico do operador binário
Como corrigir: dim(X) deve ter um comprimento positivo
Como corrigir: erro ao selecionar argumentos não utilizados