Relatório

1) Manipulação de Dados

Introdução

Neste item será utilizado (seguindo as práticas de (Wickham and Grolemund 2017)) o conjunto de dados mtcars, que já vem instalado com o R. Ele contém informações de 32 modelos de automóveis (extraídas da revista Motor Trend US, 1974), como consumo de combustível, potência e peso.

Passo 1 – Carregar e inspecionar os dados

data(mtcars)
dados <- mtcars


dados <- tibble::rownames_to_column(dados, var = "modelo")

head(dados)
str(dados)
## 'data.frame':    32 obs. of  12 variables:
##  $ modelo: chr  "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
##  $ mpg   : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl   : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp  : num  160 160 108 258 360 ...
##  $ hp    : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat  : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt    : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec  : num  16.5 17 18.6 19.4 17 ...
##  $ vs    : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am    : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear  : num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb  : num  4 4 1 1 2 1 4 2 2 4 ...

Explicação: a função data(mtcars) carrega o conjunto de dados. Como os nomes dos carros estavam armazenados como nomes de linha (e não como uma coluna), usei rownames_to_column() para criar a coluna modelo, facilitando a manipulação.

Principais variáveis utilizadas:

  • mpg: consumo (milhas por galão);
  • cyl: número de cilindros;
  • hp: potência (cavalos);
  • wt: peso (em 1000 libras).

Passo 2 – Estatísticas descritivas

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

Explicação: o summary() apresenta mínimo, quartis, mediana, média e máximo. Observa-se que o consumo médio é de aproximadamente 20.1 mpg, a potência média é de 146.7 hp e o peso médio é de 3.22 (mil libras).

Passo 3 – Criação de novas variáveis (mutate)

dados <- dados %>%
  mutate(
    kpl = round(mpg * 0.425144, 2),          
    peso_kg = round(wt * 453.592, 0),        
    potencia = ifelse(hp >= 150, "Alta", "Baixa")  
  )

dados %>% select(modelo, mpg, kpl, wt, peso_kg, hp, potencia) %>% head()

Explicação: foram criadas três variáveis novas:

  1. kpl: converte o consumo de milhas por galão para quilômetros por litro (multiplicando por 0,425144), unidade mais familiar no Brasil;
  2. peso_kg: converte o peso de milhares de libras paraquilogramas (1 libra ≈ 0,4536 kg);
  3. potencia: variável categórica que classifica o carro como “Alta” (150 hp ou mais) ou “Baixa” potência.

Passo 4 – Filtragem (filter)

economicos <- dados %>%
  filter(cyl == 4, mpg > 25) %>%
  select(modelo, cyl, mpg, kpl, hp)

economicos

Explicação: filtrei apenas os carros de 4 cilindros com consumo acima de 25 mpg. O resultado foi de 6 carros, que são os mais econômicos do conjunto. Isso mostra que carros menores (menos cilindros) tendem a ter melhor rendimento.

Passo 5 – Ordenação (arrange)

dados %>%
  arrange(desc(hp)) %>%
  select(modelo, hp, cyl, mpg) %>%
  head(5)

Explicação: ordenei os carros pela potência em ordem decrescente (desc(hp)) e exibi os cinco mais potentes. O mais potente é o Maserati Bora, com 335 hp; note também que ele possui consumo baixo, reforçando a relação entre potência e gasto de combustível.

Passo 6 – Agrupamento e resumo (group_by + summarise)

resumo_cil <- dados %>%
  group_by(cyl) %>%
  summarise(
    n = n(),
    consumo_medio_kpl = round(mean(kpl), 2),
    potencia_media_hp = round(mean(hp), 1),
    peso_medio_kg = round(mean(peso_kg), 0)
  )

resumo_cil

Explicação: agrupei os carros pelo número de cilindros e calculei, para cada grupo, a quantidade de carros (n) e as médias de consumo, potência e peso. O resultado mostra um padrão: quanto maior o número de cilindros, maior a potência e o peso, e menor o consumo (km/L).

2) Tabela Interativa (DT)

A tabela abaixo foi criada com o pacote DT e permite ordenar (clicando no cabeçalho das colunas), buscar (campo “Search”) e paginar (escolhendo quantas linhas exibir por página).

tabela <- dados %>%
  select(Modelo = modelo, Cilindros = cyl, `Consumo (km/L)` = kpl,
         `Potência (hp)` = hp, `Peso (kg)` = peso_kg, `Categoria de potência` = potencia)

datatable(
  tabela,
  rownames = FALSE,
  filter = "top",                      
  options = list(
    pageLength = 8,                    
    lengthMenu = c(5, 8, 16, 32),
    order = list(list(3, "desc")),     
    language = list(url = "//cdn.datatables.net/plug-ins/1.13.6/i18n/pt-BR.json")
  ),
  caption = "Tabela 1 – Características de 32 modelos de automóveis (mtcars)"
)

3) Equações em LaTeX

Equação 1 – Estimador de Mínimos Quadrados (Regressão Linear)

\[\hat{\boldsymbol{\beta}} = \left(\mathbf{X}^{\top}\mathbf{X}\right)^{-1}\mathbf{X}^{\top}\mathbf{y}\]

Significado: fornece os coeficientes \(\hat{\boldsymbol{\beta}}\) da regressão linear que minimizam a soma dos quadrados dos erros. \(\mathbf{X}\) é a matriz de variáveis explicativas e \(\mathbf{y}\) é o vetor da variável resposta (Hastie et al. 2009).

