Essa é uma reprodução. O texto original pode ser encontrado neste endereço

Meu objetivo aqui é estudar um pouco do LaTeX, um pouco de álgebra e um pouco de R :).

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.

\[ \begin{bmatrix} x_{11} & x_{12} & x_{13} & \dots & x_{1n} \\ x_{21} & x_{22} & x_{23} & \dots & x_{2n} \\ \dots \\ x_{d1} & x_{d2} & x_{d3} & \dots & x_{dn} \end{bmatrix} \]

Para construir uma matriz no R, devemos utilizar a 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. Por exemplo:

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

Outro exemplo.

M1 = matrix(c(2,2,3,4,5,6,7,8,9), nrow = 3)

M2 = matrix(c(10,11,12,13,14,15,16,17,18), nrow = 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{bmatrix} a & b \\ c & d \\ \end{bmatrix} + \begin{bmatrix} e & f \\ g & h \\ \end{bmatrix} = \begin{bmatrix} a+e & b+f \\ c+g & d+h\\ \end{bmatrix} \]

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

M_soma = M1 + M2

print(M_soma)
##      [,1] [,2] [,3]
## [1,]   12   17   23
## [2,]   13   19   25
## [3,]   15   21   27
M_subt = M2 - M1

print(M_subt)
##      [,1] [,2] [,3]
## [1,]    8    9    9
## [2,]    9    9    9
## [3,]    9    9    9

\[ k* \begin{bmatrix} a & b \\ c & d \\ \end{bmatrix} = \begin{bmatrix} ka & kb \\ kc & kd \\ \end{bmatrix} \]

M_prod_escalar = 31 * M1

print(M_prod_escalar)
##      [,1] [,2] [,3]
## [1,]   62  124  217
## [2,]   62  155  248
## [3,]   93  186  279

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{bmatrix} a & b \\ c & d \\ \end{bmatrix} * \begin{bmatrix} e & f \\ g & h \\ \end{bmatrix} = \begin{bmatrix} a*e & b*f \\ c*g & d*h\\ \end{bmatrix} \]

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

M_prod_elemento = M1 * M2

print(M_prod_elemento)
##      [,1] [,2] [,3]
## [1,]   20   52  112
## [2,]   22   70  136
## [3,]   36   90  162

Multiplicação matricial

A multiplicação entre uma matriz (n x m) por uma matriz (m x p) 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{bmatrix} a & b \\ c & d \\ \end{bmatrix} * \begin{bmatrix} e & f \\ g & h \\ \end{bmatrix} = \begin{bmatrix} a*e + b*g& a*f+b*h \\ c*e+d*g & c*f+d*h\\ \end{bmatrix} \] No R, a multiplicação matricial clássica é desenvolvida pelo uso do operador %*%

M_prod = M1 %*% M2

print(M_prod)
##      [,1] [,2] [,3]
## [1,]  148  187  226
## [2,]  171  216  261
## [3,]  204  258  312

Transposta de uma matriz

A transposta de uma matriz \[A_{nxm}\] é uma matriz \[M=A^T_{mxn}\], em que os elementos em coluna correspondem aos elementos em linha da matriz original.

\[ \begin{bmatrix} a & b \\ c & d \\ \end{bmatrix}^t = \begin{bmatrix} a & c \\ b & d \\ \end{bmatrix} \]

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

M_transp = t(M1)

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

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{bmatrix} a & b \ c & d \ \end{bmatrix} =ad-bc

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

det(M1)
## [1] -3

Inversa de uma matriz

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

\[A^{−1}⋅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(M1)

print(M_inversa)
##      [,1] [,2]       [,3]
## [1,]    1   -2  1.0000000
## [2,]   -2    1  0.6666667
## [3,]    1    0 -0.6666667

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

solve(M1)%*%M1
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    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{bmatrix} a & c\\ b & d \end{bmatrix}=a+d\]

No 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(M1))
## [1] 16

Decomposiçã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 (λ). Na estatística, tal decomposição é base da técnica de componentes principais e análise fatorial. Desta forma, chega-se a seguinte expressão:

\[A=v{−1}⋅λ⋅v\]

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

eigen(M1)
## eigen() decomposition
## $values
## [1] 16.2349993 -0.5631364  0.3281371
## 
## $vectors
##            [,1]       [,2]       [,3]
## [1,] -0.4867178 -0.6095934 -0.7326354
## [2,] -0.5625331 -0.5712311  0.6514109
## [3,] -0.6683279  0.5496279 -0.1972540

O objeto $values tem os autovalores da matrix e o objeto $vectors apresenta os autovetores.

Produto cruzado

A função crossprod informa o produto cruzado. Por exemplo, \[X^tX\].

crossprod(M1,M2)   # M1'M2
##      [,1] [,2] [,3]
## [1,]   78   99  120
## [2,]  167  212  257
## [3,]  266  338  410
crossprod(M1)      # M1'M1
##      [,1] [,2] [,3]
## [1,]   17   36   57
## [2,]   36   77  122
## [3,]   57  122  194

