Apresentação

Objetivo: apresentar, de forma acessível e reproduzível, uma análise simples de um conjunto de dados, uma tabela interativa, cinco equações estatísticas, duas figuras e cinco referências científicas e técnicas. Este documento foi produzido em R Markdown, reunindo explicações, códigos e resultados em um único relatório (Xie et al. 2018).

Conjunto de dados: iris, disponível no R. Cada linha representa uma flor, com quatro medidas numéricas (comprimento e largura das sépalas e das pétalas, em centímetros) e sua espécie. O conjunto é amplamente utilizado para ensinar análise e classificação de dados (Fisher 1936).

História dos dados: primeiro entendemos as flores, depois investigamos as diferenças entre espécies e, por fim, observamos quais medidas parecem mais úteis para distingui-las. É um exemplo de comunicação baseada em dados, visualização e narrativa (Knaflic 2015).

Itens da atividade

1. Dados e manipulação

1.1 Carregamento e inspeção

O que fazemos: carregamos iris, verificamos seu tamanho, visualizamos as primeiras linhas e identificamos o tipo das variáveis. Não é necessário baixar um arquivo CSV, pois o conjunto já acompanha o R.

iris_base <- datasets::iris

dim(iris_base)             # Quantas linhas e colunas?
## [1] 150   5
head(iris_base, 6)        # Quais são os primeiros registros?
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
str(iris_base)            # Que tipos de variáveis existem?
## '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 ...

Interpretação: o conjunto contém 150 flores e 5 colunas. As quatro primeiras colunas são medições numéricas. A última coluna, Species, identifica a espécie de cada flor. A função head() permite visualizar os dados; str() revela sua organização.

1.2 Conferência de valores ausentes e quantidade por espécie

O que fazemos: verificamos se há células vazias (NA) e quantas flores pertencem a cada espécie. Isso ajuda a compreender a qualidade e a distribuição da base.

colSums(is.na(iris_base))   # NAs por coluna
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
##            0            0            0            0            0
table(iris_base$Species)   # Quantidade por espécie
## 
##     setosa versicolor  virginica 
##         50         50         50

Interpretação: encontramos 0 valores ausentes e 3 espécies. As contagens são: setosa = 50; versicolor = 50; virginica = 50. Portanto, os três grupos possuem a mesma quantidade de observações.

1.3 Criação de duas novas variáveis

O que fazemos: criamos (a) a razão entre o comprimento e a largura da sépala e (b) uma categoria ilustrativa para o comprimento da pétala. Os limites das categorias são escolhas didáticas feitas neste relatório, não uma classificação botânica oficial.

iris_tratado <- iris_base

# Nova variável numérica: proporção entre medidas da sépala
iris_tratado$Razao.Sepala <- round(
  iris_tratado$Sepal.Length / iris_tratado$Sepal.Width,
  digits = 2
)

# Nova variável categórica: tamanho relativo da pétala
iris_tratado$Categoria.Petala <- ifelse(
  iris_tratado$Petal.Length < 2, "Curta",
  ifelse(iris_tratado$Petal.Length < 5, "Intermediária", "Longa")
)

table(iris_tratado$Categoria.Petala)
## 
##         Curta Intermediária         Longa 
##            50            54            46
head(iris_tratado, 6)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Razao.Sepala
## 1          5.1         3.5          1.4         0.2  setosa         1.46
## 2          4.9         3.0          1.4         0.2  setosa         1.63
## 3          4.7         3.2          1.3         0.2  setosa         1.47
## 4          4.6         3.1          1.5         0.2  setosa         1.48
## 5          5.0         3.6          1.4         0.2  setosa         1.39
## 6          5.4         3.9          1.7         0.4  setosa         1.38
##   Categoria.Petala
## 1            Curta
## 2            Curta
## 3            Curta
## 4            Curta
## 5            Curta
## 6            Curta

