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