Matrizes

Matrizes, são tabelas retangulares de números, expressões matemáticas ou símbolos, cujo elementos são arranjados em \(n\) linhas e \(p\) colunas. A matrix M abaixo, por exemplo, organiza cada elemento \(a_{ij}\) em 2 linhas e 3 colunas.


\[A = \begin{pmatrix} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\end{pmatrix}\]


Em R, a matriz é uma estrutura de dados homogênea (deve conter mesmo tipo de dados, e.i. numérico, caracteres, lógico) de duas dimensões. Sua sintaxe básica é realizada por meio da função matrix(), tendo como argumentos os elementos que compõem a matriz, na forma de um vetor, e o número de linhas e colunas.


M = matrix(data = 1:9, nrow = 3, ncol = 3)

print(M)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9


Por default os elementos são organizados por coluna na matriz, caso se deseje que estes sejam organizados por linha usa-se o argumento byrow = TRUE.


M2 = matrix(data = 1:9, nrow = 3, ncol = 3, byrow = TRUE)

print(M2)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9


A função matrix(), na realidade, organiza as dimensões de um vetor qualquer. Na prática, não é necessário informar o número de linhas e de colunas se o vetor de dados é informado, contudo, tal prática falicita a leitura do código.


V3 = c(12, 23, 34, 45, 56, 67)

M3 = matrix(data = V3, nrow = 3)

print(M3)
##      [,1] [,2]
## [1,]   12   45
## [2,]   23   56
## [3,]   34   67


Para criar uma matriz contendo um único valor, e.g. matriz nula, informa-se este valor no argumento data em conjunto com o número de linhas e colunas.


M4 = matrix(data = 0, nrow = 3, ncol = 5)

print(M4)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0    0    0
## [2,]    0    0    0    0    0
## [3,]    0    0    0    0    0


Caso seja de interesse alocar uma matriz vazia, basta informar os argumentos ncol e nrow. Esta será completada com o valor lógico NA (do inglês, not avaliable).


M5 = matrix(nrow = 4, ncol = 5)