Interpretação: Razao.Sepala compara duas medidas da mesma flor: uma razão maior indica que a sépala é relativamente mais comprida em relação à largura. Categoria.Petala transforma uma medida contínua em três faixas fáceis de comparar. Na base, 50 pétalas são classificadas como curtas, 54 como intermediárias e 46 como longas.

1.4 Filtragem e ordenação

O que fazemos: selecionamos flores com pétalas de 5 cm ou mais e as ordenamos do maior para o menor comprimento da pétala.

iris_filtrado <- subset(iris_tratado, Petal.Length >= 5)

iris_ordenado <- iris_filtrado[
  order(iris_filtrado$Petal.Length, decreasing = TRUE),
]
row.names(iris_ordenado) <- NULL

nrow(iris_ordenado)
## [1] 46
head(iris_ordenado, 8)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species Razao.Sepala
## 1          7.7         2.6          6.9         2.3 virginica         2.96
## 2          7.7         3.8          6.7         2.2 virginica         2.03
## 3          7.7         2.8          6.7         2.0 virginica         2.75
## 4          7.6         3.0          6.6         2.1 virginica         2.53
## 5          7.9         3.8          6.4         2.0 virginica         2.08
## 6          7.3         2.9          6.3         1.8 virginica         2.52
## 7          7.2         3.6          6.1         2.5 virginica         2.00
## 8          7.4         2.8          6.1         1.9 virginica         2.64
##   Categoria.Petala
## 1            Longa
## 2            Longa
## 3            Longa
## 4            Longa
## 5            Longa
## 6            Longa
## 7            Longa
## 8            Longa

Interpretação: depois do filtro, restam 46 flores, correspondentes a 30.7% dos registros originais. A primeira linha da tabela ordenada representa uma das flores de maior comprimento de pétala entre as selecionadas. O maior valor observado é 6.9 cm.

1.5 Resumo por espécie

O que fazemos: calculamos as médias dos comprimentos e das larguras das pétalas por espécie. Assim, comparamos três grupos sem precisar olhar as 150 linhas individualmente.

medias_especie <- aggregate(
  cbind(Petal.Length, Petal.Width) ~ Species,
  data = iris_tratado,
  FUN = mean
)

medias_especie$Petal.Length <- round(medias_especie$Petal.Length, 2)
medias_especie$Petal.Width  <- round(medias_especie$Petal.Width, 2)

knitr::kable(
  medias_especie,
  col.names = c("Espécie", "Comprimento médio da pétala (cm)",
                "Largura média da pétala (cm)"),
  caption = "Média das medidas das pétalas por espécie"
)
Média das medidas das pétalas por espécie
Espécie Comprimento médio da pétala (cm) Largura média da pétala (cm)
setosa 1.46 0.25
versicolor 4.26 1.33
virginica 5.55 2.03

Conclusão do item 1: a espécie com o maior comprimento médio de pétala é virginica, com 5.55 cm. A espécie com menor média é setosa, com 1.46 cm. São diferenças descritivas observadas nesta amostra; por si só, não provam causalidade.

2. Tabela interativa (DT)

Nesta aba utilizamos o pacote DT, que transforma um conjunto de dados em uma tabela HTML com pesquisa, ordenação, filtros por coluna e paginação (Xie et al. 2025). A tabela contém as 150 linhas, inclusive as duas variáveis criadas na primeira aba.

Como utilizar: escreva algo em Buscar, clique no título de uma coluna para ordenar ou use os filtros logo abaixo dos títulos. Na parte inferior, escolha a quantidade de registros por página.

DT::datatable(
  iris_tratado,
  rownames = FALSE,
  filter = "top",
  options = list(
    pageLength = 10,
    lengthMenu = c(10, 25, 50),
    autoWidth = TRUE,
    language = list(
      search = "Buscar:",
      lengthMenu = "Mostrar _MENU_ registros",
      info = "Exibindo _START_ a _END_ de _TOTAL_ registros",
      infoEmpty = "Nenhum registro disponível",
      zeroRecords = "Nenhum resultado encontrado",
      paginate = list(previous = "Anterior", `next` = "Próximo")
    )
  ),
  caption = "Tabela interativa: medidas das flores Iris"
)

