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, 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)
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
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
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
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
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
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
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.
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
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
# 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
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