print(M5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   NA   NA   NA   NA   NA
## [2,]   NA   NA   NA   NA   NA
## [3,]   NA   NA   NA   NA   NA
## [4,]   NA   NA   NA   NA   NA


Operações matriciais

Para ilustar as operações entre matrizes usaremos as seguintes matrizes para fins de cálculo.


\[\begin{matrix} M_{6} = \begin{pmatrix} 2 & 5\\ 3 & 6 \end{pmatrix} & & M_{7} = \begin{pmatrix} 5 & 8\\ 3 & 2 \end{pmatrix}\\ & & \\ M_{8} = \begin{pmatrix} 2 & 6 & 0\\ 4 & 2 & 1 \end{pmatrix}& & M_{9} = \begin{pmatrix} 1 & 0.5 & 0.3\\ 0.5 & 1 & 0.9\\ 0.3 & 0.9 & 1 \end{pmatrix} \end{matrix}\]


M6 = matrix(c(2, 3, 5, 6), nrow = 2)

M7 = matrix(c(5, 3, 8, 2), nrow = 2)

M8 = matrix(c(2, 4, 6, 2, 0,1), nrow = 2, ncol = 3)

M9 = matrix(c(1, 0.5, 0.3, 0.5, 1, 0.9, 0.3, 0.9, 1), nrow = 3, ncol = 3)


Soma e subtração


Dada duas matrizes de mesma dimensionalidade, a matriz resultante da soma / substração destas matrizes corresponde à matriz cujos elementos são a soma / subtração dos elementos das matrizes originais.


\[\begin{pmatrix} a & b\\ c & d \end{pmatrix} + \begin{pmatrix} e & f\\ g & h \end{pmatrix} = \begin{pmatrix} a+e & b+f\\ c+g & d+h \end{pmatrix}\]


Em R, para a soma e substração de matrizes usa-se a mesma sintaxe que na operação entre escalares.


M_soma = M7 + M6

print(M_soma)
##      [,1] [,2]
## [1,]    7   13
## [2,]    6    8


M_subt = M7 - M6

print(M_subt)
##      [,1] [,2]
## [1,]    3    3
## [2,]    0   -4


Multiplicação por escalar


Uma matriz de dimensionalidade qualquer quando multiplicada por um escalar k, tal que \(k \in \mathbb{R}\), resulta em uma matriz de mesmas dimensões cujos elementos são o produto do escalar \(k\) por cada um dos elementos da matriz original.


\[k\cdot \begin{pmatrix} a & b\\ c & d \end{pmatrix} = \begin{pmatrix} k\cdot a & k\cdot b\\ k\cdot c & k\cdot d \end{pmatrix}\]


Em R, utiliza-se a mesma sintaxe que na multiplicação entre escalares.


M_prod_escalar = 42 * M9

print(M_prod_escalar)
##      [,1] [,2] [,3]
## [1,] 42.0 21.0 12.6
## [2,] 21.0 42.0 37.8
## [3,] 12.6 37.8 42.0


Multiplicação elemento a elemento


Os elementos da matriz resultante de uma multiplicação elemento a elemento entre duas matrizes de mesmas dimensões correspondem ao produto dos elementos equivalentes entre as matrizes originais.

\[\begin{pmatrix} a & b\\ c & d \end{pmatrix} \circ \begin{pmatrix} e & f\\ g & h \end{pmatrix} = \begin{pmatrix} a\cdot e & b\cdot f\\ c\cdot g & d\cdot h \end{pmatrix}\]


Em R, a multiplicação elemento a elemento é realizada por meio do operador * desde que as matrizes tenham as mesmas dimensões.

M_prod_elemento = M6 * M7

print(M_prod_elemento)
##      [,1] [,2]
## [1,]   10   40
## [2,]    9   12


Multiplicação matricial


A multiplicação entre uma matriz (n x m) por uma matriz (m x p), em que \(m, n, p \in \mathbb{\mathbb{N}^{+}}\), resulta em uma matriz de dimensões (n x p), cujos elementos são a somatória do produto entre os elementos em linha da matriz que pré-multiplica pelos elementos em coluna da matriz que pós-multiplica.


\[\begin{pmatrix} a & b\\ c & d \end{pmatrix} \cdot \begin{pmatrix} e & f\\ g & h \end{pmatrix} = \begin{pmatrix} a \cdot e + b \cdot g & a \cdot f + b \cdot h\\ c \cdot e + d \cdot g & c \cdot f + d \cdot h \end{pmatrix}\]


Em R, a multiplicação matricial clássica é desenvolvida pelo uso do operador %*%, respeitando a equidade entre o número de colunas da matriz que pré-multiplica e o número de linhas da matriz que pós-multiplica.


M_prod = M6 %*% M8

print(M_prod)
##      [,1] [,2] [,3]
## [1,]   24   22    5
## [2,]   30   30    6


Transposta de uma matriz


A transposta de uma matriz \(A_{n x m}\) é uma matriz \(M = A^{T}_{m x n}\), em que os elementos em coluna correspondem aos elementos em linha da matriz original.


\[\begin{pmatrix} a & b\\ c & d \end{pmatrix} ^ {T} = \begin{pmatrix} a & c\\ b & d \end{pmatrix}\]


Em R, a transposta de uma matriz é determinada pela pela função t().


M_transp = t(M8)

print(M_transp)
##      [,1] [,2]
## [1,]    2    4
## [2,]    6    2
## [3,]    0    1


Determinante de uma matriz


O determinante de uma matriz é uma função matricial que converte uma matriz quadrada em um escalar. Para uma matriz quadrada de ordem 2, o determinante é definido como:


\[det\begin{pmatrix} a & b\\ c & d \end{pmatrix} = a\cdot d - c\cdot b\]


Para uma matriz de ordem 3 ou superior, o determinante pode ser estimado pela seguinte equação:


\[det(A) = \sum^n_{j = 1} (-1)^{i+j} . a_{i j} . det(A_{-i -j})\]


Em que \(A_{-i -j}\) corresponde à matriz A excluindo-se a linha i e a coluna j. Por esta equação uma matriz de ordem n > 2 tem seu cálculo simplificado à soma de \(n^2\) determinantes originados da matriz A.


Em R, o determinante de uma matriz é calculado pela função det()


det(M7)
## [1] -14


Inversa de uma matriz


A inversa de uma matriz quadrada qualquer cujo determinante seja não nulo, \(A_{n,n}\), é uma matriz de mesmas dimensões que atenda a seguinte condição:

\[A^{-1} \cdot A = I\]


Onde, \(I\) é a matriz identidade de mesma dimensão que a matriz \(A\).


A inversa de uma matriz é estimada pela função solve(), mesma função utilizada para resolução de sistemas de equações em R.


M_inversa = solve(M6)

print(M_inversa)
##      [,1]       [,2]
## [1,]   -2  1.6666667
## [2,]    1 -0.6666667


Facilmente, verifica-se a condição de existência da matriz inversa:


solve(M6)%*%M6
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1


Traço de uma matriz


O traço de uma matriz é determinado extraindo os elementos da diagonal da matriz quadrada e então efetuando a soma dos seus elementos. Assim, para uma matriz quadrada de ordem 2, o traço é determinado por:


\[tr\begin{pmatrix} a & b\\ c & d \end{pmatrix} = a + d\]


Em R, a obtenção do traço passa pela extração dos elementos da diagonal da matrix, por meio da função diag(), e a soma destes elementos pela função sum().

sum(diag(M6))
## [1] 8


Eigendecomposição de uma matriz


A decomposição própria (decomposição espectral) consiste em escrever uma matriz A diagonalizável qualquer em termos de seus auto-vetores (\(v\)) e auto-valores (\(\lambda\)). Na estatística, tal decomposição é base da técnica de componentes principais, na qual os auto-vetores correspondem às direções de maior variabilidade (componentes principais) e os auto-valores são uma medida da explicação da variabilidade dos dados originais fornecida pelas componentes principais. Desta forma, chega-se a seguinte expressão:


\[A = v^{-1}\cdot \lambda\cdot v\]


Em R, a obtenção da matriz de auto-valores e auto-vetores é realizada por meio da função eigen().


eigen(M7)
## $values
## [1]  8.623475 -1.623475
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.9109185 -0.7702626
## [2,] 0.4125863  0.6377269


No objeto $values se encontram os autovalores da matrix original, enquanto o objeto $vectors apresenta os autovetores, em coluna, na matriz resultante.


Matrizes na análise estatística


É ponto em comum, entre diversas técnicas estatísticas, o uso de matrizes de correlação, covariância e de distâncias. Estas são matrizes quadradas e simétricas, cujos elementos correspondem à propriedade que dá nome à matriz entre duas variáveis (covariância e correlação) ou entre duas observações (distância) de um conjunto de dados.

Para exemplificar estas matrizes, nas próximas seções, utilizaremos o banco de dados nativo do R: women. Este conjunto de dados contém a altura média e peso médio das mulheres de 15 estados americanos.


knitr::kable(x = women, align = 'c')
height weight
58 115
59 117
60 120
61 123
62 126
63 129
64 132
65 135
66 139
67 142
68 146
69 150
70 154
71 159
72 164


Covariância


A covariância de duas variáveis, X e Y, é definida por:


\[cov(X, Y)= \frac{1}{n} \left [ \sum_{i=1}^{n} x_{i}y_{i} - \frac{1}{n} \left ( \sum_{i=1}^{n} x_i \right ) \left ( \sum_{i=1}^{n} y_i \right ) \right ]\]


Para gerar a matriz de covariâncias no R, utilizamos a função cov():


cov(women)
##        height   weight
## height     20  69.0000
## weight     69 240.2095


Correlação


A correlação constitui a padronização da correlação pelo produto do desvio padrão das variáveis X e Y.


\[\rho_{X,Y}={\mathrm{cov}(X,Y) \over \sigma_X \sigma_Y}\]


A geração da matriz de correlação em R se dá pela função cor():


cov(women)
##        height   weight
## height     20  69.0000
## weight     69 240.2095


Distâncias


Uma matriz de distâncias apresenta a métrica de distâncias (e.g. distância euclidiana) entre duas observações. No R, a função dist() utiliza como default a distância euclidiana e retorna apenas a diagonal inferior da matriz de distância, visto a simetria da matriz.


dist(women[1:5, ]) # Matriz de distância das 5 primeiras observações
##           1         2         3         4
## 2  2.236068                              
## 3  5.385165  3.162278                    
## 4  8.544004  6.324555  3.162278          
## 5 11.704700  9.486833  6.324555  3.162278


Exercícios


1. Em R, defina uma matriz de dimensão 2 x 2 e outra de dimensões 6 x 2.


2. Calcule o determinante da primeira matriz e de sua transposta.


3. Qual a matriz resultante do produto da primeira matriz pela transposta da segunda?


4. Calcule a razão entre o determinante pelo traço da primeira matriz.


5. Calcule a matriz de variância, covariância e de distâncias a partir do dataset cars.