Нахождение обратной матрицы в 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)
Другие вопросы по тегам