alt text

GET00100 - Estatística I

Jony Arrais Pinto Junior

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: x e na.rm.
  • x é um vetor numérico (valores) e na.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:

Para instalar a última versão do RStudio, siga os seguintes passos:

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.