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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *