y1 <- c(72,60,56,41,32,30,39,42,37,33,32,63,54,47,91,56,79,81,78,46,39,32,60,35,39,50,43,48)
y2 <- c(66,53,57,29,32,35,39,43,40,29,30,45,46,51,79,68,65,80,55,38,35,30,50,37,36,34,37,54)
y3 <- c(76,66,64,36,35,34,31,31,31,27,34,74,60,52,100,47,70,68,67,37,34,30,67,48,39,37,39,57)
y4 <- c(77,63,58,38,36,26,27,25,25,36,28,63,52,43,75,50,61,58,60,38,37,32,54,39,31,40,50,43)1 Exemplo
Exemplo de cálculo de matriz de Covariâncias e de Correlações amostrais, além da distância de Mahalanobis.
Fonte dos dados: Weights of Cork Boring (in Centigrams) in Four Directions for 28 trees. Applied Multivariate Statistics with SAS Software. Khattree & Naik(2003) - p. 11.
1.1 Vetores e Matriz
Para criar vetores no R, definimos um nome para cada vetor (y1, y2, y3 e y4), em seguida, utilizamos o operador <- e a função c() para atribuir valores a cada um dos objetos (vetores). Dentro de c(), declaramos seus valores, separados por vírgula.
Com a função cbind() juntamos os vetores y1, y2, y3 e y4, salvando-os em um objeto chamado Y. Utilizando a função colnames(), alteramos os nomes dos vetores ("North", "East", "South", "West").
North East South West
[1,] 72 66 76 77
[2,] 60 53 66 63
[3,] 56 57 64 58
[4,] 41 29 36 38
[5,] 32 32 35 36
[6,] 30 35 34 26
[7,] 39 39 31 27
[8,] 42 43 31 25
[9,] 37 40 31 25
[10,] 33 29 27 36
[11,] 32 30 34 28
[12,] 63 45 74 63
[13,] 54 46 60 52
[14,] 47 51 52 43
[15,] 91 79 100 75
[16,] 56 68 47 50
[17,] 79 65 70 61
[18,] 81 80 68 58
[19,] 78 55 67 60
[20,] 46 38 37 38
[21,] 39 35 34 37
[22,] 32 30 30 32
[23,] 60 50 67 54
[24,] 35 37 48 39
[25,] 39 36 39 31
[26,] 50 34 37 40
[27,] 43 37 39 50
[28,] 48 54 57 43
Com a função class(), constatamos que o objeto Y é uma matriz (matrix).
class(Y)[1] "matrix" "array"
proc iml;
y1 = {72,60,56,41,32,30,39,42,37,33,32,63,54,47, 91,56,79,81,78,46, 39,32,60,35,39,50,43,48};
y2 = {66,53,57,29,32,35,39,43,40,29,30,45,46,51, 79,68,65,80,55,38, 35,30,50,37,36,34,37,54};
y3 = {76,66,64,36,35,34,31,31,31,27,34,74,60,52,100,47,70,68,67,37, 34,30,67,48,39,37,39,57};
y4 = {77,63,58,38,36,26,27,25,25,36,28,63,52,43, 75,50,61,58,60,38, 37,32,54,39,31,40,50,43};Y = y1||y2||y3||y4;
create Cork var {North East South West};
append from Y;
Close Cork;1.2 Matriz de Variâncias e Covariâncias
Para obtermos a matriz de variâncias e covariâncias, precisamos dos seguintes objetos:
n: número de observações \(n\);In: matriz identidade \(\mathbf{I}\);jn: vetor coluna de 1’s \(\mathbf{j}\);Jnn: matriz de 1’s \(\mathbf{J}\).
As funções nrow() e ncol() nos retornam o número de linhas e colunas de um objeto, respectivamente.
No caso da matriz Y, apresenta dimensão \(28 \times 4\).
A função diag() cria uma matriz identidade. Basta inserir dentro da função a dimensão da matriz.
In <- diag(n)
In [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 1 0 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 1 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 1 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 1 0 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 1 0 0 0 0 0
[9,] 0 0 0 0 0 0 0 0 1 0 0 0 0
[10,] 0 0 0 0 0 0 0 0 0 1 0 0 0
[11,] 0 0 0 0 0 0 0 0 0 0 1 0 0
[12,] 0 0 0 0 0 0 0 0 0 0 0 1 0
[13,] 0 0 0 0 0 0 0 0 0 0 0 0 1
[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
[1,] 0 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 0 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 0 0 0 0 0
[9,] 0 0 0 0 0 0 0 0 0 0 0 0
[10,] 0 0 0 0 0 0 0 0 0 0 0 0
[11,] 0 0 0 0 0 0 0 0 0 0 0 0
[12,] 0 0 0 0 0 0 0 0 0 0 0 0
[13,] 0 0 0 0 0 0 0 0 0 0 0 0
[14,] 1 0 0 0 0 0 0 0 0 0 0 0
[15,] 0 1 0 0 0 0 0 0 0 0 0 0
[16,] 0 0 1 0 0 0 0 0 0 0 0 0
[17,] 0 0 0 1 0 0 0 0 0 0 0 0
[18,] 0 0 0 0 1 0 0 0 0 0 0 0
[19,] 0 0 0 0 0 1 0 0 0 0 0 0
[20,] 0 0 0 0 0 0 1 0 0 0 0 0
[21,] 0 0 0 0 0 0 0 1 0 0 0 0
[22,] 0 0 0 0 0 0 0 0 1 0 0 0
[23,] 0 0 0 0 0 0 0 0 0 1 0 0
[24,] 0 0 0 0 0 0 0 0 0 0 1 0
[25,] 0 0 0 0 0 0 0 0 0 0 0 1
[26,] 0 0 0 0 0 0 0 0 0 0 0 0
[27,] 0 0 0 0 0 0 0 0 0 0 0 0
[28,] 0 0 0 0 0 0 0 0 0 0 0 0
[,26] [,27] [,28]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 0 0 0
[5,] 0 0 0
[6,] 0 0 0
[7,] 0 0 0
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 0 0
[11,] 0 0 0
[12,] 0 0 0
[13,] 0 0 0
[14,] 0 0 0
[15,] 0 0 0
[16,] 0 0 0
[17,] 0 0 0
[18,] 0 0 0
[19,] 0 0 0
[20,] 0 0 0
[21,] 0 0 0
[22,] 0 0 0
[23,] 0 0 0
[24,] 0 0 0
[25,] 0 0 0
[26,] 1 0 0
[27,] 0 1 0
[28,] 0 0 1
\[ \mathbf{I}_{(28)} = \begin{bmatrix} 1 & 0 & 0 & \dots & 0 \\ 0 & 1 & 0 & \dots & 0 \\ 0 & 0 & 1 &\dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \dots & 1 \end{bmatrix} \]
Com a função matrix(), podemos criar qualquer tipo de matriz, vetor ou escalar. Para isso, utilizamos três argumentos dentro da função:
data =: os elementos que compõem a matriz;nrow =: número de linhas da matriz;ncol =: número de colunas da matriz.
jn <- matrix(data = 1, nrow = n, ncol = 1)
jn [,1]
[1,] 1
[2,] 1
[3,] 1
[4,] 1
[5,] 1
[6,] 1
[7,] 1
[8,] 1
[9,] 1
[10,] 1
[11,] 1
[12,] 1
[13,] 1
[14,] 1
[15,] 1
[16,] 1
[17,] 1
[18,] 1
[19,] 1
[20,] 1
[21,] 1
[22,] 1
[23,] 1
[24,] 1
[25,] 1
[26,] 1
[27,] 1
[28,] 1
Jnn <- matrix(data = 1, nrow = n, ncol = n)
Jnn [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[6,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[10,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[11,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[12,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[13,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[14,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[15,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[16,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[17,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[18,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[19,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[20,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[21,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[22,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[23,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[24,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[25,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[26,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[27,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[28,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
[1,] 1 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 1 1
[6,] 1 1 1 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1 1 1 1
[10,] 1 1 1 1 1 1 1 1 1 1 1 1
[11,] 1 1 1 1 1 1 1 1 1 1 1 1
[12,] 1 1 1 1 1 1 1 1 1 1 1 1
[13,] 1 1 1 1 1 1 1 1 1 1 1 1
[14,] 1 1 1 1 1 1 1 1 1 1 1 1
[15,] 1 1 1 1 1 1 1 1 1 1 1 1
[16,] 1 1 1 1 1 1 1 1 1 1 1 1
[17,] 1 1 1 1 1 1 1 1 1 1 1 1
[18,] 1 1 1 1 1 1 1 1 1 1 1 1
[19,] 1 1 1 1 1 1 1 1 1 1 1 1
[20,] 1 1 1 1 1 1 1 1 1 1 1 1
[21,] 1 1 1 1 1 1 1 1 1 1 1 1
[22,] 1 1 1 1 1 1 1 1 1 1 1 1
[23,] 1 1 1 1 1 1 1 1 1 1 1 1
[24,] 1 1 1 1 1 1 1 1 1 1 1 1
[25,] 1 1 1 1 1 1 1 1 1 1 1 1
[26,] 1 1 1 1 1 1 1 1 1 1 1 1
[27,] 1 1 1 1 1 1 1 1 1 1 1 1
[28,] 1 1 1 1 1 1 1 1 1 1 1 1
[,26] [,27] [,28]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
[4,] 1 1 1
[5,] 1 1 1
[6,] 1 1 1
[7,] 1 1 1
[8,] 1 1 1
[9,] 1 1 1
[10,] 1 1 1
[11,] 1 1 1
[12,] 1 1 1
[13,] 1 1 1
[14,] 1 1 1
[15,] 1 1 1
[16,] 1 1 1
[17,] 1 1 1
[18,] 1 1 1
[19,] 1 1 1
[20,] 1 1 1
[21,] 1 1 1
[22,] 1 1 1
[23,] 1 1 1
[24,] 1 1 1
[25,] 1 1 1
[26,] 1 1 1
[27,] 1 1 1
[28,] 1 1 1
Nos casos anteriores, criamos o vetor coluna de 1’s jn de dimensão \(28 \times 1\) e a matriz de 1’s Jnn de dimensão \(28 \times 28\).
\[ j_n = \mathbf{j}_{(28 \times 1)} = [1,1,...,1]' \]
\[ Jnn = \mathbf{J}_{(28 \times 28)} = \begin{bmatrix} 1 & 1 & 1 & \dots & 1 \\ 1 & 1 & 1 & \dots & 1 \\ 1 & 1 & 1 &\dots & 1 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & 1 & \dots & 1 \end{bmatrix} \]
Além disso, note que a matriz \(\mathbf{J}\) (Jnn) pode ser obtida por \(\mathbf{J} = \mathbf{j} \space \mathbf{j}'\), ou seja, a multiplicação do vetor coluna \(\mathbf{j}\) (jn) pela sua transposta.
No R, utilizamos a função t() para realizar a transposição de uma matriz ou vetor.
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[6,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[10,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[11,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[12,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[13,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[14,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[15,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[16,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[17,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[18,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[19,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[20,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[21,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[22,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[23,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[24,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[25,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[26,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[27,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[28,] 1 1 1 1 1 1 1 1 1 1 1 1 1
[,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
[1,] 1 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 1 1
[6,] 1 1 1 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1 1 1 1
[10,] 1 1 1 1 1 1 1 1 1 1 1 1
[11,] 1 1 1 1 1 1 1 1 1 1 1 1
[12,] 1 1 1 1 1 1 1 1 1 1 1 1
[13,] 1 1 1 1 1 1 1 1 1 1 1 1
[14,] 1 1 1 1 1 1 1 1 1 1 1 1
[15,] 1 1 1 1 1 1 1 1 1 1 1 1
[16,] 1 1 1 1 1 1 1 1 1 1 1 1
[17,] 1 1 1 1 1 1 1 1 1 1 1 1
[18,] 1 1 1 1 1 1 1 1 1 1 1 1
[19,] 1 1 1 1 1 1 1 1 1 1 1 1
[20,] 1 1 1 1 1 1 1 1 1 1 1 1
[21,] 1 1 1 1 1 1 1 1 1 1 1 1
[22,] 1 1 1 1 1 1 1 1 1 1 1 1
[23,] 1 1 1 1 1 1 1 1 1 1 1 1
[24,] 1 1 1 1 1 1 1 1 1 1 1 1
[25,] 1 1 1 1 1 1 1 1 1 1 1 1
[26,] 1 1 1 1 1 1 1 1 1 1 1 1
[27,] 1 1 1 1 1 1 1 1 1 1 1 1
[28,] 1 1 1 1 1 1 1 1 1 1 1 1
[,26] [,27] [,28]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
[4,] 1 1 1
[5,] 1 1 1
[6,] 1 1 1
[7,] 1 1 1
[8,] 1 1 1
[9,] 1 1 1
[10,] 1 1 1
[11,] 1 1 1
[12,] 1 1 1
[13,] 1 1 1
[14,] 1 1 1
[15,] 1 1 1
[16,] 1 1 1
[17,] 1 1 1
[18,] 1 1 1
[19,] 1 1 1
[20,] 1 1 1
[21,] 1 1 1
[22,] 1 1 1
[23,] 1 1 1
[24,] 1 1 1
[25,] 1 1 1
[26,] 1 1 1
[27,] 1 1 1
[28,] 1 1 1
\[ \mathbf{J} = \mathbf{j} \space \mathbf{j}' = \begin{bmatrix} 1 \\ 1 \\ \vdots \\1 \end{bmatrix} \begin{bmatrix} 1 & 1 & \dots & 1 \end{bmatrix} = \begin{bmatrix} 1 & 1 & \dots & 1 \\ 1 & 1 & \dots & 1 \\ \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & \dots & 1 \end{bmatrix} \]
A seguir, calcularemos a matriz de variâncias e covariâncias amostrais, dada pela equação:
\[\mathbf{\Sigma} = \frac{1}{n-1} \mathbf{Y}'(\mathbf{I} - \frac{1}{n}J) \mathbf{Y}\]
North East South West
North 290.4061 223.7526 288.4378 226.2712
East 223.7526 219.9299 229.0595 171.3743
South 288.4378 229.0595 350.0040 259.5410
West 226.2712 171.3743 259.5410 226.0040
A função t() realiza a transposição de uma matriz ou vetor. Já o operador %*% realiza a multiplicação entre duas matrizes ou vetores conformes.
No R, temos a função cov() que realiza o cálculo da matriz de variâncias e covariâncias. Para isso, basta declarar dentro da função a matriz desejada.
cov(Y) North East South West
North 290.4061 223.7526 288.4378 226.2712
East 223.7526 219.9299 229.0595 171.3743
South 288.4378 229.0595 350.0040 259.5410
West 226.2712 171.3743 259.5410 226.0040
\[ \mathbf{\Sigma} = \begin{bmatrix} \sigma^2_1 & \sigma_{12} & \sigma_{13} & \dots & \sigma_{1p} \\ \sigma_{21} & \sigma^2_2 & \sigma_{23} & \dots & \sigma_{2p} \\ \sigma_{31} & \sigma_{32} & \sigma^2_3 &\dots & \sigma_{p3} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \sigma_{p1} & \sigma_{p2} & \sigma_{p3} & \dots & \sigma^2_p \end{bmatrix} \]
Os elementos da diagonal principal são as variâncias e os demais elementos, as covariâncias. Note que a matriz de variâncias e covariâncias é simétrica.
1.3 Matriz de Correlações
Para calcular a matriz de correlação (\(\mathbf{\rho}_{ij}\)), utilizamos a seguinte expressão:
\[\mathbf{\rho}_{ij} = \mathbf{D}_{\sigma}^{-1} \mathbf{\Sigma} \mathbf{D}_{\sigma}^{-1}\]
em que \(\mathbf{D}_{\sigma}\) é uma matriz diagonal com a raiz quadrada das variâncias, ou seja, a raiz quadrada da diagonal da matriz de variâncias e covariâncias (\(\mathbf{\Sigma}\)).
North East South West
17.04131 14.83003 18.70839 15.03343
[,1] [,2] [,3] [,4]
[1,] 1.0000000 0.8853667 0.9047173 0.8832188
[2,] 0.8853667 1.0000000 0.8256001 0.7686801
[3,] 0.9047173 0.8256001 1.0000000 0.9228082
[4,] 0.8832188 0.7686801 0.9228082 1.0000000
A função sqrt() realiza a operação raiz quadrada. Já a solve(), calcula a inversa de uma matriz.
No R, temos a função cor() que realiza o cálculo da matriz de correlação. Novamente, basta declarar a matriz dentro da função.
cor(Y) North East South West
North 1.0000000 0.8853667 0.9047173 0.8832188
East 0.8853667 1.0000000 0.8256001 0.7686801
South 0.9047173 0.8256001 1.0000000 0.9228082
West 0.8832188 0.7686801 0.9228082 1.0000000
\[ \mathbf{\rho} = \begin{bmatrix} 1 & \rho_{12} & \rho_{13} & \dots & \rho_{1p} \\ \rho_{21} & 1 & \rho_{23} & \dots & \rho_{2p} \\ \rho_{31} & \rho_{32} & 1 &\dots & \rho_{p3} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \rho_{p1} & \rho_{p2} & \rho_{p3} & \dots & 1 \end{bmatrix} \]
Por fim, a partir da matriz de correlação (\(\mathbf{\rho}_{ij}\)), podemos retornar para a matriz de variâncias e covariâncias (\(\mathbf{\Sigma}\)) a partir da seguinte equação:
\[ \mathbf{\Sigma} = \mathbf{D}_{\sigma} \mathbf{\rho}_{ij} \mathbf{D}_{\sigma} \]
p = ncol(Y);
n = nrow(Y);
In = I(n);
jn = j(n,1,1);
Jnn = J(n,n,1);
Sigma = (1/(n-1))*t(Y)*(In-(1/n)*Jnn)*Y;
D = sqrt(diag(Sigma));
corr = inv(D)*Sigma*inv(D);
Verifica = D*corr*D;
title 'Matriz de variâncias e covariâncias amostrais utilizando proc iml';
print ,,Sigma[format=8.4],, 'Matriz de correlações:' ,, corr[format=8.5],, Verifica[format=8.4];1.4 Distância de Mahalanobis (Distância padronizada)
Primeiramente, calcularemos o vetor de médias (\(\mathbf{\mu}\)) da matriz \(\mathbf{Y}\).
\[\mathbf{\mu} = \frac{1}n \mathbf{j}' \mathbf{Y}\]
Com o vetor de médias (\(\mathbf{\mu}\)), calcularemos a distância de Mahalanobis (\(DM\)), dada pela seguinte expressão:
\[ DM = (\mathbf{y} - \mathbf{\mu})' \mathbf{\Sigma} (\mathbf{y} - \mathbf{\mu}) \]
DM2 <- rep(0, n)
for (i in 1:n) {
yi <- Y[i,]
DM <- as.numeric((yi - mi) %*% solve(Sigma) %*% t(yi - mi))
DM2[i] <- DM
}
DM2 [1] 7.619457 2.509622 2.714316 2.521244 1.744186 3.069220 2.212975
[8] 4.114008 2.800802 3.315503 2.099698 5.891095 1.062421 1.691059
[15] 8.996903 10.409160 4.075630 8.576964 7.124169 1.434898 1.086315
[22] 1.372791 2.110873 3.913168 1.647245 4.667263 5.412107 3.806908
No R, podemos utilizar a função mahalanobis() para calcular a distância de Mahalanobis. Como argumentos, temos:
x =: matriz utilizada para o cálculo;center =: o vetor de médias (\(\mu\));cov =: a matriz de variâncias e covariâncias (\(\Sigma\)).
mahalanobis(x = Y, center = mi, cov = Sigma) [1] 7.619457 2.509622 2.714316 2.521244 1.744186 3.069220 2.212975
[8] 4.114008 2.800802 3.315503 2.099698 5.891095 1.062421 1.691059
[15] 8.996903 10.409160 4.075630 8.576964 7.124169 1.434898 1.086315
[22] 1.372791 2.110873 3.913168 1.647245 4.667263 5.412107 3.806908
Ordenando os valores do vetor da distância de Mahalanobis, temos:
rank <- rank(DM2)
data.frame(Y, DM2, rank) North East South West DM2 rank
1 72 66 76 77 7.619457 25
2 60 53 66 63 2.509622 11
3 56 57 64 58 2.714316 13
4 41 29 36 38 2.521244 12
5 32 32 35 36 1.744186 7
6 30 35 34 26 3.069220 15
7 39 39 31 27 2.212975 10
8 42 43 31 25 4.114008 20
9 37 40 31 25 2.800802 14
10 33 29 27 36 3.315503 16
11 32 30 34 28 2.099698 8
12 63 45 74 63 5.891095 23
13 54 46 60 52 1.062421 1
14 47 51 52 43 1.691059 6
15 91 79 100 75 8.996903 27
16 56 68 47 50 10.409160 28
17 79 65 70 61 4.075630 19
18 81 80 68 58 8.576964 26
19 78 55 67 60 7.124169 24
20 46 38 37 38 1.434898 4
21 39 35 34 37 1.086315 2
22 32 30 30 32 1.372791 3
23 60 50 67 54 2.110873 9
24 35 37 48 39 3.913168 18
25 39 36 39 31 1.647245 5
26 50 34 37 40 4.667263 21
27 43 37 39 50 5.412107 22
28 48 54 57 43 3.806908 17
A observação 13 apresenta a menor distância, enquanto a 16, a maior distância de Mahalanobis.
mi = (1/n)*t(jn)*y;
print 'Vetor de médias:' mi[format=5.2],,;DM2 = j(n,1,0);
i=1;
do while (i<=n);
yi= Y[i,];
DM = (yi-mi)*inv(Sigma)*t(yi-mi);
DM2[i] = DM;
i=i+1;
end;
rank = rank(DM2);
print'-----------------------------------------------------------------',
'Distância de Mahalanobis de cada ponto (y) ao vetor de médias(mi)',
'-----------------------------------------------------------------';
print ,,Y ' ' DM2[format=8.4] ' ' rank;
quit;
proc corr cov data=cork;
title 'Matriz de variâncias e covariâncias utilizando proc corr';
var north east south west;
run;