Нахождение обратной матрицы в R - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть ковариационная матрица дисперсии 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 ]

0 голосов
/ 23 ноября 2018

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

 (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)
0 голосов
/ 23 ноября 2018

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

enter image description here

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

Это не самая удобная вещь, которую можно делать вручную, поэтому 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
...