# How to create a covariance matrix in R?

To create a covariance matrix, we first need to find the correlation matrix and a vector of standard deviations is also required. The correlation matrix can be found by using cor function with matrix object. For example, if we have matrix M then the correlation matrix can be found as cor(M). Now we can use this matrix to find the covariance matrix but we should make sure that we have the vector of standard deviations.

## Example1

Live Demo

> M1<-matrix(rnorm(25,5,1),ncol=5)
> M1

## Output

       [,1]       [,2]    [,3]     [,4]    [,5]
[1,] 5.446881 3.918951 4.306415 4.446757 5.438095
[2,] 5.174487 4.401736 4.755313 5.341615 5.470727
[3,] 4.042656 6.303782 4.939945 4.847339 4.698141
[4,] 3.931823 6.870019 5.196559 6.692013 3.689279
[5,] 4.800770 4.841470 4.356387 3.508081 3.913045

## Example

> cor(M1)

## Output

      [,1]         [,2]      [,3]       [,4]     [,5]
[1,] 1.0000000 -0.9908635 -0.8197813 -0.5066590 0.7190219
[2,] -0.9908635 1.0000000 0.8695808 0.6121477  -0.7017947
[3,] -0.8197813 0.8695808 1.0000000 0.8684189  -0.3766508
[4,] -0.5066590 0.6121477 0.8684189 1.0000000  -0.1766397
[5,] 0.7190219 -0.7017947 -0.3766508 -0.1766397 1.0000000

## Example

> SD_M1<-rnorm(5)
> M1_Covariance<-(SD_M1%*%t(SD_M1))*cor(M1)
> M1_Covariance

## Output

       [,1]        [,2]     [,3]      [,4]     [,5]
[1,] 0.4916487 0.5972772 0.3299963 0.4854532 0.4018740
[2,] 0.5972772 0.7390424 0.4291690 0.7191096 0.4809114
[3,] 0.3299963 0.4291690 0.3295850 0.6812666 0.1723625
[4,] 0.4854532 0.7191096 0.6812666 1.8672751 0.1924034
[5,] 0.4018740 0.4809114 0.1723625 0.1924034 0.6353903

## Example2

Live Demo

> M2<-matrix(rnorm(36,5,3),ncol=6)
> M2

## Output

    [,1]            [,2]    [,3]     [,4]     [,5]      [,6]
[1,] 3.97345156 2.215491 3.112134 4.6181951 3.6277630 12.322117
[2,] 8.87011312 4.857979 9.067974 6.7924669 5.4123406 3.062662
[3,] 8.70716339 4.905574 5.092897 7.1700455 8.1998048 2.790839
[4,] 2.79704783 8.857838 3.804275 8.0486804 1.8110960 3.789724
[5,] 4.37050111 4.220881 7.835320 -0.9182616 0.5487265 5.676240
[6,] 0.01411185 4.138786 1.736414 6.8982956 4.4729650 6.719265

## Example

> cor(M2)

## Output

        [,1]        [,2]       [,3]       [,4]      [,5]       [,6]
[1,] 1.00000000 -0.05099798 0.72101949 0.0606742 0.5573581 -0.4634089
[2,] -0.05099798 1.00000000 0.02406821 0.4332765 -0.1929059 -0.6648619
[3,] 0.72101949 0.02406821 1.00000000 -0.3981214 -0.0489995 -0.4858796
[4,] 0.06067420 0.43327648 -0.39812145 1.0000000 0.5885335 -0.2935423
[5,] 0.55735812 -0.19290585 -0.04899950 0.5885335 1.0000000 -0.2820521
[6,] -0.46340892 -0.66486188 -0.48587961 -0.2935423 -0.2820521 1.0000000

## Example

> SD_M2<-rnorm(6)
> M2_Covariance<-round((SD_M2%*%t(SD_M2))*cor(M2),2)
> M2_Covariance

## Output

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.02 0.00 0.01 0.00 -0.17 -0.10
[2,] 0.00 0.00 0.00 0.00 0.00 -0.01
[3,] 0.01 0.00 0.00 0.00 0.01 -0.04
[4,] 0.00 0.00 0.00 0.01 -0.09 -0.03
[5,] -0.17 0.00 0.01 -0.09 4.10 0.80
[6,] -0.10 -0.01 -0.04 -0.03 0.80 1.95

## Example3

Live Demo

> M3<-matrix(runif(36,2,5),ncol=6)
> M3

## Output

      [,1]       [,2]     [,3]     [,4]    [,5]     [,6]
