Как починить в r: система точно в единственном числе
Ошибка, с которой вы можете столкнуться в R:
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Эта ошибка возникает, когда вы пытаетесь использовать функциюsolve() , но матрица, с которой вы работаете, представляет собой сингулярную матрицу, не имеющую обратной матрицы.
В этом руководстве объясняется, как устранить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, мы создаем следующую матрицу в 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
Теперь предположим, что мы пытаемся использовать функциюsolve() для вычисления обратной матрицы:
#attempt to invert matrix
solve(mat)
Error in solve.default(mat):
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Мы получаем ошибку, поскольку созданная нами матрица не имеет обратной матрицы.
Примечание . Посетите эту страницу из Wolfram MathWorld, на которой показаны 10 различных примеров матриц, не имеющих обратной матрицы.
По определению матрица сингулярна, если она имеет нулевой определитель.
Вы можете использовать функцию det() для вычисления определителя данной матрицы, прежде чем пытаться ее инвертировать:
#calculate determinant of matrix
det(mat)
[1] 0
Определитель нашей матрицы равен нулю, что объясняет, почему мы сталкиваемся с ошибкой.
Как исправить ошибку
Единственный способ исправить эту ошибку — просто создать неисключительную матрицу.
Например, предположим, что мы используем функциюsolve() для инвертирования следующей матрицы в 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
Никаких ошибок при инвертировании матрицы мы не получаем, поскольку матрица не является сингулярной.
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:
Как исправить: длина условия > 1 и будет использоваться только первый элемент
Как исправить: нечисловой аргумент бинарного оператора
Как исправить: dim(X) должен иметь положительную длину
Как исправить: ошибка при выборе неиспользуемых аргументов