Pacotes Estatísticos

LaTeX, Markdown e R

Prof. Dr. Dennison Carvalho

Breve histórico

O LaTeX foi desenvolvido por Leslie Lamport em 1983, como uma extensão do sistema TeX criado por Donald Knuth. Segundo (Lamport 1986), o objetivo era facilitar o uso do sistema tipográfico TeX.

Além disso, (Mittelbach and Goossens 2004) destacam que o LaTeX é amplamente utilizado em áreas acadêmicas devido à sua capacidade de lidar com fórmulas matemáticas complexas.

O que é LaTeX?

  • Um sistema de preparação de documentos de alta qualidade tipográfica.
  • Ideal para textos acadêmicos, artigos científicos, relatórios e livros.
  • Permite controle total da formatação por meio de comandos.

Por que usar LaTeX?

  • Separação entre conteúdo e formatação.
  • Excelente suporte para equações matemáticas.
  • Geração automática de sumário, referências, índices etc.
  • Totalmente gratuito e multiplataforma.

Exemplo simples

\documentclass{article}
\begin{document}
Olá, mundo do LaTeX!

\section{Introdução}
Este é um exemplo básico.

\end{document}

O que é o TeXstudio?

  • Um editor de LaTeX completo e gratuito.
  • Com realce de sintaxe, sugestões automáticas, e painel de compilação integrado.
  • Ideal para iniciantes e usuários avançados.

Outros editores

Plataforma online: Overleaf https://pt.overleaf.com/

Etapas para instalação

1. Instale uma distribuição LaTeX:

Windows: - Baixe e instale o MiKTeX

Linux: - Use o comando: sudo apt install texlive-full

macOS: - Baixe o MacTeX

2. Instale o TeXstudio:

  • Acesse: TeXstudio
  • Escolha a versão compatível com seu sistema operacional.
  • Instale como um programa comum.

Primeiros passos no TeXstudio

  1. Abra o TeXstudio.
  2. Crie um novo arquivo .tex.
  3. Escreva um código básico LaTeX.
  4. Clique em “Compilar” (ícone de seta verde ou F5).
  5. Veja o PDF gerado!

Sugestão de vídeo de instalação: click para assistir

Exemplo no TeXstudio

\documentclass{article}
\usepackage[brazil]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\begin{document}

\title{Meu Primeiro Documento}
\author{Seu Nome}
\date{\today}
\maketitle

\section{Introdução}

Meu primeiro texto em Latex

\end{document}

O que são \usepackage no LaTeX?

  • Os \usepackage são comandos usados para carregar pacotes adicionais no LaTeX.
  • Esses pacotes adicionam funcionalidades extras como:
    • Suporte a idiomas
    • Inclusão de figuras
    • Formatação de matemática avançada
    • Criação de tabelas, gráficos, e muito mais

Exemplo:

\documentclass{article}

% Pacotes utilizados
\usepackage[brazil]{babel}      % Suporte ao português
\usepackage[utf8]{inputenc}     % Codificação de texto
\usepackage{graphicx}           % Inserção de imagens
\usepackage{amsmath}            % Recursos matemáticos
\usepackage{float}              % tabela no local correto

\begin{document}
Olá, mundo com pacotes!
\end{document}

0 símbolo % é usado para fazer comentários.

Listas

\begin{itemize}
        \item Primeiro item
        \item segundo item
        \item ...
\end{itemize}
\begin{enumerate}
        \item item 1
        \item item 2
        \item ...
\end{enumerate}
\begin{description}
        \item[a] Descrição do item a
        \item[b] Descrição do item b
        \item[c] Descrição do item c
\end{description}

Como inserir figuras

\usepackage{graphicx}

\begin{figure}[h]
  \centering
  \includegraphics[width=0.5\textwidth]{exemplo.png}
  \caption{Exemplo de imagem}
  \label{fig:exemplo}
\end{figure}

Salve a imagem na mesma pasta do seu .tex.

Como inserir tabelas

\begin{table}[h]
  \centering
  \begin{tabular}{c|c|c}
    \hline
    Nome & Idade & Nota \\
    \hline
    Ana & 20 & 9,5 \\
    João & 22 & 8,0 \\
    \hline
  \end{tabular}
  \caption{Exemplo de tabela}
  \label{tab:exemplo}
\end{table}

Equações

  • Sem numeração
\[
T = \sum_{i=1}^{n}X_{i}
\]


$$T = \sum_{i=1}^{n}X_{i}$$
  • Com numeração
\begin{equation}
T = \sum_{i=1}^{n}X_{i}
\end{equation}
- Alinhada com numeração
    \begin{align} 
        x + y + z &= 0 \\
        y - z &= 1
    \end{align} 
  • Com frações
\begin{equation}
\bar{X} = \dfrac{\sum_{i=1}^{n}X_{i}}{n}
\end{equation}
  • Matriz
\begin{equation} 
M =
\begin{bmatrix}
    a & b \\
    c & d
\end{bmatrix}
\end{equation} 

O que é o beamer?

  • beamer é um pacote LaTeX usado para criar apresentações em slides (PDFs).
  • Ideal para aulas, seminários, defesas e congressos.
  • Permite temas, animações simples e estrutura de navegação.

