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).
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.
## [1] 150 5
## 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
## '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.
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.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 0 0 0 0 0
##
## 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.
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
## 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.
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
## 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.
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"
)| 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.
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"
)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.
\[ 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.
\[ \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.
\[ 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.
\[ 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.
\[ 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.
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.
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.
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.
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.
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.
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.