Come riparare in r: il sistema è esattamente singolare
Un errore che potresti riscontrare in R è:
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Questo errore si verifica quando provi a utilizzare la funzione risolvere() , ma la matrice con cui stai lavorando è una matrice singolare che non ha una matrice inversa.
Questo tutorial spiega come risolvere questo errore nella pratica.
Come riprodurre l’errore
Supponiamo di creare la seguente matrice in 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
Supponiamo ora di provare a utilizzare la funzionesolve() per calcolare l’inverso della matrice:
#attempt to invert matrix
solve(mat)
Error in solve.default(mat):
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Riceviamo un errore perché la matrice che abbiamo creato non ha una matrice inversa.
Nota : dai un’occhiata a questa pagina di Wolfram MathWorld che mostra 10 diversi esempi di matrici che non hanno una matrice inversa.
Per definizione, una matrice è singolare se ha determinante zero.
Puoi utilizzare la funzione det() per calcolare il determinante di una determinata matrice prima di tentare di invertirla:
#calculate determinant of matrix
det(mat)
[1] 0
Il determinante della nostra matrice è zero, il che spiega perché riscontriamo un errore.
Come correggere l’errore
L’unico modo per correggere questo errore è semplicemente creare una matrice che non sia singolare.
Ad esempio, supponiamo di utilizzare la funzionesolve() per invertire la seguente matrice in 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
Non riceviamo alcun errore quando invertiamo la matrice perché la matrice non è singolare.
Risorse addizionali
I seguenti tutorial spiegano come correggere altri errori comuni in R:
Come risolvere il problema: la condizione ha lunghezza > 1 e verrà utilizzato solo il primo elemento
Come risolvere: argomento non numerico dell’operatore binario
Come risolvere il problema: dim(X) deve avere una lunghezza positiva
Come risolvere: errore nella selezione degli argomenti non utilizzati