📄 O resultado é um arquivo PDF com slides elegantes e profissionais.

Estrutura básica com beamer

\documentclass{beamer}

\title{Minha Apresentação}
\author{Professor}
\date{\today}

\begin{document}

\frame{\titlepage}

\begin{frame}
  \frametitle{Introdução}
  Este é o meu primeiro slide com Beamer.
\end{frame}

\end{document}

Temas do Beamer

  • O beamer possui vários temas visuais prontos para usar.
\usetheme{Madrid}       % muda o tema
\usecolortheme{beaver}  % muda a cor do tema

Outros temas: > Outros temas: AnnArbor, Berkeley, Madrid, Frankfurt, Warsaw, CambridgeUS.

Os mesmos recursos vistos anteriormente para um documento em LaTeX funcionam em apresentações beamer.

Exercícios

  1. Estrutura básica

Crie um documento LaTeX com:

  • Título, autor e data

  • Pelo menos uma seção e uma subseção

  • Um parágrafo com duas frases

Crie uma apresentação em LaTeX com:

  • Título, autor e data

  • Pelo menos uma seção e uma subseção

  • Um parágrafo com duas frases

  1. Figura
  • Baixe uma imagem da internet

  • Insira a imagem com legenda no seu documento

  1. Tabela
  • Crie uma tabela com 3 colunas: Produto, Preço e Quantidade

  • Insira pelo menos 3 linhas de dados

  1. Equação matemática

Insira no documento a fórmula das seguinte distribuições:

  • \[ p(x) = p(1-p)^{x-1} \]

  • \[ p(x) = \dfrac{e^{-\lambda}\lambda^{x}}{x!} \]

  • \[ P(X = x) = \binom{n}{x} p^x (1-p)^{n-x} \]

  • \[ f(x) = \dfrac{1}{\sqrt{2\pi}\sigma} e^{-\dfrac{(x-\mu)^{2}}{2\sigma^{2}}} \]

  • Insira a seguinte fórmula no documento:

\[\int_a^b \! f(x) \, dx = \lim_{\Delta x \rightarrow 0} \sum_{i=1}^{n} f(x_i) \,\Delta x_i \]

  • Crie uma matriz mxn.
    • use os ambientes eqnarray e array.

\[\begin{eqnarray*}\boldsymbol{X}=\left[ \begin{array}{cccc} x_{11} & x_{12} & \dots & x_{1n}\\ x_{21} & x_{22} & \dots & x_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ x_{m1} & x_{m2} & \dots & x_{mn}\\ \end{array} \right] \end{eqnarray*}\]

Markdown

  • Desenvolvido em 2004 por John Gruber.
  • Markdown é uma linguagem de marcação leve.
  • Permite formatar textos de forma simples e intuitiva.
  • Utilizada para criar documentos, relatórios, livros, blogs, apresentações e muito mais.

Por que usar Markdown no RStudio?

  • Ideal para relatórios reprodutíveis.
  • Fácil de integrar texto, código e resultados.
  • Suporta exportação para HTML, PDF e slides.

Markdown no R

Instale o pacote rmarkdown e o Quarto (se necessário)

#install.packages("rmarkdown")
# install.packages("quarto")  # opcional, caso use .qmd

O que é o Quarto?

  • Quarto é a nova geração de documentos reprodutíveis criada pela RStudio (Posit).
  • Suporta R, Python, Julia e etc.
  • Substitui e estende o R Markdown com mais flexibilidade e recursos modernos.
  • Permite criar documentos, relatórios, dashboards, blogs, livros e apresentações.

Principais Vantagens

  • Sintaxe moderna e mais limpa (.qmd)
  • Integração com múltiplas linguagens
  • Melhor suporte para publicação e personalização
  • Compatível com HTML, PDF, Word, RevealJS (slides), entre outros.

Crie um novo arquivo R Markdown

  • Vá em File > New File > R Markdown…

  • Preencha o título, autor e escolha o formato de saída HTML, PDF ou Word

  • Clique em “OK”.

Sintaxe básica do Markdown

  • Seções

# Título (seção)

## Subtítulo (subseção)
  • Listas
* Marcador 1
* Marcador 2
- Marcador 3
- Marcador 4

Resultado:

  • Marcador 1
  • Marcador 2
  • Marcador 3
  • Marcador 4
  • Listas em nível
* Nível 1
  - subnível 1
  - subnível 2

Resutado:

  • Nível 1
    • subnível 1
    • subnível 2

Códigos embutidos

Usamos o sinal de crase antes e depois.

`código embutido para saída em html e pdf`

Resultado:

código embutido para saída em html e pdf

  • Fonte
**Texto em negrito**
*Texto em itálico*
~~tachado~~
sobrescrito^2
subscrito$_{2}$

Resultado:

Texto em negrito

Texto em itálico

tachado

sobrescrito2

subscrito\(_{2}\)

Chunks

São janelas de comandos do R