Produto de Kronecker

O produto Kronecker, denotado por , é uma operação em duas matrizes de tamanho arbitrário, resultando em uma matriz de blocos.

$$ \begin{bmatrix} a & b \ c & d \ \end{bmatrix} \begin{bmatrix} e & f \ g & h \ \end{bmatrix} = \begin{bmatrix} a\begin{bmatrix} e & f \ g & h \ \end{bmatrix} b\begin{bmatrix} e & f \ g & h \ \end{bmatrix}\ c\begin{bmatrix} e & f \ g & h \ \end{bmatrix} d\begin{bmatrix} e & f \ g & h \ \end{bmatrix} \end{bmatrix} = \begin{bmatrix} ae & af & be &bf \ ag & ah & bg &bh \ ce & cf & de &df \ cg & ch & dg &dh \

\end{bmatrix} $$

kronecker(M1, M2)
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
##  [1,]   20   26   32   40   52   64   70   91  112
##  [2,]   22   28   34   44   56   68   77   98  119
##  [3,]   24   30   36   48   60   72   84  105  126
##  [4,]   20   26   32   50   65   80   80  104  128
##  [5,]   22   28   34   55   70   85   88  112  136
##  [6,]   24   30   36   60   75   90   96  120  144
##  [7,]   30   39   48   60   78   96   90  117  144
##  [8,]   33   42   51   66   84  102   99  126  153
##  [9,]   36   45   54   72   90  108  108  135  162

Matriz inversa generalizada

# Moore-Penrose Generalized Inverse of M1.
M3 = matrix(c(1,2,3,4,5,6,7,8,9), nrow = 3)
#M_inversa = solve(M3)
#system is exactly singular: U[3,3] = 0
library(MASS)
ginv(M3)
##            [,1]          [,2]       [,3]
## [1,] -0.6388889 -5.555556e-02  0.5277778
## [2,] -0.1666667 -5.551115e-17  0.1666667
## [3,]  0.3055556  5.555556e-02 -0.1944444

Outras coisas interessantes com matriz

svd(M1)     #Single value decomposition of M1.
## $d
## [1] 16.9586782  0.5462059  0.3238716
## 
## $u
##            [,1]       [,2]        [,3]
## [1,] -0.4893932 -0.4498648 -0.74707158
## [2,] -0.5682993 -0.4852650  0.66449516
## [3,] -0.6614606  0.7497597 -0.01817244
## 
## $v
##            [,1]       [,2]       [,3]
## [1,] -0.2417504  0.6939135 -0.6782630
## [2,] -0.5170116  0.4993984  0.6951980
## [3,] -0.8211308 -0.5187342 -0.2380316
qr(M1)    #QR decomposition of M1. 
## $qr
##            [,1]       [,2]        [,3]
## [1,] -4.1231056 -8.7312825 -13.8245306
## [2,]  0.4850713 -0.8744746  -1.4798801
## [3,]  0.7276069 -0.2717739  -0.8320503
## 
## $rank
## [1] 3
## 
## $qraux
## [1] 1.4850713 1.9623611 0.8320503
## 
## $pivot
## [1] 1 2 3
## 
## attr(,"class")
## [1] "qr"
M1 %o% M2 #Outer product (matrix). M1M2'  
## , , 1, 1
## 
##      [,1] [,2] [,3]
## [1,]   20   40   70
## [2,]   20   50   80
## [3,]   30   60   90
## 
## , , 2, 1
## 
##      [,1] [,2] [,3]
## [1,]   22   44   77
## [2,]   22   55   88
## [3,]   33   66   99
## 
## , , 3, 1
## 
##      [,1] [,2] [,3]
## [1,]   24   48   84
## [2,]   24   60   96
## [3,]   36   72  108
## 
## , , 1, 2
## 
##      [,1] [,2] [,3]
## [1,]   26   52   91
## [2,]   26   65  104
## [3,]   39   78  117
## 
## , , 2, 2
## 
##      [,1] [,2] [,3]
## [1,]   28   56   98
## [2,]   28   70  112
## [3,]   42   84  126
## 
## , , 3, 2
## 
##      [,1] [,2] [,3]
## [1,]   30   60  105
## [2,]   30   75  120
## [3,]   45   90  135
## 
## , , 1, 3
## 
##      [,1] [,2] [,3]
## [1,]   32   64  112
## [2,]   32   80  128
## [3,]   48   96  144
## 
## , , 2, 3
## 
##      [,1] [,2] [,3]
## [1,]   34   68  119
## [2,]   34   85  136
## [3,]   51  102  153
## 
## , , 3, 3
## 
##      [,1] [,2] [,3]
## [1,]   36   72  126
## [2,]   36   90  144
## [3,]   54  108  162
# chol(M1)  #Choleski factorization of M1. Returns the upper triangular factor, such that R'R = M1.
# is not positive definite