Escolar Documentos
Profissional Documentos
Cultura Documentos
CURSO INTRODUTÓRIO AO R
Maringá, PR
2021
Sumário
1 Introdução 4
2 O que é R? 4
2.1 Um Breve Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Principais Caracterı́sticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Por que aprender R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Instalação do R e R-Studio 8
3.1 Download do R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Instalação do R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 Download do RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Instalação do RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Funcionalidade do R 18
4.1 Regras Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Utilizando o help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Comandos Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4 Comandos auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.5 Valores perdidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5 Objetos 22
5.1 Tipos de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.1.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.1.2 Matrizes e arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.3 Data frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.1.4 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6 Tipos de Variáveis 27
6.1 Variáveis Numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.2 Variáveis Lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3 Variáveis Characteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1
6.4 Variáveis Categóricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7 Funções 30
7.1 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8 Calculadora 59
8.1 Operações Matemáticas Simples . . . . . . . . . . . . . . . . . . . . . . . . 59
8.2 Funções matemáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.3 Operações com vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.4 Operações entre matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.5 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9 Pacotes (Packages) no R 67
9.1 Como instalar um pacote . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
11 Importação de dados 77
11.0.1 Utilizando o argumento clipboard . . . . . . . . . . . . . . . . . . . 78
11.1 Lendo dados de um arquivo externo . . . . . . . . . . . . . . . . . . . . . . 78
11.1.1 Utilizando a função read.table . . . . . . . . . . . . . . . . . . . . . 78
11.1.2 Outras funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
11.2 Carregando dados já disponı́veis no R . . . . . . . . . . . . . . . . . . . . . 80
12 A famı́lia apply 80
12.1 Função apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.2 Função tapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2
12.3 Função lapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
12.4 Função sapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
12.5 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13 Gráficos 88
13.1 Gráfico de Barras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
13.2 Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
13.3 Gráfico de Dispersão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
13.4 Box plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
13.5 Como salvar gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
13.6 Outros Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
13.7 Exercı́cio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
14 Análise Exploratória 96
14.1 Organização do conjunto de dados . . . . . . . . . . . . . . . . . . . . . . . 96
14.2 Análise univariada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
14.2.1 Variável qualitativa nominal . . . . . . . . . . . . . . . . . . . . . . 99
14.2.2 Variável qualitativa ordinal . . . . . . . . . . . . . . . . . . . . . . 100
14.2.3 Variável quantitativa discreta . . . . . . . . . . . . . . . . . . . . . 102
14.2.4 Variável quantitativa contı́nua . . . . . . . . . . . . . . . . . . . . . 106
14.3 Análise bivariada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
14.3.1 Qualitativa vs Qualitativa . . . . . . . . . . . . . . . . . . . . . . . 110
14.3.2 Qualitativa vs Quantitativa . . . . . . . . . . . . . . . . . . . . . . 113
14.3.3 Quantitativa vs Quantitativa . . . . . . . . . . . . . . . . . . . . . . 115
3
1 Introdução
O R é uma linguagem e também um ambiente de desenvolvimento integrado para
cálculos estatı́sticos e gráficos. Fornece uma ampla variedade de técnicas estatı́sticas
(modelagem linear e não linear, testes estatı́sticos clássicos, análise de séries temporais,
classificação, agrupamento,... ) e gráficos, e é altamente extensı́vel.
O RStudio é um ambiente de desenvolvimento integrado livre de código aberto para R,
que possibilita ao usuário resolver problemas práticos de uma maneira rápida e eficiente.
Este material tem por objetivo apresentar o R aos usuários, bem como suas funciona-
lidades e comandos básicos, e está dividido em seções.
2 O que é R?
O R é um software e uma linguagem de programação, isto é, um ambiente utilizado
para executar programas codificados em R. O R é um sistema operacional de software
livre de código aberto vinculado ao projeto GPL (General Public Licence). Atualmente,
tanto a linguagem como o software são desenvolvidos por um grupo conhecido como o R
Core Team (COTTON, 2013; TORFS; BRAUER, 2018).
Para Oliveira, Guerra e McDonnell (2018) o R é um conjunto de pacotes e ferramentas
estatı́sticas, munido de funções que facilitam sua utilização, desde a criação de simples
rotinas até análises de dados complexas, com visualizações bem acabadas. O R é como
uma calculadora cientı́fica, porém ao invés de apertar os botões, devem-se escrever os
comandos.
A linguagem R foi criada no inı́cio dos anos 90, mais precisamente em 1993, por
Ross Ihaka e Robert Gentleman, ambos vinculados a Universidade de Auckland na Nova
Zelândia. Essa linguagem teve origem com base na linguagem de programação S que foi
desenvolvida no Bell Laboratories na década de 1970, principalmente por John Chambers
(COTTON, 2013). O nome R é parcialmente fundamentado nos primeiros nomes dos
dois autores Robert e Ross, e em parte uma brincadeira com o nome da linguagem S
(HORNIK, 2018).
4
2.2 Principais Caracterı́sticas
• Stack Overflow : são sites de pergunta e resposta amplamente utilizados por todas
as linguagens de programação. E o R é uma delas, que detém de grupos de usuários
gerando diariamente uma infinidade de conteúdos e discussões do R.
2.3 Site
Além do R ser gratuito, os usuários podem sempre ter a versão mais atualizada.
Conforme Wickham e Grolemund (2017), uma nova versão principal do R é lançada uma
vez por ano e há 2 a 3 lançamentos menores a cada ano. A atualização pode ser um pouco
5
incômoda, especialmente para versões principais, que exigem a reinstalação de todos os
seus pacotes.
O R dispõe de uma Home Page e para conhecê-la visite este link “https://www.r-
project.org/”. Na página inicial (Figura 1) encontra-se a apresentação e as notı́cias re-
centes sobre o R, e à esquerda da página tem-se os seguintes links :
• R Project: apresenta link que descreve sobre o R, assim como o link que exibe
os planos de lançamento (About R; Logo; Contributors; What’s New?; Reporting
Bugs; Conferences; Search; Get Involved; R Blog);
6
Figura 1: Home Page do R - https://www.r-project.org/
• O R é totalmente livre;
• Ele é extensı́vel, isto é, o usuário pode escrever seus próprios programas ou incluir
os programas de outros para ajudar executar a tarefa que deseja, ainda que dispõe
7
de muitos códigos ou funções para realizar análises estatı́sticas, o usuário não está
limitado a usar somente esses programas.
• O R tem um sistema gráfico de alta qualidade, ele considera um gráfico como uma
tela em branco na qual o usuário pode adicionar uma legenda, colorir os pontos,
adicionar uma linha de suavização ou desenhar uma caixa em cima de um gráfico
de dispersão.
Para Oliveira, Guerra e McDonnell (2018), além dos motivos citados acima incluı́ram
também as seguintes motivações para aprender o R:
3 Instalação do R e R-Studio
3.1 Download do R
8
(a) Opção para escolher um espelho e fazer o download do instalador do R.
9
(c) Subdiretório base para fazer o download do instalador do R.
(d) Instalador.
Figura 2: Download R
3.2 Instalação do R
Para instalar o R, clique duas vezes no arquivo executável (setup), selecione o idioma
do instalador, clique em próximo para concordar com a Licença Pública. Se possı́vel sem-
pre aceite o local de destino sugerido pelo instalador e clique em próximo. Desmarque
os componentes que você não precisa instalar e clique em próximo. Para opção de inicia-
lização os pesquisadores recomendam aceitar o padrão e clique em próximo. Selecione a
pasta do menu iniciar (aceite a sugestão do instalador) e clique em próximo. Selecione as
tarefas adicionais e clique em próximo. Por fim clique em concluir para sair do instalador.
10
(a) Arquivo executável do R (b) Idioma do instalador
(e) Componentes que devem ser instalados (f) Opção padrão de instalação.
11
(g) Aceite a pasta e clique em próximo. (h) Tarefas adicionais para instalação.
2. Você verá uma janela de comandos com o sı́mbolo >, que é chamado de prompt do
R, indicando que o programa está pronto para receber comandos;
3. Digite (ou recorte e cole) os comandos mostrados ao longo deste material ou seus
próprios comandos.
• Autocomplete;
12
download RStudio, então escolha o sistema operacional adequado para seu notebook. As
Figuras 3i e 3j apresentam os passos para fazer o download do instalador do RStudio.
13
(j) Opção do sistema operacional para fazer o download do instalador do RStudio.
Para instalar o RStudio é necessário clicar duas vezes no arquivo executável (setup),
então apresentará uma informação que este assistente guiará você através da instalação
do RStudio, para continuar clique em próximo. Se possı́vel mantenha o destino que o
instalador selecionou e clique em próximo. Escolha uma pasta do Menu Iniciar para os
atalhos do RStudio e clique em instalar. Ao exibir a mensagem Completando o Assis-
tente de Instalação do RStudio clique em Terminar. Todos esses passos indicados
são representados nas Figuras 4a e 4e
14
(a) Arquivo executável do RStudio 1.1.463. (b) Assistente de Instalação do RStudio.
(c) Indicação do local de Instalação do RStudio. (d) Seleção da Pasta do Menu Iniciar do RStudio.
A página inicial do RStudio é divida em quatro partes, porém ao abrir pela primeira
vez aparece três partes como mostra a Figura 5a. Para abrir o editor de código clique em
file e abra um novo script indo em R script ou abra seu arquivo para análise (Figuras 5b
e 5c).
15
(a) RStudio sem o editor de código (script).
16
(c) RStudio dividido em quatro partes.
4. Files, Plots, Packages, Help e Viewer nesta janela estão várias funcionalidades
como a navegação de arquivos do computador, aba para gráficos, pacotes, ajuda e
visualizador.
17
4 Funcionalidade do R
Algumas regras devem ser pontuadas como, por exemplo, o fato do R ser case-sensitive,
bem como o modo de salvar scripts.
help(comando) #sintaxe
#Exemplo
help(sqrt)
?sqrt
Ao executar o exemplo acima, uma interface do menu de ajuda será executada mos-
trando o tópico da função sqrt, que é função matemática para a raiz quadrada. Para
realizar uma busca em arquivos de ajuda sobre um tópico desejado, podemos utilizar os
seguintes comandos:
help.search("express~
ao") #sintaxe
??express~
ao #sintaxe
#Exemplo
help.search("negative binomial")
??weibull
18
Os exemplos acima retornarão janelas de informação indicando os tópicos de ajuda
que possuem a expressão procurada.
2. Usage - mostra como a função deve ser utilizada e quais argumentos podem ser
especificados;
5. Value - mostra o que sai no output após usar a função (os resultados);
9. See also - mostra outras funções relacionadas que podem ser consultadas;
Quando for usar uma função pela primeira vez será no help que você aprenderá a
usá-la. Os tópicos Usage e Arguments são os mais importantes, pois mostram como os
argumentos devem ser inseridos na função (Usage) e caso não saiba o que é algum desses
argumentos existe uma explicação para cada um deles (Arguments).
• # Este comando o R entende como comentário, então tudo o que estiver depois dele
não será compilado;
19
• : Cria sequência.
Função Descrição
ls() ou objects() Lista curta de variáveis definidas
ls.str() Lista detalhada de variáveis definidas
str(x) Ver informações detalhadas de x
Ver informações detalhadas sobre todas as variáveis
ls.str(ab)
com “ab” em seu nome
rm(x) Deletar variável x
rm(x, y) Deletar as variáveis x e y
rm(list = ls()) Deletar todas as variáveis (limpar a workspace)
class(x) ver que tipo de objeto é x
Sair do R com a opção de salvar a workspace em um
q() arquivo (“Name.RData”) e o histórico de comandos
em outro arquivo (“Name.RHistory”)
ctrl + L Limpa as informações contidas (rodadas) no console
ctrl + enter ou ctrl + r Roda, no console, o script digitado no source
ctrl + shift + h Seta o diretório
O software R apresenta valores especiais, tais como a constante pi, que armazena
o valor desta constante matemática (3,1415...). Juntamente com a mesma, tem-se os
seguintes valores:
20
• NA Significa Not Available que denota dados faltantes. Note que deve-se utilizar
caixa alta, e o NA tem uma classe, ou seja, podemos ter NA numeric, NA character
etc.
• NaN Significa Not a Number, denota um valor que não é representável por um
número, e um NaN é um NA, mas a recı́proca não é verdadeira.
• Inf e -Inf representa mais ou menos infinito,ou seja, um número muito grande ou
pequeno ou um limite matemático.
Observe nos exemplos a seguir, alguns resultados que geram estes valores especiais.
c(1,1,0,1,0, 1)/0
[1] Inf Inf NaN Inf NaN Inf
c(0,0,11,0,pi,0,1,10, 7)/0
[1] NaN NaN Inf NaN Inf NaN Inf Inf Inf
sqrt(-13)
[1] NaN
is.na(x)
[1] TRUE FALSE FALSE FALSE FALSE TRUE
is.nan(x)
[1] TRUE FALSE FALSE FALSE FALSE FALSE
#Onde a funç~
ao is.na e is.nan é para testar se um objeto é um desses valores.
21
5 Objetos
O R é uma linguagem orientada a objetos, por exemplo: vetores, fatores, matrizes, data
frames, entre outros. O entendimento de cada tipo de objetos básicos é muito importante
pois são conceitos frequentemente utilizados.
Pode-se armazenar um valor em um objeto com certo nome usando o sı́mbolo “<
−”ou“=”. Por exemplo:
Nomes reservados: O R, como qualquer outra linguagem, possui nomes reservados, isto
é, nomes que não podem ser utilizados para objetos por terem um significado especial na
linguagem. São eles:
22
5.1 Tipos de objetos
• Vetores;
• Matrizes e arrays;
• Data frames;
• Listas;
5.1.1 Vetores
Vetores são os mais simples tipos de objeto para armazenar dados no R. O R é uma
linguagem vetorial, e portanto capaz de operar vetores e matrizes diretamente sem a
necessidade de “loops”.
Nos exemplos a seguir serão mostrados algumas operações com vetores. A função c()
(“c” de concatenar) é utilizada para criar um vetor. Os colchetes [ ] são usados para
indicar seleção de elementos.
x2 c("a", x2)
[1] 2 4 6 8 [1] "a" "2" "4" "6" "8"
Vetores são uma estrutura de dados sobre a qual podemos aplicar funções como por
exemplo as que fornecem medidas estatı́sticas, tais como sum, mean e var. Podem ser cria-
dos vetores com elementos repetidos (rep()) e sequências com alguma lógica de formação
(seq()). Também pode-se construir um vetor lógico, isto é, que contém apenas os opera-
dores lógicos (T e F).
23
Exemplo:
NOTA: É importante frisar que, na verdade, quando se compõe um vetor com carac-
teres e números, estes são convertidos em caracteres. Sendo assim, quaisquer operações
matemáticas não serão executadas.
24
, , 1
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
, , 2
[,1] [,2] [,3]
[1,] 13 17 21
[2,] 14 18 22
[3,] 15 19 23
[4,] 16 20 24
O Data frame se constitui na estrutura que irá acomodar os dados, sejam eles numéricos,
fatores, entre outros. Os argumentos mais utilizados nesta função são:
em que:
– ...: esta função aceita vários outros argumentos, para maiores informações consulte
o help desta função (?data.frame).
25
dados
NOTA: Importante aqui, é sempre lembrar que os objetos utilizados para gerar o quadro
de dados, TODOS devem ter o mesmo comprimento. Para saber o comprimento desses
objetos, basta utilizar o comando length(nome do objeto).
5.1.4 Listas
Listas são estruturas genéricas e flexı́veis que permitem armazenar diversos formatos
em um único objeto. Por exemplo:
A <- c( " aa " , " bb " , " cc " , " dd " , " ee " )
B <- c(TRUE, FALSE , TRUE, FALSE , FALSE )
C <- matrix(1:9, ncol = 3)
list1
$A
[1] "aa" "bb" "cc" "dd" "ee"
$B
[1] TRUE FALSE TRUE FALSE FALSE
26
$C
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
5.2 Exercı́cios
• V1 < − c(6,7,8,9,10)
• V2 < − c(T,F,F,T,F)
6 Tipos de Variáveis
Durante uma análise de dados, é preciso lidar com diferentes tipos de variáveis. Por
isso, é importante conhecer detalhadamente os tipos de variáveis com que se está tra-
balhando. No R, pode-se utilizar diversos tipos de variáveis, por exemplo: numéricas,
lógicas, categóricas, entre outras.
27
Para evitar possı́veis mensagens de erros durante as análises dos dados, inicialmente
deve-se consultar quais tipos de variáveis possui o conjunto de dados. Para isso, tem-
se a função class(), a qual retorna o tipo de variável (ou objeto) que se tem. Uma
alternativa para se ter informações a cerca do tipo (ou tipos) de variáveis, é por meio da
função str(), a qual retorna informação de apenas uma única variável (ou objeto) ou
informações de todas as variáveis contidas no objeto e informação do próprio objeto, isto
é, a função str() retorna informações sobre a estrutura do objeto.
a <- letter
class(a)
[1] "character"
b <- 10:40
class(b)
[1] "integer"
d <- list(a,b)
class(d)
[1] "list"
str(d)
List of 2
$ : chr [1:26] "a" "b" "c" "d" ...
$ : int [10:40] 10 11 12 13 14 15 16...
Tem-se ainda diversas outras funções para se obter informações sobre as variáveis,
tais como: is.na(x), is.null(x), is.array(x), is.data.frame(x), is.numeric(x),
is.complex(x), is.character(x), entre outras. Em que, essas funções testam se a
variável é de um determinado tipo. Para consultar uma lista completa das funções desse
tipo, utilize o comando methods(is).
Pode-se ter interesse também, não apenas em identificar qual o tipo de variável se
tem, mas em transforma-la em outro tipo. Para isso, tem-se as funções: as.array(x),
as.data.frame(x), as.numeric(x), as.logical(x), as.convert(x), as.character(x),
entre outras. Nas quais, convertem a variável x para o tipo desejado. Analogamente, para
uma lista completa, utilize o comando methods(as).
28
6.1 Variáveis Numéricas
As variáveis numéricas podem ser definidas, por exemplo, por números inteiros ou
reais, como: idade, renda, número de filhos, entre outras. Recorrentemente, há a necessi-
dade de lidar com diferentes classes numéricas, podendo se deparar com números decimais
(numeric), inteiros (integer ) ou até mesmo números complexos (complex ).
Variáveis lógicas são aquelas cujos valores podem ser VERDADEIRO ou FALSO; no
R, TRUE ou FALSE, ou ainda, T ou F.
As variáveis character são variáveis de texto (em outras linguagens pode ser conhecidas
como “strings”), isto é, são variáveis caracterı́sticas puramente individuais que não podem
29
ser utilizadas para categorizar os indivı́duos. Geralmente aparecem nos bancos de dados
apenas para ajudar em análises qualitativas e não estatı́sticas. Por exemplo: o nome dos
candidatos.
7 Funções
O software R permite que o usuário possa criar ou manipular suas próprias funções.
Basicamente, uma função é construı́da do seguinte modo:
Os argumentos são elementos dos quais a função irá depender e o corpo é uma espécie
de lista de instruções, ou seja, o algoritmo construı́do para se alcançar um determinado
objetivo. Por exemplo, a função abaixo tem um só argumento, x, e está instruı́da para se
calcular x3 .
30
cub <- function(x){ x^3}
cub(4)
[1] 64
Uma função também pode retornar vários resultados. O exemplo abaixo mostra isso.
No exemplo da função cub, nota-se que, na forma como o corpo se encontra, ela
consegue retornar diretamente o valor de x3 .
31
Mas, se a função for construı́da na forma acima, pode-se notar que a função cub2 não
retorna objeto algum. Isso porque a única instrução que está contida na função é a de
atribuição, e assim a mesma não está programada para retornar o valor de x3 quando
x = 4. A fim de que haja o retorno da função cub2, é necessário, além da atribuição,
colocar o nome do objeto.
A função variasfuncoes retorna um vetor. Assim sendo, o R permite que uma função
retorne qualquer objeto. Outro exemplo:
32
Desse modo, a função mat possui dois argumentos, x e y, retornando um objeto que
é uma matriz de ordem 2 × 2, cujos elementos são x − y, (x + 2y)2 , (x − y)4 e (2x + y)3 .
Nesse caso, foi obtido o resultado da função para x = 3 e y = −1.
–Default e referenciação
Uma função também pode ter um argumento com valor já pré-especificado. Isso é
chamado de default. Será analisado novamente o exemplo da função subtracao. Supondo
que x = 7 e assim ela só depende do valor de y.
Pode-se notar que não houve êxito. Isso porque o R entende que o número 5 é o valor
de x, e não o de y. Assim, é necessário referenciar y e, desse modo:
• all
Exemplo:
33
x <- 1:10
all(x>0)
[1] TRUE
• any
Exemplo:
x <- 2:8
any(x>4)
[1] TRUE
• append
x <- 6:15
append(x,4,11)
[1] 6 7 8 9 10 11 4 12 13 14 15
• c
Exemplo:
x <- c(2,3,4,5,6,7,8)
x
[1] 2 3 4 5 6 7 8
• cut
Divide o intervalo de um vetor x de modo que para cada observação será apresentado
o intervalo (todos os intervalos possuem comprimentos aproximadamente iguais) que
contém a observação.
34
x <- c(2,4,6,8,10,12,14,16,18,20)
cut(x,5)
[1] (1.98,5.6] (1.98,5.6] (5.6,9.2] (5.6,9.2] (9.2,12.8]
[6] (9.2,12.8] (12.8,16.4] (12.8,16.4] (16.4,20] (16.4,20]
Levels: (1.98,5.6] (5.6,9.2] (9.2,12.8] (12.8,16.4] (16.4,20]
• diff
Exemplo:
x <- c(3,11,21,4,31,44,13)
diff(x)
[1] 8 10 -17 27 13 -31
• max
Exemplo:
x <- 1:12
max(x)
[1] 12
• mean
Exemplo:
x <- 1:54
mean(x)
[1] 27.5
• min
Exemplo:
35
x <- 1:7
min(x)
[1] 1
• prod
Exemplo:
x <- 1:13
prod(x)
[1] 6227020800
• range
Exemplo:
x <- 2:17
range(x)
[1] 2 17
• replace
Exemplo: Suponha que se deseja trocar os números das posições 2,5 e 6 do vetor
2:12 por 31, 13 e 22, respectivamente.
x <- 2:12
replace(x,c(2,5,6),c(31,13,22))
[1] 2 31 4 5 13 22 8 9 10 11 12
• rev
Exemplo:
36
x <- 7:20
rev(x)
[1] 20 19 18 17 16 15 14 13 12 11 10 9 8 7
• sum
Exemplo:
x <- 4:15
sum(x)
[1] 114
• summary
Pode ser utilizado para diversos objetos. Para um data frame, essa função extrai as
medidas descritivas das variáveis.
Exemplo:
genero salario
1 M 1023
2 M 983
3 M 1073
4 F 95
5 F 1010
37
summary(dados)
genero salario
F:2 Min. : 95.0
M:3 1st Qu.: 983.0
Median :1010.0
Mean : 836.8
3rd Qu.:1023.0
Max. :1073.0
• attach
Extrai as variáveis de um objeto data frame (caso mais comum, mas o objeto
também pode ser uma lista ou ambiente).
Exemplo:
attach(dados)
ID
[1] 0203 0204 0205 0206
Levels: 0203 0204 0205 0206
38
Idade
[1] 18 21 22 27
• detach
• cbind
Exemplo:
x <- 11:20
y <- 21:30
cbind(x,y)
x y
[1,] 11 21
[2,] 12 22
[3,] 13 23
[4,] 14 24
[5,] 15 25
[6,] 16 26
[7,] 17 27
[8,] 18 28
[9,] 19 29
[10,] 20 30
• rbind
x <- 5:8
y <- 13:16
z <- 27:30
39
rbind(x,y,z)
• colMeans
Exemplo:
bonus salario
1360 3060
• colnames
Exemplo:
40
colnames(mat)
[1] "A" "B"
• colSums
Exemplo:
• det
Exemplo:
• dim
Exemplo:
• expand.grid
Exemplo:
41
gen <- factor(c("M","M", "F"))
[1] M M F
Levels: F M
expand.grid(gen,f.etarias)
Var1 Var2
1 M 0-15
2 M 0-15
3 F 0-15
4 M 16-30
5 M 16-30
6 F 16-30
7 M 31-45
8 M 31-45
9 F 31-45
10 M 56-70
11 M 56-70
12 F 56-70
13 M 71-85
14 M 71-85
15 F 71-85
• merge
Unifica dois data frames de acordo com a variável chave (variável em comum entre
os dois data frames).
42
dadosA
genero salario
1 M 1023
2 M 983
3 M 1073
4 F 975
5 F 1010
genero bonus
1 M 312
2 M 291
3 M 340
4 F 286
5 F 305
merge(dadosA,dadosB)
43
9 M 983 291
10 M 983 340
11 M 1073 312
12 M 1073 291
13 M 1073 340
• ncol
Exemplo:
• nrow
Exemplo:
• rowMeans
Exemplo:
• rownames
Exemplo:
44
matr <- cbind(seq(1,4),seq(33,36))
rownames(matr)=LETTERS[1:4]
matr
[,1] [,2]
A 1 33
B 2 34
C 3 35
D 4 36
rownames(matr)
[1] "A" "B" "C" "D"
• rowSums
Exemplo:
• split
set.seed(2020)
dadosB <- data.frame(genero = rep(c("M","F"),c(3,2)),
bonus = rpois(5,300))
genero <- dados$genero
split(dados,genero)
45
$‘F‘
genero bonus
4 F 286
5 F 305
$M
genero bonus
1 M 312
2 M 291
3 M 340
• subset
Comando bastante útil na manipulação de dados, serve para extrair uma parte de
interesse dos mesmos.
dados
46
subset(dados,Genero == "F")
• table
Retorna a frequência absoluta de observações.
Exemplo:
• prop.table()
Retorna a frequência relativa de observações.
Obs: É preciso que os dados estejam em frequência absoluta para então calcular a
frequência relativa.
Exemplo:
47
Brasil Chile Espanha Inglaterra
0.1904762 0.2857143 0.2380952 0.2857143
• union
Exemplo:
A <- c(4,3,2,6,1)
B <- c(13,45,12,34,11)
union(A,B)
[1] 4 3 2 6 1 13 45 12 34 11
• intersect
Exemplo:
A <- c(4,3,2,6,1)
B <- c(3,4,12,34,11)
intersect(A,B)
[1] 4 3
• setdiff
Exemplo:
A <- c(4,3,2,6,1)
B <- c(3,4,12,34,11)
setdiff(A,B)
[1] 2 6 1
48
• setequal
Exemplo:
A <- c(4,3,2,6,1)
B <- c(3,4,12,34,11)
setequal(A,B)
[1] FALSE
• duplicated
Exemplo:
x <- c(4,3,3,2,3,4)
duplicated(x)
[1] FALSE FALSE TRUE FALSE TRUE TRUE
• rep
Exemplo:
rep(2,8)
[1] 2 2 2 2 2 2 2 2
rep(c(5,1), times = 2)
[1] 5 1 5 1
49
[1] 2 2 2 2 1 1 1 1 1
rep(c(3,4), each=4)
[1] 3 3 3 3 4 4 4 4
• sample
set.seed(2020)
sample(8,12,replace=T)
[1] 7 6 3 5 1 1 7 1 1 5 7 6
• seq
seq(1,130,10)
1 11 21 31 41 51 61 71 81 91 101 111 121
• unique
Dado que um vetor apresenta valores repetidos, tal função irá apresentá-los sem
suas respectivas repetições.
x <- c(2,3,5,2,5,6,7,2,5,2,1,3,4,5,7)
unique(x)
[1] 2 3 5 6 7 1 4
50
– Função acumulantes
• cummax
Exemplo:
x <- c(2,3,5,2,5,6,7,2,5,2,1,3,4,5,7)
cummax(x)
[1] 2 3 5 5 5 6 7 7 7 7 7 7 7 7 7
• cummin
Exemplo:
x <- c(2,3,5,2,5,6,7,2,5,2,1,3,4,5,7)
cummin(x)
[1] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1
• cumprod
Exemplo:
x <- c(2,3,5,2,5,6,7,2,5,2,1,3,4,5,7)
cumprod(x)
[1] 2 6 30 60 300 1800 12600 25200
[9] 126000 252000 252000 756000 3024000 15120000 105840000
• cumsum
Exemplo:
51
x <- c(2,3,5,2,5,6,7,2,5,2,1,3,4,5,7)
cumsum(x)
[1] 2 5 10 12 17 23 30 32 37 39 40 43 47 52 59
• which
x <- c(2,3,1,4,1,6)
which(x<2)
[1] 3 5
• which.max
Exemplo:
x <- c(5,12,3,4,5,1)
which.max(x)
[1] 2
• which.min
x <- c(3,4,5,1,2,6)
which.min(x)
[1] 4
52
– Funções de ordenação
• order
Mostra a posição dos elementos de um vetor a fim de que estejam em ordem crescente
ou decrescente.
x <- c(3,4,7,1,2,8)
order(x)
[1] 4 5 1 2 3 6
x <- c(3,4,7,1,2,8)
order(x,decreasing=T)
[1] 6 3 2 1 5 4
• sort
x <- c(4,2,3,5,6,7,1)
sort(x)
[1] 1 2 3 4 5 6 7
x <- c(4,2,3,5,6,7,1)
sort(x,decreasing=T)
[1] 7 6 5 4 3 2 1
• unlist
x <- list(ob1=5,ob2=1,ob3=6,ob4=3)
unlist(x)
ob1 ob2 ob3 ob4
5 1 6 3
53
• Reduce
x <- list(a=2,b=3,c=10,d=28)
Reduce("+",x) # Soma os elementos da lista
[1] 43
• factor
x <- rep(c(2,3,4),c(12,7,9))
y <- factor(x)
y
[1] 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4
Levels: 2 3 4
Embora sejam números, como foram convertidos em fator, não podem ser submeti-
das a nenhuma operação matemática.
• gl
x <- gl(4,3)
x
[1] 1 1 1 2 2 2 3 3 3 4 4 4
Levels: 1 2 3 4 # Gera 3 repetiç~
oes para cada um dos 4 nı́veis.
• interaction
54
x <- gl(2,3)
y <- gl(4,4)
interaction(x,y)
[1] 1.1 1.1 1.1 2.1 2.2 2.2 1.2 1.2 1.3 2.3 2.3 2.3 1.4 1.4 1.4 2.4
Levels: 1.1 2.1 1.2 2.2 1.3 2.3 1.4 2.4
• levels
x <- gl(3,5)
levels(x)
[1] "1" "2" "3"
• nlevels
x <- gl(3,5)
nlevels(x)
[1] 3
– Funções de arredondamento
• ceiling
ceiling(pi)
[1] 4
• floor
floor(pi)
[1] 3
55
• trunc
trunc(pi)
[1] 3
• round
round(pi,4)
[1] 3.1416
• signif
signif(pi,4)
[1] 3.141
– Funções strings
• abbreviate
abbreviate("Estatistica",5)
Estatistica
"Estts"
• month.abb
Exemplo:
56
month.abb
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
• month.name
Exemplo:
month.name
• nchar
nchar("Bioestatistica")
[1] 14
• paste
Exemplo:
57
[1] "Jan é o primeiro m^
es do ano" "Fev é o segundo m^
es do ano"
[3] "Mar é o terceiro m^
es do ano" "Abr é o quarto m^
es do ano"
[5] "Mai é o quinto m^
es do ano" "Jun é o sexto m^
es do ano"
[7] "Jul é o sétimo m^
es do ano" "Ago é o oitavo m^
es do ano"
[9] "Set é o nono m^
es do ano" "Out é o décimo m^
es do ano"
[11] "Nov é o décimo primeiro "Dez é o décimo segundo
m^
es do ano" m^
es do ano"
• substr
substr("Bioestatistica", 1, 5)
[1] "Bioes"
7.1 Exercı́cios
2. Sendo
58
Tabela 1: Tabela de valores pagos de energia
(b) Utilize os comandos para encontrar o valor máximo e minimo pagos neste
perı́odo.
4. Implemente a função:
√
f (x) = x3 + 2x2 + 2
8 Calculadora
1 + 2 + 3 #Adiç~
ao 4 * 5 * 6 #Multiplicaç~
ao
[1] 6 [1] 120
7/2 #Divis~
ao 8**3 #Potenciaç~
ao
[1] 3.5 [1] 512
59
Quadro 1: operadores relacionais e lógicos no R
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
== Igual (comparação)
! = Diferente
& AND
| OR
! NOT
TRUE ou 1 Valor booleano verdadeiro (1)
FALSE ou 0 Valor booleano falso (0)
Exemplos:
Exemplos:
sqrt(16) sin(pi)
[1] 4 [1] 1.224606e-16
60
Quadro 3: lista de funções aritméticas no R
Exemplo:
Com os comandos apresentados nos quadros acima, é possı́vel realizar expressões mais
complexas:
sqrt(sin(60 * pi/180))
[1] 0.9306048591021
sqrt(cos(60 * pi/180))
[1] 0.707106781186548
sqrt(tan(60 * pi/180))
[1] 1.31607401295249
61
x = c(1, 2, 3)
y = c(4, 5, 6)
x * y
A operação anterior cria um vetor formado pelos produtos dos elementos individuais de
x e y, ou seja, c(1 * 4, 2 * 5, 3 * 6). Assim, multiplicar um escalar por um vetor é
simplesmente escrito como lambda * v. Exemplo:
y = c(4, 5, 6)
2 * y
A operação anterior cria um vetor formado pelo produto do escalar com os elementos
individuais de y, ou seja, c(2 * 4, 2 * 5, 2 * 6).
É possı́vel realizar uma série de operações com matrizes, o quadro abaixo descreve
algumas delas:
A = matrix(1:6, ncol = 3)
A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
62
B = matrix(10 * (1:6), ncol = 3)
B
[,1] [,2] [,3]
[1,] 10 30 50
[2,] 20 40 60
A + B
[,1] [,2] [,3]
[1,] 11 33 55
[2,] 22 44 66
A - B
[,1] [,2] [,3]
[1,] -9 -27 -45
[2,] -18 -36 -54
B / A
[,1] [,2] [,3]
[1,] 10 10 10
[2,] 10 10 10
A * B
[,1] [,2] [,3]
[1,] 10 90 250
[2,] 40 160 360
A %*% B
Error in A %*% B
Atenç~
ao para a ordem das matrizes!!
t(A)
63
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
t(A) %*% B
[,1] [,2] [,3]
[1,] 50 110 170
[2,] 110 250 390
[3,] 170 390 610
det(t(A) %*% B)
[1] 0
A %*% t(B)
[,1] [,2]
[1,] 350 440
[2,] 440 560
64
[1] 0.378064562 0.001102105
$vectors
[,1] [,2]
[1,] -0.7848945 -0.6196295
[2,] 0.6196295 -0.7848945
M
[,1] [,2] [,3]
[1,] 1 3 -1
[2,] 5 -2 1
[3,] 2 1 -1
solve(mat, vec)
[1] 3.615385 3.307692 3.538462
8.5 Exercı́cios
1. Defina:
x = c(4, 2, 6)
y = c(1, 0, -1)
65
(a) Calcule:
- x+y
- x*y
- x-2
- x∧2
2. Calcule |2 ∧ 3 − 3 ∧ 2|.
5. Crie as matrizes
x = matrix(c(3,-1,2,1), ncol = 2)
y = matrix(c(1,0,4,1,0,-1), nrow= 2, ncol = 3)
(a) Calcule:
-2 vezes a matriz x
-matriz x vezes a matriz y elemento a elemento
-quadrado da matriz x
-matriz x vezes a matriz y
-transposta de y
-inversa de x
66
9 Pacotes (Packages) no R
Pacotes no software R são um conjunto de funções e/ou dados destinados a uma
finalidade especı́fica. Um conjunto básico de pacotes vem embutido na instalação do R.
Contudo, muitos outros estão disponı́veis para download na rede de distribuição do R (R
CRAN).
install.packages("NOME_DO_PACOTE ")
1. Inicie o RStudio.
Figura 6: Passo 2
67
multiple with space or comma):”digite o nome do Pacote a ser instalado. É im-
portante marcar a opção install dependencies, pois existe pacotes dependentes
de outros, e marcando essa opção já será instalado automaticamente todos os
pacotes necessários.
Figura 7: Passo 3
Após a instalação basta carregar o pacote para utilizá-lo. Para isso, utilize um dos
comandos:
library(NOME_DO_PACOTE)
require(NOME_DO_PACOTE)
Exemplo:
install.packages("agricolae", dependencies = T)
require(agricolae)
68
10 Estruturas condicionais e laços
Operadores Lógicos
Operador Descrição
São usados para fazer interseção de condições. No caso vetorial eles
& e && se diferem,sendo que & faz a interseção para para cada entrada
do vetor e && faz usando apenas a primeira entrada do vetor
São usados para fazer união de condições e diferem da mesma forma
| e ||
que o comando de interseção;
! Pode ser usado para negar uma condição
== Igualdade
!= Diferença
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
if (condição)
{
comandos a serem executados caso a condição seja verdadeira
}
69
x <- 6
x <- 8
if(x > 0)
if(x < 0)
{
{
print("O número é positivo")
print("O número é negativo")
}
}
O número é positivo
Para executar um código que possui duas condições, uma outra estrutura condicional
deve ser adicionada. A sintáxe utilizada é:
if (condição)
{
comandos a serem executados caso a condição seja satisfeita
} else
{
comandos a serem executados caso a condição anterior não seja satisfeita
}
x <- 6 x <- -8
if(x > 0) if(x > 0)
{ {
print("O número é positivo") print("O número é positivo")
} else } else
{ {
print("O número é negativo") print("O número é negativo")
} }
O número é positivo O número é negativo
Quando o número de condições a serem testadas for maior que dois, a estrutura vista
anteriormente if com else se estende para:
70
if (condição 1)
{
comandos a serem executados caso a condição 1 seja satisfeita
} else if (condição 2)
{
comandos a serem executados caso a condição 2 seja satisfeita
}
..
.
else
{
comandos a serem executados caso nenhuma das condições anteriores sejam satisfeitas
}
x <- 5 x <- -2
if(x > 0) if(x > 0)
{ {
print("O número é positivo") print("O número é positivo")
} else if (x < 0){ } else if (k < 0){
print("O número é negativo") print("O número é negativo")
} else{ } else{
print("O número é igual a zero") print("O número é igual a zero")
} }
O número é positivo O número é negativo
71
x <- 0
if(x > 0)
{
print("O número é positivo")
} else if (x < 0){
print("O número é negativo")
} else{
print("O número é igual a 0")
}
O número é igual a 0
Quando nosso objeto é um vetor não conseguimos utilizar as funções if() e if() com
else diretamente. Uma alternativa para estes casos é utilizar a função ifelse() que serve
para alguns casos especiais. A sintaxe utilizada é:
em que:
k <- c(-2, 0, 2)
ifelse(k >= 0, "O número é zero ou positivo", "O número é negativo")
"O número é negativo" "O número é zero ou positivo"
"O número é zero ou positivo"
72
k <- c(0, 10, 14, 50, 60, 70, 59, 67)
ifelse(k >= 60, "aprovado", "reprovado")
"reprovado" "reprovado" "reprovado" "reprovado"
"aprovado" "aprovado" "reprovado" "aprovado"
A estrutura de repetição (ou laço) faz com que uma sequência de comandos seja
executada repetidamente até que uma dada condição de interrupção seja satisfeita.
A estrutura de repetição for faz com que o conjunto de comandos seja executado
repetidamente a partir do indicador até o fim da sequência numérica. Sua sintaxe é:
• 1o Passo: Vamos determinar que o indicador varie de 1 a 5 e pedir que nos retorne
o valor final.
for (i in 1:5){i}
i
5
73
for (i in 1:5)
{
print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
Apesar de realizar o que pede o exercı́cio, os resultados não são salvos em um objeto.
k <- c()
for (i in 1:5){
k = i
}
k
[1] 5
• 4o Passo: Pelo fato de que o interesse é que se retorne um vetor, devemos indexar
o objeto que irá recebê-lo, pois dessa forma determinamos que a resposta iria variar
no tamanho da sequência.
k <- c()
for (i in 1:5){
k[i] = i
}
k
[1] 1 2 3 4 5
74
Exemplo 2: Encontrar os valores maiores que cinco no vetor A = (1 : 10).
A <- 1:10
for(i in 1:length(A)){
if(A[i]>5){print(A[i])}
}
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
O laço while, assim como o laço for, repete um grupo de comandos. No entanto, essa
repetição é feita enquanto a condição estabelecida é satisfeita ou até que o usuário mande
interromper o programa. Sua sintaxe é:
while(condição)
{
comandos a serem repetidos
}
Vale ressaltar que o laço for o contador progride automaticamente na sequência de-
terminada, diferente do laço while no qual precisamos indicar o contador manualmente e
especifica-lo antes de iniciar a estrutura.
Exemplo: Imprima os valores de 1 a 5.
while(l <= 5)
{
print(l)
}
Error in l : object ’l’ not found
75
Como dito anteriormente, é preciso declarar o valor inicial do contador.
l <- 1
while(l <= 5)
{
print(l)
}
# Looping infinito
• 3o Passo: Incrementando o contador, isto é, a cada rodada fazer com que o
contador avance de l para l+1 além de imprimir os resultados na tela.
l <- 1
while(l <= 5)
{
print(l)
l = l + 1
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
z <- c()
l <- 1
while(l <= 5)
{
z[l] = l
76
l = l + 1
}
z
[1] 1 2 3 4 5
10.3 Exercı́cios
1. Encontrar o dobro de um número caso ele seja positivo e o seu triplo caso seja
negativo, imprimindo o resultado.
2. Calcule a raiz quadrada de um número se ele for positivo, caso seja negativo, retorne
a mensagem: ”O número é negativo”.
(b) Informe o quadrado dos números de um vetor qualquer a sua escolha. Por
exemplo, B = (2, 6, 9).
5. Defina a matriz A como segue abaixo e troque o valor perdido pela média de sua
respectiva coluna.
11 Importação de dados
O R permite a importação de dados em diferentes formatos, desde que sigam uma
determinada estrutura. Os mais utilizados são os arquivos com extensão do tipo .txt e
.csv. Porém, é possı́vel a importação de outros tipos de extensões, tais como, .xlsx, .xls,
entre outros.
Antes de se iniciar a importação dos dados é necessário setar o diretório (working directory
do R), onde o arquivo se encontra. Os caminhos mais conhecidos para isso são pelo
77
comando setwd(), com as teclas de ”atalho Ctrl + Shift + h ou pelo comandoSession”na
barra de ferramentas (Session → Set Working Directory → Choose Directory). A seguir
serão descritas e exemplificadas algumas dessas formas.
A função read.table() faz a leitura dos conjuntos de dados nos formatos .csv e .txt
e os salvam em um objeto do tipo data.frame. Os argumentos mais utilizados neste
comando são:
A sintáxe, para este caso é:
78
setwd("DIRETÓRIO")
dados <- read.table(file = "NOME_DO_ARQUIVO.txt", head = T, dec = ",")
– dec: indica o tipo de separador decimal nos valores do conjunto de dados. O default
deste argumento é dec = ".".
A função read.table permite também ler dados diretamente disponı́veis na web. Por
exemplo:
Embora a função read.table() seja a mais utilizada, existem diversas outras funções
que podem ser bastante úteis em determinadas situações. Por exemplo: read.csv(),
79
read.csv2(), read.delim() e read.delim2(). Essas funções são praticamente iguais a
função read.table(), porém com diferentes opções default.
Para carregar conjuntos de dados que são disponibilizados no próprio software, utiliza-
se a função data(). Por exemplo, abaixo tem-se os comandos para carregar o conjunto
de dados iris.
iris
# Imprime o conjunto de dados
12 A famı́lia apply
Sendo o R uma linguagem vetorial, isto é, um software que armazena informações em
vetores e matrizes, os laços podem e devem ser substituı́dos por outras formas de cálculo
sempre que possı́vel. A famı́lia apply configura-se como um grupo de funções úteis a serem
aplicadas em estruturas de dados como matrizes, data.frames, listas e etc. Esta famı́lia
de funções pertence ao pacote base do R.
As funções mais usuais desta famı́lia são: apply(), lapply(), sapply() e tapply().
80
apply(X, MARGEM, FUNÇÃO, · · · )
em que
apply(A, 1, sum)
[1] 12 15 18
apply(A, 2, sum)
[1] 6 15 24
Exemplo: Defina uma função que some a cada elemento da matriz A o valor de 10.
81
A <- matrix(data = 1:9,nrow = 3, ncol = 3)
A
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
• 3o Passo: Utilizar a função soma nos elementos das linhas da matriz B. Utilizar
a função pela marginal linha ou coluna o resultado será o mesmo.
apply(A, 1, soma)
Podemos também definir a função dentro da função apply que nada modificaria o
resultado.
A função tapply é uma modificação da função apply, em que é possı́vel utilizar uma
outra variável como marginal. Sendo assim, nos restringimos a dados estruturados em
data frame. Sua sintaxe é:
em que
82
I VAR 1 - é a variável em que a função será aplicada;
Exemplo: Calcule a média de idade conforme o sexo em uma base de dados que
possua essas variáveis.
dados
sexo idade
1 M 79
2 M 2
3 M 95
4 M 22
5 M 25
6 M 73
7 M 82
8 M 23
9 M 6
10 F 19
11 F 43
12 F 39
13 F 9
14 F 88
15 F 89
16 F 41
17 F 4
83
18 F 13
19 F 92
20 F 33
ou
attach(dados)
tapply(idade, sexo, mean)
F M
42.72727 45.22222
A função lapply se aplica a objetos no formato de lista, isto é, aplica uma determinada
função em cada elemento desta lista e com isso, obtêm-se uma lista de resultados de
mesmo tamanho que a inicial. Sua sintaxe é dada na forma:
lapply(X, FUNÇÃO, · · · )
em que
I X - é uma lista;
84
conj <- list(vetor = c(1,3,4,2,7,1,3,1),
matriz1 = matrix(c(1,6,3,12,41,22,13,8),4,2),
matriz2 = matrix(c(1,5,2,7,1,9,2,6,1,8,3,9),3,4),
logico = c(T,F,F,T,T,F,F,T,T))
conj
$vetor
[1] 1 3 4 2 7 1 3 1
$matriz1
[,1] [,2]
[1,] 1 41
[2,] 6 22
[3,] 3 13
[4,] 12 8
$matriz2
[,1] [,2] [,3] [,4]
[1,] 1 7 2 8
[2,] 5 1 6 3
[3,] 2 9 1 9
$logico
[1] TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE
lapply(conj, mean)
$vetor
[1] 2.75
85
$matriz1
[1] 13.25
$matriz2
[1] 4.5
$logico
[1] 0.5555556
Mesmo que o vetor seja lógico, a média é sempre calculada. Se a sentença é verda-
deira é atribuı́da a ela o valor um, caso contrário é atribuı́do o valor zero.
sapply(X, FUNÇÃO, · · · )
em que
I X - é uma lista;
$vetor
86
[1] 1 3 4 2 7 1 3 1
$matriz1
[,1] [,2]
[1,] 1 41
[2,] 6 22
[3,] 3 13
[4,] 12 8
$matriz2
[,1] [,2] [,3] [,4]
[1,] 1 7 2 8
[2,] 5 1 6 3
[3,] 2 9 1 9
$logico
[1] TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE
sapply(conj, mean)
vetor matriz1 matriz2 logico
2.7500000 13.2500000 4.5000000 0.5555556
12.5 Exercı́cios
1. De acordo com os estudos até aqui, calcule a média das colunas um e três do banco
de dados iris presente no R. Para isso, utilize o laço for, bem como alguma das
estruturas condicionais da famı́lia apply. Verifique que os resultados obtidos são
iguais para os dois casos.
87
3. O conjunto de dados Titanic no R, fornece informações sobre o destino dos passa-
geiros na fatal viagem inaugural do transatlântico ”Titanic”, resumida de acordo
com o status econômico (classe), sexo, idade e sobrevivência.
b) Qual a quantidade total de pessoas segundo a idade (de acordo com as in-
formações do conjunto de dados)?
13 Gráficos
Nesta seção serão apresentados alguns dos gráficos mais utilizados:
• Histograma: hist(dados,...)
Pode-se alterar a formatação dos gráficos, como inserir tı́tulos, estabelecer limites aos
eixos e inserir legendas. Alguns argumentos estão dados a seguir:
88
Exemplo: O conjunto de dados descrito a seguir será utilizado para apresentar os
gráficos propostos o inicio da seção.
Uma população de mulheres que tinham pelo menos 21 anos de idade, da herança
indiana de Pima e que viviam perto de Phoenix, Arizona, foi testada para diabetes de
acordo com os critérios da Organização Mundial de Saúde. Os dados foram coletados
pelo Instituto Nacional de Diabetes e Doenças Digestivas e Renais dos EUA. Foi utilizado
532 registros completos depois de eliminar os dados (principalmente ausentes) da insulina
sérica.
# O conjunto de dados
Pima.tr
89
Para o caso univariado, tem-se o gráfico de barras das pacientes que são ou não são
diabéticas segundo os critérios da OMS.
dados = Pima.te
200
150
counts = table(dados$type)
Frequências
100
barplot(counts, main = "Gráfico de barras
das pacientes diabéticas",
50
xlab = "Pacientes diabéticas",
0
ylab = "Frequ^
encias", No Yes
Pacientes diabéticas
col = "red")
Figura 8: Gráfico de barras
Para que as barras fiquem na horizontal, basta acrescentar o argumento horiz = TRUE,
como dado abaixo.
Pacientes diabéticas
90
Número de gestações e a presença de diabetes
70
counts2 <- table(dados$type, Yes
No
dados$npreg)
60
barplot(counts2, main = "Número
50
de gestaç~
oes e a presença
Frequências
40
de diabetes",
30
xlab = "Gestaç~
oes",
20
ylab = "Frequ^
encias",
10
col = c("green","purple"),
0
legend = rownames(counts2)) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 17
Gestações
Além do gráfico com barras empilhadas, pode-se fazer o gráfico com barras agrupadas.
Para isso, acrescenta-se o argumento beside = TRUE.
de gestaç~
oes e a presença
Frequências
30
de diabetes",
xlab = "Gestaç~
oes",
20
ylab = "Frequ^
encias",
10
col = c("green","purple"),
0
legend = rownames(counts2),
0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 17
91
13.2 Histograma
60
dados = Pima.te
50
hist(dados$skin, main="Histograma
40
Número de mulheres
da espessura de dobra cut^
anea
30
tricipital(em mm)",
xlab="Espessura da dobra 20
10
cut^
anea tricipital (mm)",
0
ylab="Número de mulheres",
10 20 30 40 50 60
O gráfico de dispersão é adequado para descrever a relação entre duas variáveis quan-
titativas contı́nuas. A seguir, tem-se o exemplo de um gráfico de dispersão da pressão
arterial diastólica (mm Hg) pelo ı́ndice de massa corporal (peso em kg / quadrado da
altura em metro) das pacientes indianas de Pima.
92
library(MASS)
dados = Pima.te Pressão arterial diastólica e índice de massa corporal
plot(dados$bp, dados$bmi,
60
●
main = "Press~
ao arterial ●
●
50
●
● ●
●
diastólica e ı́ndice de ●
●
●
●
●
●
●
●
● ● ●
●
● ● ●
● ●
● ● ●
● ●
● ● ●
●
massa corporal", ●
●
●
● ●
●
●
40
● ● ● ●
● ● ● ●
● ● ●
● ● ●
● ●
● ● ● ● ●
● ● ● ● ●
● ●
● ● ●
● ● ● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ●
● ● ● ●
● ●
● ● ● ● ● ●
● ●
xlab = "Press~
ao arterial ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
● ● ● ●
●
30
● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
● ● ● ●
● ● ●
● ●
● ● ●
●
● ●
● ● ● ●
20
● ●
● ● ● ● ●
40 60 80 100
corporal (kg/m^2)",
Pressão arterial diastólica (mm Hg)
93
library(MASS)
dados = Pima.te Pressão arterial diastólica e índice de massa corporal
plot(dados$bp, dados$bmi,
60
●
●
●
50
●
● ●
●
corporal", ●
●
●
● ●
●
●
40
● ● ● ●
● ● ● ●
● ● ●
● ● ●
● ●
● ● ● ● ●
● ● ● ● ●
● ●
● ● ●
● ● ● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ●
● ● ● ●
● ●
●
xlab = "Press~
ao arterial ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ●
●
●
●
●
●
●
●
●
●
● ● ● ●
● ● ●
30
● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ●
● ● ● ●
● ● ●
● ●
● ● ●
●
● ●
● ● ● ●
20
● ●
● ● ● ● ●
library(MASS)
180
dados = Pima.te
160
Glicemia (mg/dL)
boxplot(dados$glu, main =
140
"Concentraç~
ao de glicose
120
abline(h = mean(dados$glu),
60
col="red")
94
13.5 Como salvar gráficos
No RStudio, para salvar os gráficos, basta clicar na opção Export (encontrada na janela
Plots) e escolher o formato:
Outra forma de salvar os gráficos via linha de comando no formato jpeg, por exemplo:
jpeg("C:\\caminho_com_barra_dupla_invertida\\nome_do_arquivo.jpeg")
dev.off()
Para outras extensões, basta substituir o formato jpeg pela extensão desejada.
13.7 Exercı́cio
95
14 Análise Exploratória
O campo da estatı́stica preocupa-se com o estudo cientı́fico de coletar, organizar,
analisar e tirar conclusões dos dados. Os métodos estatı́sticos nos ajudam a transformar
dados em conhecimento.
Todos os dados reunidos para qualquer análise são úteis quando são adequadamente
representados, de modo que sejam facilmente compreensı́veis por todos e ajudem na to-
mada de decisão adequada. Fazer um resumo desempenha um papel vital, isso é conhecido
como resumir os dados, ou seja, estatı́sticas descritivas/resumidas. São as primeiras figu-
ras usadas para representar quase todos os conjuntos de dados. Também formam a base
para cálculos e análises muito mais complicadas. Assim, apesar de serem compostas por
métodos simples, são essenciais para o processo de análise.
setwd("C:\\Caminho")
milsa <- read.table("milsa.txt", head = T)
milsa
head(milsa)
Saı́da do R:
96
Precisa-se informar para o programa que as variáveis civil, instrução e região NÃO são
numéricas e sim categóricas, usando o comando factor().
A critério, pode-se redefinir as variáveis. Por exemplo, a variável civil com os rótulos
(labels) solteiro e casado associados aos nı́veis (levels) 1 e 2.
Para a variável instrução, usar-se-á o argumento adicional ordered = TRUE para in-
dicar que é uma variável ordinal. Na variável região, codifica-se assim: 2 = capital, 1 =
interior, 3 = outro.
97
Definindo uma nova variável denominada idade, em anos, a partir das variáveis ano e
mês.
ou
Com o conjunto de dados organizados, podemos fazer algumas análises descritivas uni
e bi-variadas.
Inicialmente verifica-se que o objeto milsa é um data.frame, usamos names( ) para
ver os nomes das variáveis, e dim( ) para ver o número de linhas (36 indivı́duos) e colunas
(9 variáveis).
is.data.frame(milsa)
[1] TRUE
names(milsa)
dim(milsa)
[1] 36 9
98
14.2 Análise univariada
Para exemplificar o uso dessas ferramentas, vamos selecionar uma variável de cada tipo.
iii. a moda.
str(milsa)
99
A seguir, as Frequências absolutas e relativas:
civil
solteiro casado
0.4444444 0.5555556
pie(table(civil))
[1] "casado"
Para exemplificar como obter análises para uma variável qualitativa ordinal, vamos se-
lecionar a variável instrução. Como feito anteriormente, obtém-se as tabelas de frequência.
100
instrucao
1o Grau 2o Grau Superior
12 18 6
O gráfico de setores não é adequado para este tipo de variável por não expressar a ordem
dos possı́veis valores. Usa-se então, um gráfico de barras:
barplot(instrucao.tb)
Para uma variável ordinal, além da moda pode-se também calcular outras medidas, tais
como a mediana.
Note que o comando median() não funciona com variáveis não numéricas, por isso, usa-
mos:
median(as.numeric(instrucao))
[1] 2
levels(milsa$instrucao)[median(as.numeric(milsa$instrucao))]
101
14.2.3 Variável quantitativa discreta
A variável filhos (número de filhos) será usada para ilustrar algumas análises que
podem ser feitas com uma variável quantitativa discreta.
Esta é uma variável numérica, e não um fator, como já verificado.
Frequências absolutas e relativas:
filhos
0 1 2 3 5
4 5 7 3 1
filhos
0 1 2 3 5
0.20 0.25 0.35 0.15 0.05
O gráfico adequado para Frequências absolutas de uma variável discreta pode ser
obtido através de um gráfico de linhas:
plot(filhos.tb)
102
plot(filhos.tbr)
A seguir mostra-se como obter algumas medidas de posição: moda, mediana, média.
Note que o argumento na.rm = T é necessário porque não há informação sobre o
número de filhos para alguns indivı́duos. Abaixo, como obter os quartis, números mı́nimo
e máximo, de um conjunto de dados:
103
[1] "2"
[1] 2
[1] 1.65
Quanto às medidas de dispersão, é possı́vel obter números máximo e mı́nimo, amplitude,
variância e desvio-padrão, coeficiente de variação. Também os quartis e a amplitude
interquartı́lica.
range(filhos, na.rm = T)
[1] 0 5
[1] 5
var(filhos, na.rm = T)
[1] 1.607895
[1] 1.268028
104
filhos.cv <- 100 * filhos.dp/filhos.me
filhos.cv
[1] 76.85018
75%
1
De forma geral:
summary(filhos)
fivenum(filhos)
[1] 0 1 2 2 5
Para comparar dois grupos em relação a uma variável quantitativa discreta, pode-se
colocar dois gráficos de barras lado a lado. Por exemplo, suponha que o conjunto de dados
anterior seja relativo a um grupo de pessoas (Grupo A) e deseja-se comparar o número de
filhos em relação a outro grupo de pessoas (Grupo B), com frequências de 5,15,7,6,3,2,1.
105
FreqB <- c(5,15,7,6,3,2,1)
GrupoB <- matrix(FreqB,ncol=7,nrow=1)
colnames(GrupoB) <- c(0,1,2,3,4,5,6)
par(mfrow=c(1,2))
Limsup= max(Freq,FreqB)
barplot(GrupoA,ylim=c(0,Limsup))
barplot(GrupoB,ylim=c(0,Limsup))
Para concluir os exemplos para a análise univariada, será usada a variável quantitativa
contı́nua salario. Para se fazer uma tabela de frequências de uma variável contı́nua é
preciso agrupar os dados em classes.
Para isso, inicialmente é necessário verificar os valores máximo e mı́nimo dos dados,
se for adotado o critério de Sturges, para definir o número de classes, usando cut( ) para
agrupar os dados.
Finalmente, obtém-se as Frequências absolutas e relativas.
range(salario)
106
[1] 4.0 23.3
nclass.Sturges(salario)
[1] 7
hist(salario)
107
boxplot(salario)
stem(salario)
4 | 0637
6 | 379446
8 | 15701488
10 | 5816
12 | 08269
14 | 77
16 | 0263
18 | 84
20 |
22 | 3
range(salario, na.rm = T)
108
salario.A <- diff(range(salario, na.rm = T))
salario.A
[1] 19.3
var(salario, na.rm = T)
[1] 21.04477
[1] 4.587458
[1] 41.24587
75%
6.5075
summary(salario)
Outro exemplo: dados representando o valor das vendas semanais (em salários mı́nimos)
de vendedores de gêneros alimentı́cios.
Fazendo um histograma:
109
vendas <- seq(32.5, 67.5, by = 5)
vendedores <- c(2, 10, 18, 50, 70, 30, 18, 2)
dados <- rep(vendas, vendedores)
hist(dados, breaks = seq(30, 70, by = 5),
xlab = "vendas", ylab = "no. vendedores", main = "")
Neste caso serão consideradas as variáveis civil (estado civil) e instrução (grau de
instrução).
A forma mais adequada de construir a tabela envolvendo duas variáveis (tabela de
cruzamento) vai depender dos objetivos da análise e da interpretação desejada para os
dados.
110
Inicialmente obtém-se a tabela de Frequências absolutas e relativas.
instrucao
civil 1o Grau 2o Grau Superior
solteiro 0.19444444 0.16666667 0.08333333
casado 0.13888889 0.33333333 0.08333333
prop.table(civ.gi.tb, margin = 1)
instrucao
civil 1o Grau 2o Grau Superior
solteiro 0.4375 0.3750 0.1875
casado 0.2500 0.6000 0.1500
prop.table(civ.gi.tb, margin = 2)
instrucao
civil 1o Grau 2o Grau Superior
solteiro 0.58 0.33 0.50
casado 0.42 0.67 0.50
barplot(civ.gi.tb, legend = T)
111
Figura 25: Gráfico bivariado para instrução
Muitas vezes é necessário reagrupar categorias porque algumas frequências são muito
baixas. Por exemplo, criar uma nova variável para agrupar 2o Grau e Superior usando
ifelse() e refazer as análises do cruzamento com esta nova variável:
instrucao1
1o Grau 2o + Superior
12 24
112
table(civil, instrucao1)
instrucao1
civil 1o Grau 2o + Superior
solteiro 7 9
casado 5 15
summary(table(civil, instrucao1))
quantile(salario)
salario.cl
instrucao (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
1o Grau 0.55 0.27 0.18 0.00
2o Grau 0.11 0.33 0.28 0.28
Superior 0.00 0.00 0.33 0.67
113
Considerando instrução como variável explicativa (eixo-X) e salario como variável resposta
(eixo-Y), obtemos um boxplot dos salários para cada nı́vel de instrução.
Note que na função abaixo, usamos a notação de fórmula do R (~), indicando que a
variável salario é explicada pela variável instrução.
boxplot(salario ~ instrucao)
114
$‘1o Grau‘
0% 25% 50% 75% 100%
4.0000 6.0075 7.1250 9.1625 13.8500
$‘2o Grau‘
0% 25% 50% 75% 100%
5.7300 8.8375 10.9100 14.4175 19.4000
$Superior
0% 25% 50% 75% 100%
10.5300 13.6475 16.7400 18.3775 23.3000
idade.cl
(20.8,30.7] (30.7,34.9] (34.9,40.5] (40.5,48.9]
8 9 9 9
salario.cl
(4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
8 9 9 9
table(idade.cl, salario.cl)
salario.cl
115
idade.cl (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
(20.8,30.7] 2 2 2 1
(30.7,34.9] 1 3 3 2
(34.9,40.5] 1 3 2 3
(40.5,48.9] 3 1 2 3
salario.cl
idade.cl (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
(20.8,30.7] 0.29 0.29 0.29 0.14
(30.7,34.9] 0.11 0.33 0.33 0.22
(34.9,40.5] 0.11 0.33 0.22 0.33
(40.5,48.9] 0.33 0.11 0.22 0.33
Para definir um número menor de classes, pode-se fazer como no exemplo a seguir, onde
cada variável é dividida em 3 classes, gerando um tabela de cruzamento 3 x 3.
salario.cl1
idade.cl1 (4,8.65] (8.65,12.9] (12.9,23.3]
(20.8,32.1] 3 5 2
(32.1,37.8] 4 3 5
(37.8,48.9] 3 4 5
salario.cl1
idade.cl1 (4,8.65] (8.65,12.9] (12.9,23.3]
(20.8,32.1] 0.30 0.50 0.20
(32.1,37.8] 0.33 0.25 0.42
(37.8,48.9] 0.25 0.33 0.42
116
O gráfico adequado para representar a relação entre duas variáveis quantitativas é um
diagrama de dispersão.
Se as variáveis envolvidas puderem ser classificadas como ”explicativa” e ”resposta”,
devemos colocar a primeira no eixo-X e a segunda no eixo-Y.
plot(idade, salario)
Referências
COHEN, Y.; COHEN, J. Y. Statistics and Data with R: An applied approach through
examples. [S.l.]: John Wiley & Sons, 2008.
CURRAN, J. M. Introduction to data analysis with R for forensic scientists. [S.l.]: CRC
Press, 2011.
117
VENABLES, W. N.; SMITH, D. M. An Introduction to R. 2018. Disponı́vel em:
hhttps://cran.r-project.org/doc/manuals/r-release/R-intro.pdfi.
118