O pacote de dados que irei utilizar para fazer a manipulação dos dados será o iris que é um database que contêm as seguintes informações:
data(iris)
kable(head(iris, 8), caption = "Primeiras 8 linhas do dataset iris")
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa |
| 4.6 | 3.4 | 1.4 | 0.3 | setosa |
| 5.0 | 3.4 | 1.5 | 0.2 | setosa |
O dataset iris possui 150 linhas e 5 variáveis: Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Vamos criar uma nova variavel chamada Sepal.Ratio = Sepal.Length / Sepal.Width e também uma variável categorica simples LargeSepal que indica se Sepal.Length é maior que a mediana.
iris_mod <- iris %>%
mutate(
Sepal.Ratio = Sepal.Length / Sepal.Width,
LargeSepal = ifelse(Sepal.Length > median(Sepal.Length), "Yes", "No")
)
kable(head(iris_mod, 6), caption = "Iris modificado com adição do Sepal.Ratio e LargeSepal")
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species | Sepal.Ratio | LargeSepal |
|---|---|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa | 1.457143 | No |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa | 1.633333 | No |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa | 1.468750 | No |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa | 1.483871 | No |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa | 1.388889 | No |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa | 1.384615 | No |
Agora vou ordenar o dataframe por Sepal.Ratio em ordem decrescente e filtrarei apenas as observações Species == “Virginica”
iris_sorted <- iris_mod %>%
arrange(desc(Sepal.Ratio))
iris_virginica <- iris_mod %>%
filter(Species == "virginica")
kable(head(iris_sorted, 5), caption = "Top 5 ordenado por Sepal.Ratio")
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species | Sepal.Ratio | LargeSepal |
|---|---|---|---|---|---|---|
| 7.7 | 2.6 | 6.9 | 2.3 | virginica | 2.961539 | Yes |
| 6.2 | 2.2 | 4.5 | 1.5 | versicolor | 2.818182 | Yes |
| 7.7 | 2.8 | 6.7 | 2.0 | virginica | 2.750000 | Yes |
| 6.3 | 2.3 | 4.4 | 1.3 | versicolor | 2.739130 | Yes |
| 6.0 | 2.2 | 4.0 | 1.0 | versicolor | 2.727273 | Yes |
cat("\nNúmero de observações da espécie virgínica:\n")
##
## Número de observações da espécie virgínica:
print(nrow(iris_virginica))
## [1] 50
Agora vou utilizar o pacote DT para apresentar uma tabela interativa
contendo os dados do iris_mod que criei com a adição das colunas
Sepal.Ratio e LargeSepal
DT::datatable(
iris_mod,
options = list(pageLength = 10, autoWidth = TRUE),
filter = 'bottom',
rownames = FALSE
)
Abaixo coloquei as 5 equações solicitadas, junto com suas devidas explicações usando LaTeX.
\[ \hat{\beta} = (X^T X)^{-1} X^T y \]
Significado: estimador de mínimos quadrados ordinários para os coeficientes () em um modelo linear (y = X+ ). Aqui (X) é a matriz de preditores (incluindo coluna de 1s se houver intercepto) e (y) é o vetor de respostas.
\[ \Sigma = V \Lambda V^T \]
Significado: matriz de covariância () é decomposta em autovalores (diagonal ()) e autovetores (colunas de (V)). Em PCA, os autovetores correspondem às direções principais e os autovalores quantificam a variância explicada.
\[ P(y=1|x) = \sigma(x^T \beta) = \frac{1}{1 + e^{-x^T \beta}} \] Significado: mapeia a combinação linear dos preditores (x^T) para uma probabilidade entre 0 e 1; usada em regressão logística para classificação binária.
\[ S^2 = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})^2 \] Significado: estimador amostral da variância populacional, onde ({x}) é a média amostral e usamos (n-1) no denominador para correção de Bessel.
\[ f(x) = w^T x + b \] Significado: função de decisão linear em SVM; o sinal de (f(x)) determina a classe prevista. O SVM busca maximizar a margem entre classes encontrando (w) e (b) apropriados.
AlDaajeh et al. (2022)