Поиск обратной матрицы в R

У меня есть ковариационная матрица дисперсии S:

> S
     [,1] [,2]
[1,]    4   -3
[2,]   -3    9

Я пытаюсь найти обратное.

Код, который у меня есть:

>invS <- (1/((S[1,1]*S[2,2])-(S[1,2]*S[2,1])))*S
           [,1]       [,2]
[1,]  0.1481481 -0.1111111
[2,] -0.1111111  0.3333333

Однако, если я использую solve () , я получаю следующее:

>invSalt <- solve(S)
          [,1]      [,2]
[1,] 0.3333333 0.1111111
[2,] 0.1111111 0.1481481

Почему invS неверен? Что я должен изменить, чтобы исправить это?

Всего 2 ответа


Вы правильно нашли определитель в знаменателе, но все остальное ошибочно.

введите описание изображения здесь

Недиагональные элементы должны быть с противоположным знаком, а диагональные элементы должны переключаться. Обе эти вещи хорошо видны при сравнении двух матриц.

Это не самая удобная вещь, которую можно сделать вручную, поэтому solve действительно лучше. Если вы настаиваете на том, чтобы делать это вручную, вы можете использовать

matrix(rev(S), 2, 2) / (prod(diag(S)) - S[1, 2] * S[2, 1]) * (2 * diag(1, 2) - 1)
#           [,1]      [,2]
# [1,] 0.3333333 0.1111111
# [2,] 0.1111111 0.1481481

Правильная формула

 (1/((S[1,1]*S[2,2])-(S[1,2]*S[2,1])))* matrix(c(S[2,2], -S[2,1], -S[1,2], S[1,1]),2)