Как исправить в 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
mat

 [,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
mat

 [,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) должен иметь положительную длину
Как исправить: ошибка при выборе неиспользуемых аргументов

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.