Дисперсия 0 в ковариационной матрице

#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. Я обновил код.