-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path03-math.Rmd
114 lines (84 loc) · 4.39 KB
/
03-math.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Operações matemáticas {#math}
As operações matemáticas utilizam símbolos que são padrão em outros softwares estatísticos.
```{r, echo = TRUE, eval = FALSE, message = FALSE, warning = FALSE}
1 + 1 # Soma
2 - 1 # Subtração
2 * 2 # Multiplicação
1 + 2 * 2 ^ 2 # Primeiro eleva ao quadrado, depois multiplica e depois soma
((1 + 2) * 2) ^ 2 # Primeiro soma e depois multiplica depois eleva ao quadrado
sqrt(4) # Raiz quadrada
4^2 # Potência
log(10) # Por default, o logarítimo é de base e (logarítimo natural)
log(100, 10) # Logarítimo de base 10
exp(100) # exponencial
```
Para multiplicação de matrizes utiliza-se `%*%` ao envéz de `*`. Note a diferença no exemplo abaixo.
```{r, message = FALSE, warning = FALSE}
(x <- matrix(1:4, ncol = 2))
(y <- matrix(5:8, ncol = 2))
```
O resultado da multiplicação da matriz `x` e `y` é dado por:
$$
\left( {\begin{array}{*{20}{c}}{1 \cdot 5 + 3 \cdot 6}&{1 \cdot 7 + 3 \cdot 8}\\{2 \cdot 5 + 4 \cdot 6}&{2 \cdot 7 + 4 \cdot 8}\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{23}&{31}\\{34}&{46}\end{array}} \right)
$$
```{r, message = FALSE, warning = FALSE}
x * y # Errado
x %*% y # Certo
```
A função `t()` \indf{t} é utilizada para transposição de matrizes e `solve()` \indf{solve} para inversão de matrizes. Vamos resolver o seguinte sistema de equações retirado do livro de [@Rencher2008] utilizando estes operadores.
$$
\begin{array}{l}{x_1} + 2{x_2} = 4\\{x_1} - {x_2} = 1\\{x_1} + {x_2} = 3\end{array}
$$
Matricialmente o sistema acima é dado por:
$$\left[ {\begin{array}{*{20}{c}}{\begin{array}{*{20}{l}}1\\1\\1\end{array}}&{\begin{array}{*{20}{c}}2\\{ - 1}\\1\end{array}}\end{array}} \right]\left[ {\begin{array}{*{20}{c}}{{x_1}}\\{{x_2}}\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}4\\1\\3\end{array}} \right]$$
Esse sistema de equações é representado por ${\bf{AX}} = {\bf{c}}$ e tem como solução ${\bf{X = }}{{\bf{A}}^{{\bf{ - 1}}}}{\bf{c}}$
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
(A <- matrix(c(1, 1, 1, 2, -1, 1), nrow = 3, ncol = 2))
A1 <- MASS::ginv(A) # Obtém a inversa generalizada de A
c <- c(4, 1, 3) # Vetor C
X <- A1 %*% c
X
```
Considere um equação linear múltipla cuja variável dependente é **Y** e as variáveis independentes são **X1** e **X2** (dados obtidos em [@Kutner2005]). O sistema de equações é representado matricialmente por \indt{sistema de equações}
$$
\boldsymbol{X'X{\beta = X'Y}}
$$
que tem como solução:
$$
\boldsymbol{\hat\beta = X'X^{-1}X'Y}
$$
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
X0 <- rep(1, each = 10)
X1 <- c(68.5, 45.2, 91.3, 47.8, 46.9, 66.1, 49.5, 52, 48.9, 38.4)
X2 <- c(16.7, 16.8, 18.2, 16.3, 17.3, 18.2, 15.9, 17.2, 16.6, 16)
Y <- c(174.4, 164.4, 244.2, 154.6, 181.6, 207.5, 152.8, 163.2, 145.4, 137.2)
X <- matrix(c(X0, X1, X2), nrow = 10, ncol = 3)
X
B <- (solve(t(X) %*% X)) %*% t(X) %*% Y
B
```
O modelo ajustado é dado por $\hat Y = - 234.698704 + 1.074137{X_1} + 20.547108{X_2} + \varepsilon$. Combinando algumas funções vistas até agora, vamos criar um vetor de dados chamado **PRED** com os valores estimados pelo modelo acima. Em adição, um vetor de resíduos (**RESID**) será criado.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
PRED <- B[1] + B[2] * X1 + B[3] * X2
RESID <- Y - PRED
```
As funções `det()` \indf{det} para calcular o determinante de uma matriz. Já a função `eigen()` \indf{eigen} retorna uma lista com os autovalores e autovetores da matriz. A função `names()` \indf{names} indica o que contém no objeto `av`, e usando `$` é possivel selecionar os autovalores ou os autovetores.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
mat <- matrix(c(0, 2, 4, 3, 5, 0, 2, 4, 4), nrow = 3)
detXX <- det(mat)
av <- eigen(mat)
```
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
names(av)
```
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
av$values # Extrai os autovalores
```
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
av$vectors # Extrai os autovetores
```
A função `diag()` \indf{diag} extrai a diagonal de uma matriz ou cria uma matriz onde a diagonal são os elementos declarados. Os próximos comandos extraem a diagonal de XX e criam uma matriz identidade, com 5 linhas e 5 colunas.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
diag(mat)
diag(x = 1, nrow = 4, ncol = 4)
```