3. Cinco equações em LaTeX

A seguir são apresentadas cinco expressões utilizadas em estatística e ciência de dados. Todas são escritas em LaTeX, conforme o recurso ensinado em R Markdown. As expressões representam conceitos matemáticos gerais; não significa que todos esses modelos tenham sido ajustados ao conjunto iris nesta atividade.

Equação 1 — Correlação de Pearson

\[ r_{XY} = \frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})} {\sqrt{\sum_{i=1}^{n}(x_i-\bar{x})^{2}}\,\sqrt{\sum_{i=1}^{n}(y_i-\bar{y})^{2}}} \]

Significado: mede a intensidade e a direção de uma associação linear entre duas variáveis quantitativas, como comprimento e largura da pétala. Seu valor vai de -1 a 1, quando a correlação está definida; correlação não implica causalidade.

Equação 2 — Estimador de mínimos quadrados (regressão múltipla)

\[ \hat{\boldsymbol{\beta}} = (\mathbf{X}^{\mathsf{T}}\mathbf{X})^{-1}\mathbf{X}^{\mathsf{T}}\mathbf{y} \]

Significado: permite calcular coeficientes de um modelo de regressão linear múltipla. A matriz \(\mathbf{X}\) contém variáveis explicativas e \(\mathbf{y}\) contém os valores que desejamos prever. Esta forma pressupõe que \(\mathbf{X}^{\mathsf{T}}\mathbf{X}\) seja invertível.

Equação 3 — Teorema de Bayes para classificação

\[ P(C_j\mid\mathbf{x}) = \frac{P(\mathbf{x}\mid C_j)\,P(C_j)} {\displaystyle\sum_{k=1}^{K}P(\mathbf{x}\mid C_k)\,P(C_k)} \]

Significado: calcula a probabilidade de uma observação pertencer a uma classe \(C_j\) após observar suas características \(\mathbf{x}\). Por exemplo, pode apoiar a classificação de uma flor entre diferentes espécies, supondo classes que cubram todas as possibilidades e denominador positivo.

Equação 4 — Distribuição normal multivariada

\[ f(\mathbf{x}) = \frac{1}{(2\pi)^{p/2}\lvert\boldsymbol{\Sigma}\rvert^{1/2}} \exp\!\left[-\frac{1}{2} (\mathbf{x}-\boldsymbol{\mu})^{\mathsf{T}} \boldsymbol{\Sigma}^{-1} (\mathbf{x}-\boldsymbol{\mu})\right] \]

Significado: descreve a densidade de um vetor de \(p\) variáveis quando ele segue uma distribuição normal multivariada. O vetor \(\boldsymbol{\mu}\) representa as médias e a matriz \(\boldsymbol{\Sigma}\) representa as variâncias e covariâncias; a matriz deve ser positiva definida.

Equação 5 — Entropia de Shannon

\[ H(C) = -\sum_{j=1}^{K} P(C_j)\log_{2}\!\big(P(C_j)\big) \]

Significado: mede a incerteza na distribuição das classes. É útil, por exemplo, em árvores de decisão: uma divisão dos dados que reduz bastante a entropia pode ajudar a separar melhor as classes. Adota-se \(0\log_2(0)=0\) por continuidade.

4. Duas figuras de ciência de dados

Em ciência de dados, uma figura bem escolhida deve facilitar a compreensão e não apenas exibir números. Seguimos o princípio de visualização clara defendido em (Wickham 2016) e (Knaflic 2015). Os gráficos abaixo são gerados com código R, portanto são reproduzíveis.

Figura 1 — Comprimento e largura das pétalas