Use três crases ```. Não é aspas simples.

'''{r}
1+1
'''

Parâmentros dos Chunks

echo = FALSE: omite o código e mostra o resultado.

message = FALSE: omite mensagens geradas pelos códigos.

warning = FALSE: omite avisos gerados pelo código.

Inserindo tabelas

| Nome | Idade | Nota |
|------|-------|------|
| Ana  | 20    | 9,5  |
| João | 22    | 8,0  |

Resultado:

Nome Idade Nota
Ana 20 9,5
João 22 8,0

GrazaDeus 🙏

  • Hiperlink
<https://www.faest.icen.ufpa.br/>

Resultado:

https://www.faest.icen.ufpa.br/

  • Imagem
![](images/vava_best.png)

Resultado:

Exercício

Trabalho avaliativo 1

Equipe de até 3 discentes.

  • Crie um arquivo em .rmd e faça uma análise exploratória de um banco de dados da plataforma kaggle, sites com dados abertos do Brasil ou outra base de dados conhecida.

  • O arquivo (relatório) deve conter título, especificação sobre o banco de dados utilizado, descrição das variáveis, análise descritiva (ex: medidas de tendência central, de dispersão, de assimetria, de curtose e separatrizes), conclusão e referências bibliográficas.

Exemplo de relatório dinâmicos com análises feitas em R Markdown.

https://rpubs.com/dennisoncarvalho/minicurso

Progração em R

Objetos no R

  • Tudo em R é um objeto.
  • Atribuição com <- ou =.
  • Remoção com rm().
taxa.de.juro <- 4.5
taxa.de.juro
[1] 4.5
rm(taxa.de.juro)

Vetores

  • Vetores armazenam múltiplos elementos do mesmo tipo.
v <- c(4, 7, 23.5, 76.2, 80)
length(v)
[1] 5
  • Vetores com tipos mistos:
v <- c(4, "texto")
v
[1] "4"     "texto"
  • Operações com Vetores
v1 <- c(4, 6, 8)
v2 <- c(10, 2, 5)
v1 + v2
[1] 14  8 13
2 * v1
[1]  8 12 16

Fatores

  • Usados para variáveis categóricas:
sexo <- factor(c("f", "m", "m", "f", "f"))
sexo
[1] f m m f f
Levels: f m
table(sexo)
sexo
f m 
3 2 
  • Tabulação cruzada:
idade <- factor(c("adulto", "jovem", "jovem", "adulto", "jovem"))
table(idade, sexo)
        sexo
idade    f m
  adulto 2 0
  jovem  1 2

Sequências

  • Com : e seq():
1:5
[1] 1 2 3 4 5
seq(0, 10, by = 2)
[1]  0  2  4  6  8 10
seq(from = 1, to = 5)
[1] 1 2 3 4 5
  • Sequências repetidas:
rep(1:3, times = 2)
[1] 1 2 3 1 2 3

Indexação

  • Acesso a elementos por posição:
tx.infl <- c(2.5, 2.0, 2.1)
names(tx.infl) <- c("Portugal", "França", "Espanha")
tx.infl["Portugal"]
Portugal 
     2.5 

Matrizes

  • Criando e acessando matrizes:
m <- matrix(1:9, nrow = 3, byrow = TRUE)
m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
m[2, 3]
[1] 6
  • Nomeando linhas e colunas:
rownames(m) <- c("A", "B", "C")
colnames(m) <- c("X", "Y", "Z")
m
  X Y Z
A 1 2 3
B 4 5 6
C 7 8 9

Arrays

São extensões das matrizes para mais do que duas dimensões.

a <- array(1:12, dim = c(2, 3, 2))
a
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12
a[ , , 1]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Listas

Coleção ordenada de objetos

l <- list(nome = "Ana", idade = 30, notas = c(9, 8, 10))
l$nome
[1] "Ana"
l[["notas"]]
[1]  9  8 10

Data frames

Semelhante a uma matriz, mas as colunas tem nomes e podem conter dados (variáveis) diferentes.

Objeto utilizado para armazenar banco de dados. Cada linha é um registro (linha) e cada coluna (campo) corresponde às características deste registro.

df <- data.frame(nome = c("Ana", "João"), idade = c(30, 25))
df
  nome idade
1  Ana    30
2 João    25
df$nome
[1] "Ana"  "João"
df[1, ]
  nome idade
1  Ana    30

Manipulando um df

data("iris") # carregando o banco de dados
df_iris = iris # atribuindo um nome para este BD
str(df_iris) # verificando a estrutura deste objeto
'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 ...
  • Selecionando linhas e colunas de um df
# Selecionando as linhas de 1 a 3 e todas as colunas
df_iris[1:3,]
  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
# encontrar linhas onde Species=="setosa"
iris[iris$Species=="setosa",]
   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
7           4.6         3.4          1.4         0.3  setosa
8           5.0         3.4          1.5         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
10          4.9         3.1          1.5         0.1  setosa
11          5.4         3.7          1.5         0.2  setosa
12          4.8         3.4          1.6         0.2  setosa
13          4.8         3.0          1.4         0.1  setosa
14          4.3         3.0          1.1         0.1  setosa
15          5.8         4.0          1.2         0.2  setosa
16          5.7         4.4          1.5         0.4  setosa
17          5.4         3.9          1.3         0.4  setosa
18          5.1         3.5          1.4         0.3  setosa
19          5.7         3.8          1.7         0.3  setosa
20          5.1         3.8          1.5         0.3  setosa
21          5.4         3.4          1.7         0.2  setosa
22          5.1         3.7          1.5         0.4  setosa
23          4.6         3.6          1.0         0.2  setosa
24          5.1         3.3          1.7         0.5  setosa
25          4.8         3.4          1.9         0.2  setosa
26          5.0         3.0          1.6         0.2  setosa
27          5.0         3.4          1.6         0.4  setosa
28          5.2         3.5          1.5         0.2  setosa
29          5.2         3.4          1.4         0.2  setosa
30          4.7         3.2          1.6         0.2  setosa
31          4.8         3.1          1.6         0.2  setosa
32          5.4         3.4          1.5         0.4  setosa
33          5.2         4.1          1.5         0.1  setosa
34          5.5         4.2          1.4         0.2  setosa
35          4.9         3.1          1.5         0.2  setosa
36          5.0         3.2          1.2         0.2  setosa
37          5.5         3.5          1.3         0.2  setosa
38          4.9         3.6          1.4         0.1  setosa
39          4.4         3.0          1.3         0.2  setosa
40          5.1         3.4          1.5         0.2  setosa
41          5.0         3.5          1.3         0.3  setosa
42          4.5         2.3          1.3         0.3  setosa
43          4.4         3.2          1.3         0.2  setosa
44          5.0         3.5          1.6         0.6  setosa
45          5.1         3.8          1.9         0.4  setosa
46          4.8         3.0          1.4         0.3  setosa
47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa
# encontrar linhas onde Species=="setosa" e Sepal.Length==5
iris[iris$Species=="setosa" & iris$Sepal.Length==5,]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5             5         3.6          1.4         0.2  setosa
8             5         3.4          1.5         0.2  setosa
26            5         3.0          1.6         0.2  setosa
27            5         3.4          1.6         0.4  setosa
36            5         3.2          1.2         0.2  setosa
41            5         3.5          1.3         0.3  setosa
44            5         3.5          1.6         0.6  setosa
50            5         3.3          1.4         0.2  setosa

Agrupando os dados

# agrupando os dados apenas pelas variáveis Species, Petal.Width e Petal.Length

iris[, c("Species", "Petal.Width", "Petal.Length")]
       Species Petal.Width Petal.Length
1       setosa         0.2          1.4
2       setosa         0.2          1.4
3       setosa         0.2          1.3
4       setosa         0.2          1.5
5       setosa         0.2          1.4
6       setosa         0.4          1.7
7       setosa         0.3          1.4
8       setosa         0.2          1.5
9       setosa         0.2          1.4
10      setosa         0.1          1.5
11      setosa         0.2          1.5
12      setosa         0.2          1.6
13      setosa         0.1          1.4
14      setosa         0.1          1.1
15      setosa         0.2          1.2
16      setosa         0.4          1.5
17      setosa         0.4          1.3
18      setosa         0.3          1.4
19      setosa         0.3          1.7
20      setosa         0.3          1.5
21      setosa         0.2          1.7
22      setosa         0.4          1.5
23      setosa         0.2          1.0
24      setosa         0.5          1.7
25      setosa         0.2          1.9
26      setosa         0.2          1.6
27      setosa         0.4          1.6
28      setosa         0.2          1.5
29      setosa         0.2          1.4
30      setosa         0.2          1.6
31      setosa         0.2          1.6
32      setosa         0.4          1.5
33      setosa         0.1          1.5
34      setosa         0.2          1.4
35      setosa         0.2          1.5
36      setosa         0.2          1.2
37      setosa         0.2          1.3
38      setosa         0.1          1.4
39      setosa         0.2          1.3
40      setosa         0.2          1.5
41      setosa         0.3          1.3
42      setosa         0.3          1.3
43      setosa         0.2          1.3
44      setosa         0.6          1.6
45      setosa         0.4          1.9
46      setosa         0.3          1.4
47      setosa         0.2          1.6
48      setosa         0.2          1.4
49      setosa         0.2          1.5
50      setosa         0.2          1.4
51  versicolor         1.4          4.7
52  versicolor         1.5          4.5
53  versicolor         1.5          4.9
54  versicolor         1.3          4.0
55  versicolor         1.5          4.6
56  versicolor         1.3          4.5
57  versicolor         1.6          4.7
58  versicolor         1.0          3.3
59  versicolor         1.3          4.6
60  versicolor         1.4          3.9
61  versicolor         1.0          3.5
62  versicolor         1.5          4.2
63  versicolor         1.0          4.0
64  versicolor         1.4          4.7
65  versicolor         1.3          3.6
66  versicolor         1.4          4.4
67  versicolor         1.5          4.5
68  versicolor         1.0          4.1
69  versicolor         1.5          4.5
70  versicolor         1.1          3.9
71  versicolor         1.8          4.8
72  versicolor         1.3          4.0
73  versicolor         1.5          4.9
74  versicolor         1.2          4.7
75  versicolor         1.3          4.3
76  versicolor         1.4          4.4
77  versicolor         1.4          4.8
78  versicolor         1.7          5.0
79  versicolor         1.5          4.5
80  versicolor         1.0          3.5
81  versicolor         1.1          3.8
82  versicolor         1.0          3.7
83  versicolor         1.2          3.9
84  versicolor         1.6          5.1
85  versicolor         1.5          4.5
86  versicolor         1.6          4.5
87  versicolor         1.5          4.7
88  versicolor         1.3          4.4
89  versicolor         1.3          4.1
90  versicolor         1.3          4.0
91  versicolor         1.2          4.4
92  versicolor         1.4          4.6
93  versicolor         1.2          4.0
94  versicolor         1.0          3.3
95  versicolor         1.3          4.2
96  versicolor         1.2          4.2
97  versicolor         1.3          4.2
98  versicolor         1.3          4.3
99  versicolor         1.1          3.0
100 versicolor         1.3          4.1
101  virginica         2.5          6.0
102  virginica         1.9          5.1
103  virginica         2.1          5.9
104  virginica         1.8          5.6
105  virginica         2.2          5.8
106  virginica         2.1          6.6
107  virginica         1.7          4.5
108  virginica         1.8          6.3
109  virginica         1.8          5.8
110  virginica         2.5          6.1
111  virginica         2.0          5.1
112  virginica         1.9          5.3
113  virginica         2.1          5.5
114  virginica         2.0          5.0
115  virginica         2.4          5.1
116  virginica         2.3          5.3
117  virginica         1.8          5.5
118  virginica         2.2          6.7
119  virginica         2.3          6.9
120  virginica         1.5          5.0
121  virginica         2.3          5.7
122  virginica         2.0          4.9
123  virginica         2.0          6.7
124  virginica         1.8          4.9
125  virginica         2.1          5.7
126  virginica         1.8          6.0
127  virginica         1.8          4.8
128  virginica         1.8          4.9
129  virginica         2.1          5.6
130  virginica         1.6          5.8
131  virginica         1.9          6.1
132  virginica         2.0          6.4
133  virginica         2.2          5.6
134  virginica         1.5          5.1
135  virginica         1.4          5.6
136  virginica         2.3          6.1
137  virginica         2.4          5.6
138  virginica         1.8          5.5
139  virginica         1.8          4.8
140  virginica         2.1          5.4
141  virginica         2.4          5.6
142  virginica         2.3          5.1
143  virginica         1.9          5.1
144  virginica         2.3          5.9
145  virginica         2.5          5.7
146  virginica         2.3          5.2
147  virginica         1.9          5.0
148  virginica         2.0          5.2
149  virginica         2.3          5.4
150  virginica         1.8          5.1
# Número de observações por Species
table(iris$Species)

    setosa versicolor  virginica 
        50         50         50 
# mesmo resultado anterior, mas no formato de um dataframe
data.frame(table(iris$Species))
        Var1 Freq
1     setosa   50
2 versicolor   50
3  virginica   50
  • Agrupando os dados por medidas descritivas
### Calculando a méda de Sepal.Length
mean(iris$Sepal.Length)
[1] 5.843333
# Calculando a média de Sepal.Length por Species
aggregate(Sepal.Length ~ Species, iris, mean)
     Species Sepal.Length
1     setosa        5.006
2 versicolor        5.936
3  virginica        6.588
# calculando a média Sepal.Length por Species onde Sepal.Width >= 3
aggregate(Sepal.Length ~ Species, iris[iris$Sepal.Width>=3,],mean)
     Species Sepal.Length
1     setosa     5.029167
2 versicolor     6.218750
3  virginica     6.768966

Estruturas de Controle

  • Condicionais: if, else
x <- 10

if (x > 0) {
  print("x é positivo")
} else {
  print("x é negativo ou zero")
}
[1] "x é positivo"
  • ifelse() - forma vetorizada
valores <- c(2, -3, 0, 4)
ifelse(valores > 0, "positivo", "não-positivo")
[1] "positivo"     "não-positivo" "não-positivo" "positivo"    

Instruções Iterativas

  • Laço for
for (i in 1:5) {
  print(paste("Valor de i:", i))
}
[1] "Valor de i: 1"
[1] "Valor de i: 2"
[1] "Valor de i: 3"
[1] "Valor de i: 4"
[1] "Valor de i: 5"
  • Laço while
x <- 1
while (x <= 5) {
  print(x)
  x <- x + 1
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Evitando Ciclos

  • Ciclos podem ser ineficientes.

  • Prefira soluções vetorizadas quando possível.

# Ineficiente:
soma <- 0
for (i in 1:1000) {
  soma <- soma + i
}
soma
[1] 500500
# Melhor:
sum(1:1000)
[1] 500500

Funções

  • Código reutilizável.
minha_funcao <- function(x) {
  return(x^2)
}
minha_funcao(4)
[1] 16
  • Podemos definir funções com múltiplos argumentos.
soma_produto <- function(a, b) {
  s <- a + b
  p <- a * b
  return(list(soma = s, produto = p))
}

soma_produto(2, 5)
$soma
[1] 7

$produto
[1] 10

Exercícios

  1. Faça um laço para calcular as médias de cada coluna do banco de dados iris.
  1. Faça um laço para calcular as médias de cada linha do banco de dados iris.
  1. Faça um laço para calcular a amplitude de cada linha.

Introdução à Visualização de Dados

Por que a Visualização é Crucial?

  • Compreensão de Padrões: Revela tendências, aglomerados e dispersões que números puros podem ocultar.
  • Identificação de Anomalias: Facilita a detecção de outliers e erros nos dados.
  • Comunicação Eficaz: Transmite informações complexas de forma clara e intuitiva para diferentes públicos.
  • Exploração e Descoberta: Ajuda a formular novas hipóteses e perguntas de pesquisa.

R e a Visualização

  • R Base: Conjunto de funções gráficas que vêm com a instalação padrão do R.
    • Vantagens: Não requer pacotes adicionais, leve, oferece controle granular sobre os elementos.
    • Desvantagens: Sintaxe pode ser menos intuitiva para gráficos complexos, personalização avançada pode exigir mais código.
  • Pacotes Externos:
    • Existem pacotes poderosos como ggplot2, plotly, lattice que oferecem mais flexibilidade e sintaxe concisa.

Tipos Básicos de Gráficos (R Base)

  1. Histograma (hist())
  • Função: hist(x, ...)
  • Uso: Visualizar a distribuição de frequência de uma única variável numérica.
  • Conceito: Divide o intervalo de valores da variável em “caixas” (ou bins) e mostra a contagem (frequência) ou proporção de observações que caem em cada caixa.
# Gerar dados de exemplo: idades de 100 indivíduos
set.seed(42) # Para reprodutibilidade
idades <- round(rnorm(100, mean = 35, sd = 10)) # Idades aleatórias arredondadas

# Criar o histograma
hist(idades, 
     main = "Distribuição das Idades dos Indivíduos", # Título principal do gráfico
     xlab = "Idade (anos)",                          # Rótulo do eixo X
     ylab = "Frequência",                            # Rótulo do eixo Y
     col = "lightblue",                                # Cor das barras
     border = "white",                               # Cor da borda das barras
     breaks = 10                                     # Número de caixas (bins)
     )
  1. Gráfico de Dispersão (plot())
  • Função: plot(x, y, ...)
  • Uso: Visualizar a relação entre duas variáveis numéricas.
  • Conceito: Cada ponto no gráfico representa um par de valores (x, y) de uma observação. Permite identificar tendências, correlações e agrupamentos.
# Gerar dados de exemplo: Temperatura ambiente vs. Consumo de energia
temperatura <- seq(15, 35, by = 1) # Temperatura de 15 a 35 graus
consumo_energia <- 100 + (temperatura - 25)^2 * 2 + rnorm(length(temperatura), sd = 10) # Consumo com ruído

# Criar o gráfico de dispersão
plot(temperatura, consumo_energia,
     main = "Temperatura vs. Consumo de Energia", 
     xlab = "Temperatura (°C)",                 
     ylab = "Consumo de Energia (kWh)",         
     pch = 16,                                  # Tipo de ponto (círculo preenchido)
     col = "red",                               # Cor dos pontos
     cex = 1.2                                  # Tamanho dos pontos
     )

# Opcional: Adicionar uma linha de ajuste (regressão linear simples)
abline(lm(consumo_energia ~ temperatura), col = "blue", lty = 2, lwd = 2) # Linha tracejada azul
  1. Gráfico de Barras (barplot())
  • Função: barplot(y, ...)
  • Uso: Comparar quantidades ou frequências entre diferentes categorias de uma variável qualitativa.
  • Conceito: A altura de cada barra representa o valor associado a uma categoria.
# Dados de exemplo: número de alunos por curso
alunos_por_curso <- c(Biologia = 120, Química = 90, Física = 80, Matemática = 110, Computação = 150)

# Criar o gráfico de barras
barplot(alunos_por_curso,
        main = "Número de Alunos por Curso", 
        xlab = "Curso",                     
        ylab = "Número de Alunos",          
        col = c("slateblue", "slateblue1", "slateblue2", "slateblue3", "slateblue4"), # Cores para as barras
        border = "black",                   # Borda das barras
        las = 2                             # Rotação dos rótulos do eixo X (vertical)
        )
  1. Box Plot (boxplot())
  • Função: boxplot(x, ...)
  • Uso: Visualizar a distribuição de uma variável numérica, mostrando a mediana, quartis e possíveis outliers. Útil para comparar distribuições entre grupos.
  • Conceito
    • Caixa: Representa o Intervalo Interquartil (IQR), de Q1 a Q3 (onde 50% dos dados centrais residem).
    • Linha Central: Mediana (Q2).
    • Bigodes” (Whiskers): Estendem-se até os valores mais extremos dentro de 1.5 * IQR.
    • Pontos: Outliers (valores fora dos “bigodes”).
# Gerar dados de exemplo: pontuações de testes de dois grupos de tratamento
grupo_controle <- c(75, 78, 80, 82, 85, 88, 90, 92, 95, 98, 100)
grupo_tratamento <- c(60, 65, 70, 72, 75, 78, 80, 83, 86, 88, 90, 110) # 110 pode ser um outlier

# Criar o Box Plot para múltiplos grupos
boxplot(grupo_controle, grupo_tratamento,
        names = c("Grupo Controle", "Grupo Tratamento"), 
        main = "Pontuações em Teste por Grupo",           
        ylab = "Pontuação",                             
        col = c("yellowgreen", "violetred"),                    
        border = "gray30",                                # Borda das caixas
        outline = TRUE                                    # Garante que outliers sejam plotados (padrão TRUE)
        )
  • Principais Argumentos de plot() e Similares

    • main: Título principal do gráfico (ex., “Meu Gráfico”).
    • xlab, ylab: Rótulos para os eixos X e Y (ex. , “Variável X”).
    • col: Cor dos elementos (barras, pontos, linhas). Aceita nomes de cores ou códigos hexadecimais. Pode ser um vetor de cores.
    • pch: Símbolo para os pontos em plot() (ex. , 1 círculo vazio, 16 círculo preenchido, 3 cruz).
  • cex: Tamanho dos pontos ou caracteres (1 é o padrão).
  • lty: Tipo de linha (ex., 1 sólida, 2 tracejada, 3 pontilhada).
  • lwd: Espessura da linha.
  • xlim, ylim: Vetores de dois elementos para definir os limites dos eixos X e Y (ex., xlim = c(0, 100)).
  • axes: TRUE (padrão) para desenhar os eixos; FALSE para omitir (útil se você quiser desenhá-los manualmente com axis()).
  • cex.main, cex.lab, cex.axis: Tamanho do texto para título principal, rótulos de eixo e rótulos do eixo, respectivamente.

Exercícios

  1. Construa um histograma para as variáveis quantitativas do banco de dados iris.
  • Adicione uma linha vertical para o valor máximo, mínimo e para a média.
  • Use a função curve para adicionar a curva da distribuição normal (use dnorm()).

Use a base mtcars, disponível por padrão no R:

  1. Gráfico de dispersão
  • Crie um gráfico de dispersão entre as variáveis mpg (milhas por galão) e wt (peso do carro).
    • Adicione rótulos aos eixos.
    • Use pontos preenchidos (pch = 19).
    • Dê um título ao gráfico.
  1. Gráfico de linha
  • Utilize a variável mpg e plote seus valores em ordem de índice (linha).

    • Use type = "l" para gerar o gráfico de linhas.
    • Adicione uma linha horizontal representando a média de mpg.
  1. Boxplot
  • Crie um boxplot da variável qsec (tempo para percorrer 1/4 de milha).
    • Interprete: há outliers?
    • Adicione título e subtítulo ao gráfico.
  1. Gráfico de barras
  • Use a função table() para contar a frequência da variável cyl (número de cilindros) e, em seguida, faça um gráfico de barras.

    • Dê nomes ao eixo y e ao gráfico.

    • Altere a cor das barras.

  1. Adicionando Retas e Texto
  • Faça um gráfico de dispersão entre mpg e hp.

    • Adicione uma reta de regressão linear usando abline().

    • Adicione uma linha horizontal com a média de mpg.

    • Use text() para rotular 3 pontos no gráfico com os nomes dos carros (use rownames(mtcars)).

pacote ggplot2

  • Idealizado por Hadley Wickhan e Winston Chang.

  • Um dos pacotes mais populares do R para visualização de dados.

  • Baseado na Gramática dos Gráficos (Grammar of Graphics).

  • Permite criar gráficos complexos de forma modular e elegante.

  • Ideia básica: contruir diversos gráficos a partir da mesma estrutura de componentes.

data: bando de dados.

aes(): mapeamento estético (x, y, cor, tamanho, etc.).

geom_form: tipo de gráfico (pontos, linhas, barras, etc.).

  • Como instalar e usar:
install.packages("ggplot2")  # uma vez
library(ggplot2)             # toda vez que for usar

Forma geral:

ggplot(data = <DATA>) +
  <GEOM_FUNCTION>(
    mapping = aes(<MAPPINGS>),
    stat = <STAT>,
    position = <POSITION>
) +
 <COORDINATE_FUNCTION> +
 <FACET_FUNCTION> # dividir o gráfico em subplots

R for Dara Science: https://r4ds.had.co.nz/index.html

https://ggplot2.tidyverse.org/

library(ggplot2)
data("mtcars")
# Inicia o plot
g <- ggplot(mtcars)
# Adicionar pontos (geom_point) e
# vamos mapear variáveis a elementos estéticos dos pontos
# Size = 3 define o tamanho de todos os pontos
g <- g +
geom_point(aes(x = hp, y = mpg, color = factor(am)),
size = 3)
# Altera a escala de cores
g <- g +
scale_color_manual("Automatic",
values = c("red", "blue"),
labels = c("No", "Yes"))
# Rótulos (títulos)
g <- g +
labs(title = 'Relação entre consumo, potência e tipo de câmbio',
y = 'Consumo',
x = 'Potência')
g

Tipos de gráficos mais populares

Tipo Objeto geométrico
Dispersão (scatterplot) geom_point()
Gráfico de bolhas geom_point()
Gráfico de barras geom_bar() e geom_col()
Histograma geom_histogram()
Boxplot geom_boxplot()
Densidade geom_density()
Gráfico de linhas geom_line()
  • Escalas: color
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point()

Podemos alterar a paleta de cores manualmente: scale_color_manual

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point() +
scale_color_manual(values = c("orange", "black", "red"))
  • O ggplot2 vem com diversos temas para atribuírmos ao gráfico.

  • Para mudarmos o tema de um gráfico, bastar acrescestarmos a camada, por exemplo theme_bw. Outros temas: theme_classic, theme_dark, theme_minimal, etc

ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
  geom_boxplot(fill = "lightgreen") +
  labs(x = "Cilindros", y = "MPG")+
  theme_bw()

O pacote dplyr

  • dplyr é um dos principais pacotes do tidyverse
  • Focado em manipulação de dados
  • Sintaxe simples e intuitiva
  • Trabalha bem com data frames e tibbles

Principais funções

  • select() → seleciona colunas
  • filter() → filtra linhas
  • arrange() → ordena dados
  • mutate() → cria novas variáveis
  • summarise() → cria resumos estatísticos
  • group_by() → agrupa dados

O operador %>%

  • O pipe %>% encadeia funções
  • Permite escrever código de forma clara e legível
  • Exemplo:
library(dplyr)
iris %>%
  select(Sepal.Width) 
  
    Sepal.Width
1           3.5
2           3.0
3           3.2
4           3.1
5           3.6
6           3.9
7           3.4
8           3.4
9           2.9
10          3.1
11          3.7
12          3.4
13          3.0
14          3.0
15          4.0
16          4.4
17          3.9
18          3.5
19          3.8
20          3.8
21          3.4
22          3.7
23          3.6
24          3.3
25          3.4
26          3.0
27          3.4
28          3.5
29          3.4
30          3.2
31          3.1
32          3.4
33          4.1
34          4.2
35          3.1
36          3.2
37          3.5
38          3.6
39          3.0
40          3.4
41          3.5
42          2.3
43          3.2
44          3.5
45          3.8
46          3.0
47          3.8
48          3.2
49          3.7
50          3.3
51          3.2
52          3.2
53          3.1
54          2.3
55          2.8
56          2.8
57          3.3
58          2.4
59          2.9
60          2.7
61          2.0
62          3.0
63          2.2
64          2.9
65          2.9
66          3.1
67          3.0
68          2.7
69          2.2
70          2.5
71          3.2
72          2.8
73          2.5
74          2.8
75          2.9
76          3.0
77          2.8
78          3.0
79          2.9
80          2.6
81          2.4
82          2.4
83          2.7
84          2.7
85          3.0
86          3.4
87          3.1
88          2.3
89          3.0
90          2.5
91          2.6
92          3.0
93          2.6
94          2.3
95          2.7
96          3.0
97          2.9
98          2.9
99          2.5
100         2.8
101         3.3
102         2.7
103         3.0
104         2.9
105         3.0
106         3.0
107         2.5
108         2.9
109         2.5
110         3.6
111         3.2
112         2.7
113         3.0
114         2.5
115         2.8
116         3.2
117         3.0
118         3.8
119         2.6
120         2.2
121         3.2
122         2.8
123         2.8
124         2.7
125         3.3
126         3.2
127         2.8
128         3.0
129         2.8
130         3.0
131         2.8
132         3.8
133         2.8
134         2.8
135         2.6
136         3.0
137         3.4
138         3.1
139         3.0
140         3.1
141         3.1
142         3.1
143         2.7
144         3.2
145         3.3
146         3.0
147         2.5
148         3.0
149         3.4
150         3.0
  • Exemplo – iris
iris %>%
  select(Sepal.Length, Species) %>%
  filter(Sepal.Length > 6) %>%
  group_by(Species) %>%
  summarise(media = mean(Sepal.Length))
# A tibble: 2 × 2
  Species    media
  <fct>      <dbl>
1 versicolor  6.45
2 virginica   6.78
  • dplyr facilita a manipulação de dados

  • %>% melhora a legibilidade do código

  • Juntos, tornam a análise mais rápida e clara

Exercícios

  1. Carregue o banco de dados iris.
    Use select() para criar um novo data frame contendo apenas as variáveis Sepal.Length e Species.

  2. Filtre do banco iris apenas as observações em que a espécie é versicolor e o comprimento da sépala (Sepal.Length) é maior que 6.

  3. No banco mtcars, selecione apenas as colunas mpg (milhas por galão) e hp (potência). Em seguida, mostre apenas os 10 primeiros registros.

  1. Ordene o banco mtcars de acordo com a variável mpg (milhas por galão), da maior para a menor.

  2. Adicione ao banco mtcars uma nova coluna chamada eficiencia, calculada como a razão entre mpg e hp.

  3. No banco mtcars, agrupe os dados por número de cilindros (cyl) e calcule:

  • A média de mpg
  • O desvio-padrão de hp
  1. Use o banco iris e filtre as observações em que Sepal.Width está entre 3.0 e 3.5.

  2. Ainda no banco iris, crie uma nova variável chamada Razao_Sepala, que seja a divisão de Sepal.Length por Sepal.Width.

  3. No banco mtcars, selecione apenas os carros com transmissão automática (am = 0) e mostre apenas as colunas mpg, hp e wt.

  4. No banco iris, faça a contagem e o percentual de cada espécie (Species).

Referências

Lamport, Leslie. 1986. LaTeX: A Document Preparation System. Addison-Wesley.
Mittelbach, Frank, and Michel Goossens. 2004. The LaTeX Companion. Addison-Wesley.