#r #matrix
Вопрос:
Я составил матрицу ковариат. Это хорошо работает. Вопрос: Как мне сделать различия между ковариатами 0 и дисперсией этой переменной 1, как показано на рисунке?
set.seed(1) M1lt;-matrix(rnorm(25,5,1),ncol=5) M1 cor(M1) SD_M1lt;-rnorm(5) M1_Covariancelt;-(SD_M1%*%t(SD_M1))*cor(M1) M1_Covariance
Ответ №1:
Вот функция f
, принимающая в качестве аргументов матрицу ковариации S
и вектор целых индексов k
. Он устанавливает отклонения переменных, индексированных k
на 1, а ковариации, включающие эти переменные, равны 0.
function(S, k) { S[k, ] lt;- S[, k] lt;- 0 S[cbind(k, k)] lt;- 1 S } f(M1_Covariance, c(1:2, 5L))
[,1] [,2] [,3] [,4] [,5] [1,] 1 0 0.000000 0.0000000 0 [2,] 0 1 0.000000 0.0000000 0 [3,] 0 0 2.163113 -0.4791670 0 [4,] 0 0 -0.479167 0.2286275 0 [5,] 0 0 0.000000 0.0000000 1
S
на самом деле это может быть любая квадратная матрица, поскольку операция не зависит от S
того, является ли она симметричной или положительно определенной.
Комментарии:
1. Спасибо, очень хорошее решение! Один вопрос: если бы я хотел иметь больше столбцов и строк с 0 и 1, как в предыдущем случае, как я должен изменить код?
2. Я обновил код.