[1,] 3.532356 3.325595 2.533484 3.858067 4.209765 4.520970
[2,] 2.836041 4.624075 2.739955 4.294261 2.815741 3.037129
[3,] 2.171741 2.277840 3.939984 3.464941 4.209270 3.565684
[4,] 3.363305 2.623304 2.398647 2.180268 3.740313 3.967784
[5,] 4.637331 2.672298 4.518063 4.851971 2.905769 2.946685
[6,] 3.855836 4.070287 3.698472 4.741746 3.726380 2.603361

## Example

> cor(M3)

## Output

        [,1]      [,2]       [,3]       [,4]      [,5]     [,6]
[1,] 1.00000000 0.02856209 0.3130817 0.4599297 -0.3979636 -0.2620906
[2,] 0.02856209 1.00000000 -0.3159665 0.4775255 -0.4282192 -0.4020013
[3,] 0.31308166 -0.31596655 1.0000000 0.5990245 -0.2107199 -0.6214000
[4,] 0.45992975 0.47752549 0.5990245 1.0000000 -0.4594787 -0.6584400
[5,] -0.39796357 -0.42821922 -0.2107199 -0.4594787 1.0000000 0.6207340
[6,] -0.26209064 -0.40200135 -0.6214000 -0.6584400 0.6207340 1.0000000

## Example

> SD_M3<-runif(6,2,3)
> M3_Covariance<-round((SD_M3%*%t(SD_M3))*cor(M3),4)
> M3_Covariance

## Output

[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 8.2937 0.1818 2.7005 3.6199 -3.2048 -1.9410
[2,] 0.1818 4.8857 -2.0918 2.8846 -2.6467 -2.2850
[3,] 2.7005 -2.0918 8.9705 4.9032 -1.7648 -4.7860
[4,] 3.6199 2.8846 4.9032 7.4690 -3.5114 -4.6274
[5,] -3.2048 -2.6467 -1.7648 -3.5114 7.8193 4.4635
[6,] -1.9410 -2.2850 -4.7860 -4.6274 4.4635 6.6127

## Example4

Live Demo

> M4<-matrix(rpois(64,10),ncol=8)
> M4

## Output

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 2 12 6 6 20 6 5 13
[2,] 11 14 11 10 13 8 14 9
[3,] 7 10 10 10 13 6 9 13
[4,] 6 15 12 11 9 7 14 11
[5,] 9 14 18 14 13 7 15 15
[6,] 12 12 6 14 9 11 6 5
[7,] 11 9 12 9 10 8 12 3
[8,] 12 15 9 15 8 10 4 9

## Example

> round(cor(M4),2)

## Output

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1.00 0.06 0.15 0.69 -0.75 0.80 0.06 -0.63
[2,] 0.06 1.00 0.20 0.48 -0.20 0.20 0.12 0.37
[3,] 0.15 0.20 1.00 0.27 -0.16 -0.32 0.82 0.33
[4,] 0.69 0.48 0.27 1.00 -0.73 0.68 -0.03 -0.08
[5,] -0.75 -0.20 -0.16 -0.73 1.00 -0.68 -0.10 0.54
[6,] 0.80 0.20 -0.32 0.68 -0.68 1.00 -0.37 -0.67
[7,] 0.06 0.12 0.82 -0.03 -0.10 -0.37 1.00 0.15
[8,] -0.63 0.37 0.33 -0.08 0.54 -0.67 0.15 1.00

## Example

> SD_M4<-rpois(8,2)
> M4_Covariance<-round((SD_M4%*%t(SD_M4))*cor(M4),2)
> M4_Covariance

## Output

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 4.00 0.12 1.17 1.39 -1.51 3.20 0.24 -2.52
[2,] 0.12 1.00 0.82 0.48 -0.20 0.39 0.24 0.74
[3,] 1.17 0.82 16.00 1.10 -0.63 -2.54 6.56 2.66
[4,] 1.39 0.48 1.10 1.00 -0.73 1.36 -0.06 -0.15
[5,] -1.51 -0.20 -0.63 -0.73 1.00 -1.35 -0.20 1.09
[6,] 3.20 0.39 -2.54 1.36 -1.35 4.00 -1.50 -2.70
[7,] 0.24 0.24 6.56 -0.06 -0.20 -1.50 4.00 0.58
[8,] -2.52 0.74 2.66 -0.15 1.09 -2.70 0.58 4.00

Updated on: 19-Nov-2020

549 Views