alt text
GET00100 - Estatística I
Conteúdo
- Apresentando o R e o RStudio;
- Pedindo ajuda no R;
- Criando/manipulando objetos básicos;
- Tipos de dados.
Apresentando o R e o RStudio
1 - Introdução
R é uma linguagem de programação,
dinâmica, voltada à manipulação,
análise e visualização de dados. Foi
criada originalmente por Ross Ihaka e por Robert Gentleman no
departamento de Estatística da Universidade de Auckland, Nova
Zelândia.
Vamos ressaltar que a linguagem R é muito intuitiva. A grande maioria dos usuários utiliza o método da tentativa e erro. Sim!
Outro ponto de destaque, é que quando aprendemos a utilizar
um certo tipo de função, como por exemplo a função
plot, o aprendizado pode ser replicado para funções
similares, como a função barplot.
O R é um software gratuito sob uma
licença referida no Comprehensive R Archive Network - CRAN (uma rede de
servidores no qual cada servidor é conhecido como espelho).
O R foi desenvolvido por analistas estatísticos \(\rightarrow\) códigos poucas linhas
de comando quando comparado com C++, java ou Python.
O R é uma linguagem interpretada e não
compilada \(\rightarrow\)
comandos executados diretamente, sem exigir a criação
de um programa completo.
A sintaxe do R busca ser
intuitiva. Por exemplo, para ajustar um modelo de
regressão linear considerando \(y\) e
\(x\), no inglês seria um inear odel,
no R ajustamos a regressão usando lm(y \(\sim\) x).
O R é um software aberto \(\rightarrow\) continuamente
melhorado, atualizado, expandido pela comunidade.
Quando o R está sendo executado, variáveis, dados, funções, resultados, etc., são armazenados na memória ativa do computador na forma de objetos que possuem um nome.
O usuário pode fazer ações nesses objetos com operadores (aritmética, lógica, comparação, …) e funções (que são eles próprios objetos).
2 - Por que usar o R?
3 - Uma função no R
Antes de apresentarmos o R propriamente dito, podemos
antecipar que ele é composto de uma série de funções que estão
armazenadas em pacotes.
Uma função no R pode ser esboçada da seguinte
maneira.
- Os argumentos podem ser objetos (``dados’’, fórmulas, expressões, …).
- Alguns argumentos podem estar pré-definidos (podem ser modificados).
- Podem existir funções sem nenhum argumentos (todos pré-definidos).
Um exemplo simples, a função mean:
- Vamos considerar a função que calcula média (mean, no inglês):
mean(x, na.rm = FALSE) - A função possui dois argumentos:
xena.rm. xé um vetor numérico (valores) ena.rmé um operador lógico (desconsiderar os valores faltantes).na.rmé um argumento pré-definido.- Para executar a função, obrigatoriamente precisamos inserir o argumento x.
4 - Instalando o R e o RStudio?
Para instalar a última versão do R, siga os seguintes
passos:
- Vá no site https://cran.r-project.org;
- Faça download do arquivo;
- Clique em em executar (faça a instalação padrão).
Para instalar a última versão do RStudio, siga os seguintes passos:
- Vá no site https://www.rstudio.com/products/rstudio/download/;
- Faça download da versão free;
- Clique em executar (faça a instalação padrão).
5 - RStudio
É um ambiente de desenvolvimento integrado para o R. Inclui recursos que permite: aumentar a produtividade e é executado em todas as principais plataformas. Sua interface facilita o uso do R.
Funções dos principais painéis:
- Editor/Scripts: é onde escrevemos nossos códigos.
- Console: é onde rodamos os códigos e recebemos as saídas. O R vive aqui!
- Environment: painel com todos os objetos criados na sessão.
- History: painel com um histórico dos comandos rodados.
- Files: mostra os arquivos no diretório de trabalho. É possível navegar entre diretórios.
- Plots: painel onde os gráficos serão apresentados.
- Help: janela onde a documentação das funções serão apresentadas.
5.1 - Executando comandos no RStudio
- Insira no seu script os comandos acima.
- O # faz com que a linha seja entendida como um comentário.
- Para executar qualquer uma das linhas basta posicionar o cursor na mesma e clicar em Run (pode executar várias linhas selecionando todas).
5.2 - Salvando um script no RStudio
- Clique em File \(>\) clique em Save ou Save as.
6 - Pacotes
Imagine que você esteja interessado em fazer algum processamento de linguagem natural de textos coreanos, como realizar esta tarefa no R?
Muito provavelmente, os pacotes do R possuem (ou devem possuir com probabilidade tendendo à 1) as funções que vocês precisam!
Os pacotes do R são coleções de funções e conjuntos de dados desenvolvidos pela comunidade.
Eles aumentam o poder do R, melhorando as funcionalidades de base do R existentes ou adicionando novas.
6.1 - Como instalar um pacote
A forma de instalar dependerá de onde o pacote se encontra. Existem três maneiras principais de instalarmos pacotes no R. Em ordem de frequência, são:
- Via CRAN (Comprehensive R Archive Network):
install.packages("nome-do-pacote"). - Via Github:
devtools::install_github("nome-do-repo/nome-do-pacote"). - Via arquivo .zip/.tar.gz:
install.packages("C:/caminho/nome-do-pacote.zip", repos = NULL).
6.1.1 - Via CRAN
Instalem pacotes que não estão na sua biblioteca usando a função
install.packages("nome_do_pacote"). Por exemplo:
install.packages("maptools")6.1.2 - Via Github
Muitos desenvolvedores costumam disponibilizar a última versão de
seus pacotes no Github, incluindo pacotes que não estão no CRAN. Para
instalar um pacote do GITHUB é preciso ter o pacote
devtools. O comando é igualmente simples:
devtools::install_github("qspatialR/qspatial")observação - Quando usamos a sintaxe
PacoteA::funçãoZ estamos garantindo que a função
funçãoZ usada pertence necessariamente ao pacote
PacoteA.
Observação: pacote::função garante que a função
utilizada pertence ao pacote especificado.
Apenas será necessário o username e o nome do repositório (que geralmente tem o mesmo nome do pacote). No exemplo, o username foi qspatialR e o repositório foi qspatial.
Se você não é familiar com o github, não se preocupe! Os pacotes disponibilizados na plataforma geralmente têm um README cuja primeira instrução é sobre a instalação. Se não tiver, provavelmente este pacote não te merece! =)
6.1.3 - Via arquivo .zip/.tar.gz
Se você precisar instalar um pacote que está zipado no seu computador (ou em algum servidor), utilize o seguinte comando
install.packages("C:/caminho/para/o/arquivo/zipapo/nome-do-pacote.zip", repos = NULL)Ao realizarmos esse modus operandi, podemos acabar
precisando de uma ajuda. Felizmente, a comunidade R é bem
ativa, e existem muitas formas de obtermos a mesma.
7 - Pedindo Ajuda
Existem quatro principais fontes para se pedir ajuda:
- Help/documentação do R (comandos
help(nome_da_funcao)ou?nome_da_funcao); - Google;
- Stack Overflow;
- Amiguinho.
7.1 - Documentação do R
A documentação do R traz tudo o que nós precisamos saber para usarmos uma determinada função.
?mean
help(mean)7.2 - Google
A comunidade de usuários do R é grande e produtiva, gerando conteúdos e discussões constantes na rede. Pesquisas em inglês aumentam consideravelmente a chance de encontrarmos uma resposta, como acontece com outras linguagens. Outra dica que pode ser bastante útil é a inclusão de um ‘r’ na busca.
7.3 - Stack Overflow
O Stack Overflow e o Stack Overflow em Português são sites de Pergunta e Resposta amplamente utilizados por muitas linguagens de programação, incluindo o R.
Caso não encontre um problema (e a solução do mesmo) similar ao seu no site, o Stack Overflow lhe dará o espaço para criar sua própria pergunta.
8 - Encerrando uma sessão de trabalho no R
Para encerrar a sessão basta:
- Clicar em File \(>\) clicar em Quit Session.
- Se seus scripts já estiverem salvos, não salve o workspace.
9 - Criando e visualizando objetos no R
A seguir, vamos discutir a criação e manipulação de objetos básicos no R.
9.1 - Vetor
Conjunto de elementos de uma mesma natureza. Podem ser numéricos ou
não. Para criar um objeto, seja de que natureza for, ele precisa ser
nomeado. Os nomes dos objetos não podem começar com números, com
caracteres especiais, eles são aceitos ao longo do nome. O
R diferencia letras maiúsculas de minúsculas. Vamos criar
alguns exemplos de vetores abaixo.
#Criando o vetor com os nomes das cidades acompanhadas
cidade = c("Rio de Janeiro", "Niterói", "São Gonçalo", "Maricá", "Caxias", "Nilópolis", "Resende", "Macaé")
#Visualizando o vetor
cidade[1] "Rio de Janeiro" "Niterói" "São Gonçalo" "Maricá"
[5] "Caxias" "Nilópolis" "Resende" "Macaé"
#Criando o vetor número de roubos na 1a semana por cidade
roubos_1sem = c(20,30,40,23,22,19,32,42)
#Visualizando o vetor
roubos_1sem[1] 20 30 40 23 22 19 32 42
#Criando o vetor número de roubos na 2a semana por cidade
roubos_2sem = c(12,39,49,13,25,19,52,18)
#Visualizando o vetor
roubos_2sem[1] 12 39 49 13 25 19 52 18
#Checando a classe de um vetor
class(cidade)[1] "character"
class(roubos_2sem)[1] "numeric"
#Realizando uma operação entre um vetor e um escalar
roubos_2sem / 7[1] 1.714286 5.571429 7.000000 1.857143 3.571429 2.714286 7.428571 2.571429
#Realizando operações entre dois vetores
roubos_1sem + roubos_2sem[1] 32 69 89 36 47 38 84 60
#Acessando elemento(s) de um vetor
roubos_1sem[2][1] 30
roubos_1sem[-2][1] 20 40 23 22 19 32 42
roubos_1sem[c(1,3)][1] 20 40
#realizando operações com um vetor
max(roubos_1sem)[1] 42
min(roubos_1sem)[1] 19
which.max(roubos_1sem)[1] 8
which.min(roubos_1sem)[1] 6
length(roubos_1sem)[1] 8
sort(roubos_1sem)[1] 19 20 22 23 30 32 40 42
9.2 - Matriz
Matriz é um objeto \(r \times s\), isto é, possui \(r\) linhas e \(s\) colunas, na qual todos os elementos pertencentes ao objeto possuem uma mesma natureza.
#Criando um matriz com 3 linhas (nrow = 3) e 3 colunas (ncol = 3), sendo alimentada por coluna
A = matrix(data = c(1,3,4,2,3,4,6,3,9),
nrow = 3,
ncol= 3)
A [,1] [,2] [,3]
[1,] 1 2 6
[2,] 3 3 3
[3,] 4 4 9
#Criando um matriz com 3 linhas (nrow = 3) e 3 colunas (ncol = 3), sendo alimentada por linha (byrow = TRUE)
B = matrix(data = c(1,3,4,2,3,4,6,3,9),
nrow = 3,
ncol= 3,
byrow = TRUE)
B [,1] [,2] [,3]
[1,] 1 3 4
[2,] 2 3 4
[3,] 6 3 9
#Somando matrizes
A + B [,1] [,2] [,3]
[1,] 2 5 10
[2,] 5 6 7
[3,] 10 7 18
#Realizando uma operação entre um escalar e uma matriz
3 * A [,1] [,2] [,3]
[1,] 3 6 18
[2,] 9 9 9
[3,] 12 12 27
#Invertendo uma matriz
solve(A) [,1] [,2] [,3]
[1,] -1 -0.4000000 0.8
[2,] 1 1.0000000 -1.0
[3,] 0 -0.2666667 0.2
#Acessando elementos de uma matriz
A[,2][1] 2 3 4
#
A[1,][1] 1 2 6
#
A[1,2][1] 2
#Empilhando matrizes
rbind(A,B) [,1] [,2] [,3]
[1,] 1 2 6
[2,] 3 3 3
[3,] 4 4 9
[4,] 1 3 4
[5,] 2 3 4
[6,] 6 3 9
#
cbind(A,B) [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 6 1 3 4
[2,] 3 3 3 2 3 4
[3,] 4 4 9 6 3 9
9.3 - Array
Uma coleção de matrizes com elementos de mesma natureza.
#Criando um array com 2 matrizes com 4 colunas e 3 linhas
D = array(data = c(1,3,4,2,3,4,6,3,9,1,0,2,1,4,6,2,6,9,1,3,2,4,1,3),
dim = c(3,4,2))
#Visualizando D
D, , 1
[,1] [,2] [,3] [,4]
[1,] 1 2 6 1
[2,] 3 3 3 0
[3,] 4 4 9 2
, , 2
[,1] [,2] [,3] [,4]
[1,] 1 2 1 4
[2,] 4 6 3 1
[3,] 6 9 2 3
#Acessando a 1a linha de cada matriz que compõe o array
D[1,,] [,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 6 1
[4,] 1 4
#Acessando a 2a coluna de cada matriz que compõe o array
D[,2,] [,1] [,2]
[1,] 2 2
[2,] 3 6
[3,] 4 9
#Acessando a 2a matriz que compõe o array
D[,,2] [,1] [,2] [,3] [,4]
[1,] 1 2 1 4
[2,] 4 6 3 1
[3,] 6 9 2 3
#Acessando a 2a coluna da 2a matriz que compõe o array
D[,2,2][1] 2 6 9
9.4 - Lista
Generalizações de vetores, representa uma coleção de objetos.
#Criando uma lista com 3 objetos
x = list(v=1:5,
h="Z",
p=c("a", "b"))
#Visualizando a lista
x$v
[1] 1 2 3 4 5
$h
[1] "Z"
$p
[1] "a" "b"
#Acessando somente v na lista
x$v[1] 1 2 3 4 5
#Verificando o número de objetos na ista
length(x)[1] 3
9.5 - Tibble
São uma tomada moderna do data.frame (sempre prefiram este tipo de objeto ao data.frame). Em grande parte do curso, ele será o principal objeto de estudo.
#Ativando o pacote tibble
library(tibble)
#Criando um tibble chamado dados
dados = tibble(Mat = c(1010,1210,3410,2310,2110,6510,7610,1310,2210),
turno = c(1,2,2,1,2,1,1,2,2),
escolaridade=c(1,1,2,3,2,3,4,1,2),
Sexo=c("M","F","M","F","M","F","F","M","F"),
idade=c(40,50,20,60,40,18,70,57,37))
#Visualiasando dados
dados# A tibble: 9 × 5
Mat turno escolaridade Sexo idade
<dbl> <dbl> <dbl> <chr> <dbl>
1 1010 1 1 M 40
2 1210 2 1 F 50
3 3410 2 2 M 20
4 2310 1 3 F 60
5 2110 2 2 M 40
6 6510 1 3 F 18
7 7610 1 4 F 70
8 1310 2 1 M 57
9 2210 2 2 F 37
#Verificando a classe de dados
class(dados)[1] "tbl_df" "tbl" "data.frame"
#Acessando a variável idade de dados
dados$idade[1] 40 50 20 60 40 18 70 57 37
#Acrescentando variáveis em dados
dados$sozinho = c(0,1,1,1,0,0,0,1,1)
#Visualisando dados
dados# A tibble: 9 × 6
Mat turno escolaridade Sexo idade sozinho
<dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 1010 1 1 M 40 0
2 1210 2 1 F 50 1
3 3410 2 2 M 20 1
4 2310 1 3 F 60 1
5 2110 2 2 M 40 0
6 6510 1 3 F 18 0
7 7610 1 4 F 70 0
8 1310 2 1 M 57 1
9 2210 2 2 F 37 1
#Acessando os nomes das variáveis em dados
names(dados)[1] "Mat" "turno" "escolaridade" "Sexo" "idade"
[6] "sozinho"
10 - Classes dos objetos
A seguir apresentamos as classes mais comuns dos objetos no R e como modificá-las.
R tem 5 classes básicas:
- logical (ex.., TRUE, FALSE)
- integer (ex.,, 2L, as.integer(3))
- numeric (real or decimal) (ex., 2, 2.0, pi)
- complex (ex., 1 + 0i, 1 + 4i)
- character (ex., “a”, “swc”)
Quando trabalharemos com um objeto composto por elementos lógicos?
# Criando os vetores Idade e Nome e checando a classe do objeto Idade (os vetores foram criados na mesma ordem, a idade do Jony corresponde a 20 anos)
Idade = c(20,39,25,28,27,19,45,23,22)
Nome <- c("Jony", "Felipe", "Paulo", "Estevão", "Mayra","Helena","Priscila","Roberto","Daniel")
class(Idade)[1] "numeric"
class(Nome)[1] "character"
# Verificando quais componentes de Idade são maiores do que 25
Idade>25[1] FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
Expressões lógicas são implementadas com os operadores lógicos:
10.1 - Factor
O tipo de dados factor é usado para representar dados qualitativos. Por exemplo, a variável sexo:
Como transformar a variável sexo dentro da base em um factor?
Principais argumentos da função
factor:
- x - o vetor de dados;
- labels - um vetor com os rótulos das categorias respeitando a ordenação dos seus códigos;
- exclude - o valor a ser transformado em NA.
#Transformando a variável turno em um factor e indicando os rótulos de cada categoria
dados$turno = factor(x = dados$turno,
labels = c("Manhã","Tarde"))
#Visualizando dados
dados# A tibble: 9 × 6
Mat turno escolaridade Sexo idade sozinho
<dbl> <fct> <dbl> <chr> <dbl> <dbl>
1 1010 Manhã 1 M 40 0
2 1210 Tarde 1 F 50 1
3 3410 Tarde 2 M 20 1
4 2310 Manhã 3 F 60 1
5 2110 Tarde 2 M 40 0
6 6510 Manhã 3 F 18 0
7 7610 Manhã 4 F 70 0
8 1310 Tarde 1 M 57 1
9 2210 Tarde 2 F 37 1
#Visualizando a variável turno
dados$turno[1] Manhã Tarde Tarde Manhã Tarde Manhã Manhã Tarde Tarde
Levels: Manhã Tarde
Já para a variável escolaridade, o código 2 foi usado para Analfabeto, 3 foi usado para Fundamental, 4 para Médio e 5 para Superior.
#Transformando a variável escolaridade em um fator, indicando a ordem dos códigos e seus respectivos rótulos
dados$escolaridade = factor(x = dados$escolaridade,
levels=c(2,3,4,1),
labels=c("Analfabeto","Fundamental","Médio","Superior"))
#Visualizando as linhas iniciais da base
dados# A tibble: 9 × 6
Mat turno escolaridade Sexo idade sozinho
<dbl> <fct> <fct> <chr> <dbl> <dbl>
1 1010 Manhã Superior M 40 0
2 1210 Tarde Superior F 50 1
3 3410 Tarde Analfabeto M 20 1
4 2310 Manhã Fundamental F 60 1
5 2110 Tarde Analfabeto M 40 0
6 6510 Manhã Fundamental F 18 0
7 7610 Manhã Médio F 70 0
8 1310 Tarde Superior M 57 1
9 2210 Tarde Analfabeto F 37 1
#Visualizando a variável escolaridade
dados$escolaridade[1] Superior Superior Analfabeto Fundamental Analfabeto Fundamental
[7] Médio Superior Analfabeto
Levels: Analfabeto Fundamental Médio Superior
11 - Valores especiais
Existem valores reservados para representar dados faltantes, infinitos, e indefinições matemáticas.
NA (Not Available) significa dado faltante/indisponível. O NA tem uma classe, ou seja, podemos ter NA numeric, NA character etc.
NaN (Not a Number) representa indefinições matemáticas, como 0/0 e log(-1). Um NaN é um NA, mas a recíproca não é verdadeira.
Inf (Infinito) é um número muito grande ou o limite matemático, por exemplo, 1/0 e 10^310. Aceita sinal negativo -Inf.
NULL representa a ausência de informação. Conceitualmente, a diferença entre NA e NULL é sutil, mas, no R, o NA está mais alinhado com os conceitos de estatística (ou como gostaríamos que os dados faltantes se comportassem em análise de dados) e o NULL está em sintonia com comportamentos de lógica de programação.
Use as funções is.na(), is.nan(), is.infinite() e is.null() para testar se um objeto é um desses valores.