Equação 2 – Teorema de Bayes

\[P(\theta \mid D) = \frac{P(D \mid \theta)\,P(\theta)}{\displaystyle\int P(D \mid \theta')\,P(\theta')\,d\theta'}\]

Significado: atualiza a crença sobre um parâmetro \(\theta\) após observar os dados \(D\). \(P(\theta)\) é a distribuição a priori, \(P(D\mid\theta)\) é a verossimilhança e \(P(\theta\mid D)\) é a distribuição a posteriori. O denominador é a constante normalizadora.

Equação 3 – Densidade da Distribuição Normal Multivariada

\[f(\mathbf{x}) = \frac{1}{(2\pi)^{k/2}\,|\boldsymbol{\Sigma}|^{1/2}} \exp\!\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{\top}\boldsymbol{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})\right)\]

Significado: descreve a densidade de probabilidade de um vetor aleatório \(\mathbf{x}\) com \(k\) dimensões, média \(\boldsymbol{\mu}\) e matriz de covariância \(\boldsymbol{\Sigma}\). É a base de diversos métodos estatísticos e de aprendizado de máquina.

Equação 4 – Função de Perda de Entropia Cruzada (Regressão Logística)

\[J(\mathbf{w}) = -\frac{1}{m}\sum_{i=1}^{m}\left[y_i \log\!\big(\sigma(\mathbf{w}^{\top}\mathbf{x}_i)\big) + (1-y_i)\log\!\big(1-\sigma(\mathbf{w}^{\top}\mathbf{x}_i)\big)\right], \quad \sigma(z)=\frac{1}{1+e^{-z}}\]

Significado: mede o erro de um classificador binário. \(\sigma(z)\) é a função sigmoide, que transforma qualquer valor real em probabilidade (entre 0 e 1); \(y_i \in \{0,1\}\) é a classe real. Quanto menor \(J\), melhor o modelo.

Equação 5 – Descida do Gradiente

\[\mathbf{w}_{t+1} = \mathbf{w}_t - \eta\,\nabla_{\mathbf{w}} J(\mathbf{w}_t), \qquad \nabla_{\mathbf{w}} J = \left[\frac{\partial J}{\partial w_1}, \frac{\partial J}{\partial w_2}, \ldots, \frac{\partial J}{\partial w_n}\right]^{\top}\]

Significado: algoritmo iterativo de otimização usado para treinar modelos. A cada passo \(t\), os parâmetros \(\mathbf{w}\) são atualizados na direção oposta ao gradiente da função de perda \(J\), com tamanho de passo definido pela taxa de aprendizado \(\eta\) (Goodfellow et al. 2016).

4) Figuras

Figura 1 – Relação entre peso e consumo (análise exploratória)

ggplot(dados, aes(x = peso_kg, y = kpl, color = factor(cyl))) +
  geom_point(size = 3, alpha = 0.85) +
  geom_smooth(aes(group = 1), method = "lm", se = TRUE,
              color = "black", linetype = "dashed") +
  labs(x = "Peso (kg)", y = "Consumo (km/L)", color = "Cilindros",
       title = "Peso x consumo dos automóveis") +
  theme_minimal(base_size = 13)
Figura 1 – Gráfico de dispersão entre o peso e o consumo dos carros, com reta de regressão linear.

Figura 1 – Gráfico de dispersão entre o peso e o consumo dos carros, com reta de regressão linear.

A figura mostra uma relação negativa: carros mais pesados tendem a consumir mais combustível (menos km/L).

Figura 2 – Etapas do fluxo de trabalho em Ciência de Dados

etapas <- data.frame(
  x = 1:5,
  y = 1,
  etapa = c("Coleta\ndos dados", "Limpeza e\ntransformação",
            "Análise\nexploratória", "Modelagem", "Comunicação\ndos resultados")
)

ggplot(etapas, aes(x, y)) +
  geom_segment(data = etapas[1:4, ],
               aes(x = x + 0.32, xend = x + 0.68, y = y, yend = y),
               arrow = arrow(length = unit(0.25, "cm")), linewidth = 0.8) +
  geom_label(aes(label = etapa, fill = etapa), size = 4, show.legend = FALSE,
             label.padding = unit(0.5, "lines")) +
  xlim(0.5, 5.5) +
  theme_void()
Figura 2 – Fluxo de trabalho de um projeto de ciência de dados.

Figura 2 – Fluxo de trabalho de um projeto de ciência de dados.

Um projeto de ciência de dados normalmente segue estas etapas: coletar os dados, limpá-los e transformá-los, explorá-los visualmente e estatisticamente, construir modelos e, por fim, comunicar os resultados.

5) Referências

As referências abaixo são geradas automaticamente a partir do arquivo referencias.bib. Exemplos de citação no texto: regressão linear (Hastie et al. 2009), introdução prática com R (James et al. 2021), aprendizado profundo e otimização (Goodfellow et al. 2016), manipulação de dados com o tidyverse (Wickham and Grolemund 2017) e R Markdown (Xie et al. 2018).

Goodfellow, Ian, Yoshua Bengio, and Aaron Courville. 2016. Deep Learning. MIT Press.
Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. 2009. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2nd ed. Springer.
James, Gareth, Daniela Witten, Trevor Hastie, and Robert Tibshirani. 2021. An Introduction to Statistical Learning: With Applications in r. 2nd ed. Springer.
Wickham, Hadley, and Garrett Grolemund. 2017. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Chapman; Hall/CRC.