Será utilizado o conjunto mtcars, já
disponível no R. Ele contém medidas de 32 modelos de automóveis (dados
da revista Motor Trend, 1974), descritos por 11 variáveis, como
consumo (mpg), potência (hp), peso
(wt) e número de cilindros (cyl).
# Transforma os nomes das linhas em uma coluna chamada "modelo"
dados <- mtcars %>% rownames_to_column("modelo")
# Estrutura dos dados
glimpse(dados)
## Rows: 32
## Columns: 12
## $ modelo <chr> "Mazda RX4", "Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive", "…
## $ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.…
## $ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, …
## $ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, …
## $ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 1…
## $ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.9…
## $ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, …
## $ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, …
## $ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, …
## $ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, …
## $ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, …
## $ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, …
Interpretação: cada linha é um modelo de carro e
cada coluna é uma característica dele. Todas as variáveis são numéricas;
cyl, gear e am são numéricas, mas
representam categorias.
summary(dados[, c("mpg", "hp", "wt")])
## mpg hp wt
## Min. :10.40 Min. : 52.0 Min. :1.513
## 1st Qu.:15.43 1st Qu.: 96.5 1st Qu.:2.581
## Median :19.20 Median :123.0 Median :3.325
## Mean :20.09 Mean :146.7 Mean :3.217
## 3rd Qu.:22.80 3rd Qu.:180.0 3rd Qu.:3.610
## Max. :33.90 Max. :335.0 Max. :5.424
Interpretação: o consumo médio é de 20.1 milhas por galão, a potência média é de 146.7 hp e o peso médio é de 3.22 (em mil libras).
Foram criadas três variáveis: o consumo em km/l, o peso em kg e uma categoria de potência.
dados <- dados %>%
mutate(
consumo_kml = mpg * 0.425144, # milhas por galão -> km por litro
peso_kg = wt * 453.592, # mil libras -> kg
potencia_cat = case_when(
hp < 100 ~ "Baixa",
hp < 180 ~ "Média",
TRUE ~ "Alta"
)
)
dados %>% select(modelo, mpg, consumo_kml, wt, peso_kg, hp, potencia_cat) %>% head()
Interpretação: mutate() adiciona
colunas sem alterar as originais. As conversões tornam os valores mais
familiares ao público brasileiro, e a categoria de potência facilita
comparações entre grupos.
Mantemos apenas carros de 4 e 6 cilindros com consumo superior a 20 mpg.
dados_filtrados <- dados %>%
filter(cyl %in% c(4, 6), mpg > 20)
nrow(dados_filtrados)
## [1] 14
Interpretação: dos 32 modelos originais, restaram 14 após o filtro, ou seja, 43.8% da base. Isso mostra que carros econômicos tendem a ter motores menores.
dados_ord <- dados_filtrados %>%
arrange(desc(consumo_kml)) %>%
select(modelo, cyl, mpg, consumo_kml, hp, potencia_cat)
head(dados_ord, 5)
Interpretação: ordenando do mais para o menos econômico, o primeiro colocado é o Toyota Corolla, com 14.4 km/l.
resumo_cyl <- dados %>%
group_by(cyl) %>%
summarise(
n = n(),
consumo_medio_kml = round(mean(consumo_kml), 2),
potencia_media_hp = round(mean(hp), 1),
peso_medio_kg = round(mean(peso_kg), 0),
.groups = "drop"
)
resumo_cyl
Interpretação: quanto maior o número de cilindros, menor o consumo médio e maior a potência e o peso. O grupo de 4 cilindros tem consumo médio de 11.34 km/l, contra 6.42 km/l do grupo de 8 cilindros.
A tabela abaixo permite ordenar (clique no cabeçalho), buscar (campo Search) e paginar (seletor de linhas por página).
datatable(
dados %>% select(modelo, cyl, mpg, consumo_kml, hp, wt, peso_kg, potencia_cat) %>%
mutate(across(where(is.numeric), ~ round(.x, 2))),
caption = "Tabela interativa dos modelos de carros (mtcars)",
filter = "top",
options = list(pageLength = 8, lengthMenu = c(5, 8, 16, 32), autoWidth = TRUE),
rownames = FALSE
)
1) Estimador de mínimos quadrados ordinários (regressão linear)
\[\hat{\boldsymbol{\beta}} = \left(\mathbf{X}^{\top}\mathbf{X}\right)^{-1}\mathbf{X}^{\top}\mathbf{y}\]
Significado: fornece os coeficientes da reta (ou hiperplano) que minimiza a soma dos quadrados dos resíduos, em que \(\mathbf{X}\) é a matriz de variáveis explicativas e \(\mathbf{y}\) é o vetor da variável resposta.
2) Densidade da distribuição Normal
\[f(x \mid \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)\]
Significado: descreve a probabilidade de observar valores em torno da média \(\mu\) com dispersão \(\sigma^2\). É a base de muitos testes estatísticos e modelos.
3) Teorema de Bayes (forma contínua)
\[P(\theta \mid D) = \frac{P(D \mid \theta)\,P(\theta)}{\int P(D \mid \theta')\,P(\theta')\,d\theta'}\]
Significado: atualiza a crença sobre um parâmetro \(\theta\) (a posteriori) a partir dos dados observados \(D\), combinando a verossimilhança com a distribuição a priori.
4) Softmax com perda de entropia cruzada
\[\mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N}\sum_{k=1}^{K} y_{ik}\,\log\left(\frac{e^{z_{ik}}}{\sum_{j=1}^{K} e^{z_{ij}}}\right)\]
Significado: mede o erro de um classificador com \(K\) classes. A função softmax transforma os escores \(z\) em probabilidades, e a perda penaliza probabilidades baixas atribuídas à classe verdadeira.
5) Descida do gradiente com função de custo quadrática
\[\theta_{t+1} = \theta_t - \eta\,\nabla_{\theta} J(\theta_t), \qquad J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}\left(h_{\theta}(x^{(i)}) - y^{(i)}\right)^2\]
Significado: algoritmo iterativo de otimização que atualiza os parâmetros \(\theta\) na direção oposta ao gradiente do custo \(J\), com taxa de aprendizado \(\eta\), até convergir para um mínimo.
Figura 1 – Regressão linear: consumo vs. peso. Relação entre o peso do carro e o consumo, com reta ajustada por mínimos quadrados (equação 1).
ggplot(dados, aes(x = peso_kg, y = consumo_kml)) +
geom_point(aes(color = factor(cyl)), size = 3) +
geom_smooth(method = "lm", se = TRUE, color = "black") +
labs(x = "Peso (kg)", y = "Consumo (km/l)", color = "Cilindros",
title = "Carros mais pesados consomem mais") +
theme_minimal()
Figura 1: Regressão linear entre peso e consumo (mtcars).
Figura 2 – Análise de Componentes Principais (PCA).
Redução de dimensionalidade do conjunto iris, técnica muito
usada em ciência de dados para visualizar dados multidimensionais.
pca <- prcomp(iris[, 1:4], scale. = TRUE)
pca_df <- data.frame(pca$x[, 1:2], Especie = iris$Species)
var_exp <- round(100 * summary(pca)$importance[2, 1:2], 1)
ggplot(pca_df, aes(PC1, PC2, color = Especie)) +
geom_point(size = 2.5, alpha = 0.8) +
stat_ellipse(level = 0.9) +
labs(x = paste0("PC1 (", var_exp[1], "%)"),
y = paste0("PC2 (", var_exp[2], "%)"),
title = "As espécies se separam bem nos dois primeiros componentes") +
theme_minimal()
Figura 2: PCA do conjunto iris, projetado nos dois primeiros componentes.
WICKHAM, H.; GROLEMUND, G. R for Data Science: import, tidy, transform, visualize, and model data. Sebastopol: O’Reilly Media, 2017.
KNAFLIC, C. N. Storytelling with Data: a data visualization guide for business professionals. Hoboken: Wiley, 2015.
XIE, Y.; ALLAIRE, J. J.; GROLEMUND, G. R Markdown: the definitive guide. Boca Raton: Chapman and Hall/CRC, 2018.
JAMES, G.; WITTEN, D.; HASTIE, T.; TIBSHIRANI, R. An Introduction to Statistical Learning: with applications in R. 2. ed. New York: Springer, 2021.
WICKHAM, H. ggplot2: elegant graphics for data analysis. 2. ed. New York: Springer, 2016.