ggplot2::ggplot(
  iris_tratado,
  ggplot2::aes(x = Petal.Length, y = Petal.Width, color = Species)
) +
  ggplot2::geom_point(size = 2.6, alpha = 0.78) +
  ggplot2::scale_color_manual(
    values = c("setosa" = "#0072B2", "versicolor" = "#E69F00",
               "virginica" = "#009E73")
  ) +
  ggplot2::labs(
    title = "As medidas das pétalas ajudam a diferenciar espécies",
    subtitle = "Cada ponto representa uma flor do conjunto iris",
    x = "Comprimento da pétala (cm)",
    y = "Largura da pétala (cm)",
    color = "Espécie"
  ) +
  ggplot2::theme_minimal(base_size = 12) +
  ggplot2::theme(plot.title = ggplot2::element_text(face = "bold"))
Figura 1 — Dispersão do comprimento e da largura da pétala, identificada por espécie.

Figura 1 — Dispersão do comprimento e da largura da pétala, identificada por espécie.

O que a figura mostra: flores com pétalas curtas e estreitas tendem a aparecer separadas das de pétalas mais longas e largas. Há aproximações entre alguns registros de versicolor e virginica, então a separação não é perfeita.

Figura 2 — Comparação das médias por espécie

ggplot2::ggplot(
  medias_especie,
  ggplot2::aes(x = reorder(Species, Petal.Length), y = Petal.Length,
               fill = Species)
) +
  ggplot2::geom_col(width = 0.62, show.legend = FALSE) +
  ggplot2::geom_text(
    ggplot2::aes(label = sprintf("%.2f", Petal.Length)),
    vjust = -0.45, size = 4
  ) +
  ggplot2::scale_fill_manual(
    values = c("setosa" = "#0072B2", "versicolor" = "#E69F00",
               "virginica" = "#009E73")
  ) +
  ggplot2::coord_cartesian(ylim = c(0, max(medias_especie$Petal.Length) * 1.20)) +
  ggplot2::labs(
    title = "Virginica tem o maior comprimento médio de pétala",
    subtitle = "Médias calculadas a partir das 150 flores",
    x = "Espécie",
    y = "Comprimento médio da pétala (cm)"
  ) +
  ggplot2::theme_minimal(base_size = 12) +
  ggplot2::theme(plot.title = ggplot2::element_text(face = "bold"))
Figura 2 — Comprimento médio da pétala (cm) calculado para cada espécie.

Figura 2 — Comprimento médio da pétala (cm) calculado para cada espécie.

O que a figura mostra: as médias permitem comparar diretamente as espécies. A categoria virginica apresenta o maior comprimento médio de pétala nesta base, enquanto setosa apresenta o menor. Como resumo descritivo, o gráfico não mostra toda a variação individual de cada grupo.

5. Referências bibliográficas

As cinco obras abaixo foram selecionadas por sua relação direta com o conjunto de dados, a visualização, a tabela interativa, o R Markdown e a comunicação de resultados. Foram cadastradas no arquivo ref.bib e citadas ao longo do relatório.

Fisher, Ronald A. 1936. “The Use of Multiple Measurements in Taxonomic Problems”. Annals of Eugenics 7 (2): 179–88. https://doi.org/10.1111/j.1469-1809.1936.tb02137.x.
Knaflic, Cole Nussbaumer. 2015. Storytelling with Data: A Data Visualization Guide for Business Professionals. Wiley. https://doi.org/10.1002/9781119055259.
Wickham, Hadley. 2016. ggplot2: Elegant Graphics for Data Analysis. 2º ed. Springer. https://doi.org/10.1007/978-3-319-24277-4.
Xie, Yihui, J. J. Allaire, e Garrett Grolemund. 2018. R Markdown: The Definitive Guide. CRC Press. https://bookdown.org/yihui/rmarkdown/.
Xie, Yihui, Joe Cheng, Xianying Tan, e Garrick Aden-Buie. 2025. DT: A Wrapper of the JavaScript Library DataTables. https://doi.org/10.32614/CRAN.package.DT.