Curso R para Data Science

Introdução

O R é uma linguagem e um ambiente para computação estatística no formato de projeto de software livre de código aberto (open source), ou seja, pode ser utilizado sem custos de licença. Pelo fato de ser um software livre e com o esforço colaborativo mundial de vários pesquisadores o R é uma plataforma multidisciplinar voltado para análises de dados e referência nos meios científicos.

library(highcharter)
data(GNI2014, package = "treemap")

hcmap(
     "custom/world-robinson-lowres",
     data = GNI2014,
     name = "Gross national income per capita",
     value = "GNI",
     borderWidth = 0,
     nullColor = "#d3d3d3",
     joinBy = c("iso-a3", "iso3")
 ) |>
     hc_colorAxis(
         stops = color_stops(colors = viridisLite::inferno(10, begin = 0.1)),
         type = "logarithmic"
     )

Renda nacional bruta (per capita) em dólares - 2014

Páginas interessantes

cheatsheets do Rstudio

Galeria de gráficos

rmarkdown

quarto

leaflet

highcharter

plotly

DT - Data Frame

shiny

r-bloggers

Agenda

  • Introdução: Páginas interessantes, Agenda

  • O software o R: Instalando o software R, instalando o RStudio e interface do RStudio

  • Rbase: variáveis, sintaxe, comandos e como obter ajuda.

  • Pacote tidyverse: Leitura e Manipulação de Dados

  • GGPLOT: Gráficos no Software R

  • Introdução a série temporal

  • Introdução ao Rmarkadown

  • Exemplo prático

O software o R

site do R

O R é uma linguagem orientada a objetos criada em 1996 por Ross Ihaka e Robert Gentleman que aliada a um ambiente integrado permite a manipulação de dados, realização de cálculos e geração de gráficos.

A página central do R é: <http://www.r-project.org/>

Instalação

Instalando o software R

R pode ser obtido gratuitamente em <http://cran.r-project.org>, onde é apresentado em versões de acordo com o sistema operacional

Para fazer o download, você deve usar um “Cran Mirror”, clicando em CRAN na margem esquerda.

No Brasil, temos: (escolha um destes)

<http://cran-r.c3sl.ufpr.br/> Universidade Federal do Paraná

<http://cran.fiocruz.br/> Oswaldo Cruz Foundation, Rio de Janeiro

<http://www.vps.fmvz.usp.br/CRAN/> University of Sao Paulo, Sao Paulo

<http://brieger.esalq.usp.br/CRAN/> University of Sao Paulo, Piracicaba

No Cran escolhido, você escolhe o sistema operacional de sua máquina (p. ex., Windows) e faça o download do programa básico: “Base”.

Observe que na página do Download tem algumas informações úteis. Para instalar o programa básico, basta executar o arquivo R-(versão) - (sistema operacional).exe que você baixou.

Instalando o RStudio

- Após a instalação do R , faça a instalação do Rstudio, que está disponível em <http://rstudio.org/>.

- O download do RStudio está disponível para vários sistemas operacionais

Interface do RStudio

  • A tela principal do RStudio, diferentemente do R, é disposta em 4 janelas. A apresentação padrão é a da Figura 1. No canto superior a esquerda é apresentada a janela Source, na qual são disponibilizados os scripts (códigos de programação previamente redigidos e salvos em arquivo com extensão .R), arquivos de texto, documentos Sweave, documentação do R e documentos TeX.

  • Na janela superior a direita, a primeira aba é disponibilizada para gerenciar diferentes áreas de trabalho. Já na segunda aba desta janela fica registrado o histórico de todos os scripts, funções e ações executadas.

  • Na parte inferior a esquerda, localiza-se a janela do Console, a mesma janela padrão disponibilizada no R. E finalmente, na janela inferior a direita, são agrupadas em uma janela outras 4 abas: a primeira delas é um gerenciador de arquivos (aba File), na segunda são exibidos os gráficos gerados pelo RStudio (aba Plots). Na terceira aba são apresentados os pacotes já instalados (aba Packages). E finalmente, a quarta aba trata-se da Ajuda (aba Help) do R/RStudio.

  • Na janela Source ao editar o script é possível comentar ou não automaticamente (sem necessidade de digitação) determinada parte do código utilizando a opção Edit/Comment/Uncomment Lines, mantendo o cursor na linha a ser executada ou selecionar o conjunto de linhas desejado. Nesta tela, também é possível indentar automaticamente comandos, uma prática comum na organização de scripts na área da computação.

  • Os scripts podem ser executados por meio do botão Run, não havendo mais necessidade de clicar com o botão direito do mouse linha a linha do script. Também é possível executar várias linhas de comando, selecionando as linhas desejadas e executando-as por meio do botão Run ou pelas teclas Ctrl+Enter.

  • Tal como acontece com o Console padrão do R, o Console do RStudio permite executar comandos usados anteriormente por meio das teclas Up (↑) e Down (↓). Além disso, apresenta uma lista de comandos usados recentemente, por meio das teclas Ctrl+Up (↑) ou Crtl+Down (↓).

  • Na aba Workspace da tela superior a direita do RStudio é apresentada a área de trabalho onde seus dados são apresentados em forma de conjunto de dados (vetores, matrizes, etc.) disponíveis na área de trabalho e variáveis, que podem ser alterados por meio de duplo clique. Nesta aba também é possível carregar um conjunto de dados e carregar uma nova área de trabalho, alternando-se facilmente entre elas.

  • Na aba Plots da tela inferior a direita do RStudio onde são apresentados os gráficos gerados, é possível salvar as imagens em formado PDF e figuras de diferentes formatos (JPG, BMP, TIFF, PNG, metalife,etc.)]

Rbase: variáveis, sintaxe, comandos e como obter ajuda

As linhas iniciadas pelo símbolo # são consideradas comentários.

Os comandos são separados por ponto e vírgula (“;”) ou são inseridos em nova linha; podem agrupar-se dentro de chaves (“{…}”); há distinção entre letras maiúsculas e minúsculas; se ao terminar a linha, o comando não está totalmente completo, irá aparecer o símbolo de “+” na próxima linha para continuação, usando o Console.

Operações Matemáticas:

Simbolo Operações
+ Soma
- Subtração
* Multiplicação
/ Divisão
^ ou ** Potência

Operadores relacionais e operadores lógicos

Simbolo Descrição
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
== Igual (comparação)
!= Diferente
& E
| Ou
! Não
TRUE ou 1 Valor booleano verdadeiro (1)
FALSE ou 0 Valor booleano falso (0)

Comandos úteis e importantes.

Função Descrição
setwd(” “) muda o diretório do trabalho
getwd() mostra o diretório do trabalho
ls() lista o nome dos objetos criados na sessão atual
dir() lista todos os arquivos na pasta de trabalho atual
search() lista todos os pacotes carregados
rm() remove o objeto entre parênteses
rm(list=ls(all=TRUE)) remone todos os objetos, limpando a memória
attach() reconhece os objetos dentro de um data frame
detach() função que desfaz o attach
help.start() página de ajuda do R
help() ajuda de comando específico
help.search() ajuda encontrar função
apropos() encontra função que contenha determinada palavra
example() mostra exemplo de como utilizar função

Ajuda no R

# help.start() #ajuda geral do R

help("*")

help(mean)

help.search("mean") # caso não lembre bem o nome da função


?mean #mesmo que help
??mean #mesmo que help.search

apropos("help") #funções contendo "help"
[1] "help"         "help.request" "help.search"  "help.start"  
example(mean)# exemplo de uso

mean> x <- c(0:10, 50)

mean> xm <- mean(x)

mean> c(xm, mean(x, trim = 0.10))
[1] 8.75 5.50

Funções importantes

Função Descrição
sum(x) Soma todos os elementos do vetor x
sqrt(x) Raiz quadrada de x
length(x) Tamanho do vetor x
log(x) Log natural de x
log(x,b) Log de x com base b
exp(x) Exponencial elevado a x
sin(x) Seno de x
tan(x) tangente de x
mean(x) Média de x
var(x,y) ou cov(x,y) Covariância entre x e y, ou entre as colunas de x e de y se são matrizes ou data.frame
cor(x,y) Correlação linear entre x e y, ou matriz de correlação se são matrizes ou data.frames
max(x) seleciona o maior elemento do vetor x
min(x) seleciona o menor elemento do vetor x
sample() funçã para gerar amostra

Tipo de dados

Tipo Exemplo
Numérico (numeric) 3, 7.5, 10.01
Inteiro (integer) 3L (a letra L faz o R considerar o número como inteiro)
Caractere (character) “a”,“nome”
Lógico (logical) TRUE, FALSA
Complexo (complex) 1+4i

Tipos de estruturas de dados

  • Vetores: conjunto de elementos de uma mesma natureza.

  • Matrizes: conjunto de elementos de uma mesma natureza organizado em linhas e colunas.

  • Array: generaliza a ideia de matriz. Enquanto em uma matriz os elementos são organizados em duas dimensões (linhas e colunas), em um array os elementos podem ser organizados em um número arbitrário de dimensões.

  • Data frames: similar como matrizes, porém diferentes colunas podem possuir elementos de natureza diferentes.

  • Listas: generalizações de vetores, representa uma coleção de objetos.

Vetor amostra aleatória

# amostra

sample(10)
 [1]  2 10  6  3  5  1  4  7  9  8
sample(10)
 [1]  6  3  8  2  7  1  5  9 10  4
sample(10)
 [1]  1  3  4  9  7  6 10  2  8  5
# gera um número pseudo aleatório utilizando sementes

set.seed(2)
sample(10)
 [1]  5  6  9  1 10  7  4  8  3  2
set.seed(2)
sample(10)
 [1]  5  6  9  1 10  7  4  8  3  2
set.seed(2)
sample(10)
 [1]  5  6  9  1 10  7  4  8  3  2
# 10 números dentro do intervalo 1:40
sample(1:40,10)
 [1] 11  1  3 16 32  8 33 37 13 14
# 5 números dentro dos fornecidos
sample(c(1,6,4,33,86,2,33),5)
[1]  2  4  1 33 86
#alfabeto minúsculo

sample(letters,5) # 5 letras/elementos 
[1] "f" "b" "w" "r" "c"
sample(1:10,10)
 [1]  4  3  1  7  8  5  9  6  2 10
sample(1:10,10, replace = TRUE)
 [1] 4 5 2 5 6 7 2 6 4 4
#criando repetições
# cada um 10x
rep (c("a","b"),each=10)
 [1] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "b" "b" "b" "b" "b" "b" "b" "b" "b"
[20] "b"
# grupo 10x
rep (c("a","b"),times=10) 
 [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b" "a" "b" "a" "b" "a" "b" "a" "b" "a"
[20] "b"
#criando dados de distribuição normal
set.seed(22)
rnorm(10)
 [1] -0.51213909  2.48518368  1.00782615  0.29281457 -0.20895936  1.85809239
 [7] -0.06602641 -0.16276495 -0.19986068  0.30056173
rnorm(10,mean=3,sd=1)
 [1] 2.236093 3.081962 3.743028 2.915978 2.207105 2.077846 3.861562 5.002942
 [9] 3.936551 1.384265
seq(1,10)
 [1]  1  2  3  4  5  6  7  8  9 10
#sequência de 1 a 10, de 2 em 2
seq(1,10,2) 
[1] 1 3 5 7 9
#sequência de 200 a 300, de 15 em 15
seq(200,300,15)
[1] 200 215 230 245 260 275 290

Criando Matrix

matrix(data = 1:6, nrow = 2, ncol = 3, byrow = FALSE, dimnames = NULL)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
matrix(1:6,2,3, byrow = TRUE, dimnames = list(c("L1","L2"),c("C1","C2","C3")))
   C1 C2 C3
L1  1  2  3
L2  4  5  6

Juntar vetores e matrizes

rbind(),cbind()

#cbind()
A<-c(1,2,5,8,2)
A
[1] 1 2 5 8 2
B<-c(4,12,8,11,3)
B
[1]  4 12  8 11  3
AB<-cbind(A,B)

AB
     A  B
[1,] 1  4
[2,] 2 12
[3,] 5  8
[4,] 8 11
[5,] 2  3
#rbind()

BA<-rbind(B,A)
BA
  [,1] [,2] [,3] [,4] [,5]
B    4   12    8   11    3
A    1    2    5    8    2

Criando Array

array(1:24, c(2,4,3))
, , 1

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

, , 2

     [,1] [,2] [,3] [,4]
[1,]    9   11   13   15
[2,]   10   12   14   16

, , 3

     [,1] [,2] [,3] [,4]
[1,]   17   19   21   23
[2,]   18   20   22   24

Criando Data Frame

dados = data.frame(c(20,23,30),c("A","B","A"))
names(dados)=c("idade","grupo")

dados
  idade grupo
1    20     A
2    23     B
3    30     A
dados2 = data.frame(idade=c(20,23,30),grupo=c("A","B","A"))
dados2
  idade grupo
1    20     A
2    23     B
3    30     A

Criando Lista

lista = list(x = sample(1:5, 20, rep=T),y = rep(letters[1:5], 3), z = sample(c(0,1,2), 20, rep=T))

# acessando os elementos da lista
lista[["y"]]
 [1] "a" "b" "c" "d" "e" "a" "b" "c" "d" "e" "a" "b" "c" "d" "e"
lista[[1]]
 [1] 3 1 3 4 1 2 1 5 5 2 5 2 5 3 2 5 4 3 3 2
lista$x
 [1] 3 1 3 4 1 2 1 5 5 2 5 2 5 3 2 5 4 3 3 2

Funções importantes

apply

m1 <- matrix(1:10,nrow=5, ncol=6)
m1
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    6    1    6    1    6
[2,]    2    7    2    7    2    7
[3,]    3    8    3    8    3    8
[4,]    4    9    4    9    4    9
[5,]    5   10    5   10    5   10
soma_m1 <- apply(m1, 2, sum)
soma_m1
[1] 15 40 15 40 15 40
soma_m2 <- apply(m1, 1, sum)
soma_m2
[1] 21 27 33 39 45

Bases de dados do R (data set)

data()

dados<-iris

head(dados)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
#View(iris)

# Resumo dos dados
summary(dados)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  
                
                
                
# visualisando o tipo de dados
str(dados)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# Acessando um elemento
dados[2,3]
[1] 1.4
# Acessando uma linha
dados[2,]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2          4.9           3          1.4         0.2  setosa
# Acessando uma coluna
dados[,3]
  [1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 1.4 1.1 1.2 1.5 1.3 1.4
 [19] 1.7 1.5 1.7 1.5 1.0 1.7 1.9 1.6 1.6 1.5 1.4 1.6 1.6 1.5 1.5 1.4 1.5 1.2
 [37] 1.3 1.4 1.3 1.5 1.3 1.3 1.3 1.6 1.9 1.4 1.6 1.4 1.5 1.4 4.7 4.5 4.9 4.0
 [55] 4.6 4.5 4.7 3.3 4.6 3.9 3.5 4.2 4.0 4.7 3.6 4.4 4.5 4.1 4.5 3.9 4.8 4.0
 [73] 4.9 4.7 4.3 4.4 4.8 5.0 4.5 3.5 3.8 3.7 3.9 5.1 4.5 4.5 4.7 4.4 4.1 4.0
 [91] 4.4 4.6 4.0 3.3 4.2 4.2 4.2 4.3 3.0 4.1 6.0 5.1 5.9 5.6 5.8 6.6 4.5 6.3
[109] 5.8 6.1 5.1 5.3 5.5 5.0 5.1 5.3 5.5 6.7 6.9 5.0 5.7 4.9 6.7 4.9 5.7 6.0
[127] 4.8 4.9 5.6 5.8 6.1 6.4 5.6 5.1 5.6 6.1 5.6 5.5 4.8 5.4 5.6 5.1 5.1 5.9
[145] 5.7 5.2 5.0 5.2 5.4 5.1
# Acessando uma coluna pelo nome
dados$Sepal.Length
  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
 [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
 [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
 [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
 [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
 [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
[109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
[127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
[145] 6.7 6.7 6.3 6.5 6.2 5.9
# Acessando uma coluna pelo nome
dados[,"Sepal.Length"]
  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
 [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
 [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
 [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
 [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
 [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
[109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
[127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
[145] 6.7 6.7 6.3 6.5 6.2 5.9

Filtros

# apenas linhas da Species == setosa
setosa<-dados[dados$Species=="setosa",]

# apenas linhas valor de sepal length < 5
menor5<-dados[dados$Sepal.Length<5,]

Filtros utilizando subset

# Filtros usando o comando subset

head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
dados<-subset(airquality, Temp > 80)
head(dados)
   Ozone Solar.R Wind Temp Month Day
29    45     252 14.9   81     5  29
35    NA     186  9.2   84     6   4
36    NA     220  8.6   85     6   5
38    29     127  9.7   82     6   7
39    NA     273  6.9   87     6   8
40    71     291 13.8   90     6   9
dados<-subset(airquality, Temp > 80, select = c(Ozone, Temp))
head(dados)
   Ozone Temp
29    45   81
35    NA   84
36    NA   85
38    29   82
39    NA   87
40    71   90
dados<-subset(airquality, Day == 1, select = -Temp)
head(dados)
    Ozone Solar.R Wind Month Day
1      41     190  7.4     5   1
32     NA     286  8.6     6   1
62    135     269  4.1     7   1
93     39      83  6.9     8   1
124    96     167  6.9     9   1
dados<-subset(airquality, select = Ozone:Wind)
head(dados)
  Ozone Solar.R Wind
1    41     190  7.4
2    36     118  8.0
3    12     149 12.6
4    18     313 11.5
5    NA      NA 14.3
6    28      NA 14.9

tapply

dados<-iris

tapply(dados$Sepal.Width, dados$Species, median)
    setosa versicolor  virginica 
       3.4        2.8        3.0 

aggregate

# calcula a média por species
grupo_media <- aggregate(Sepal.Width ~ Species, data = dados, mean)
grupo_media
     Species Sepal.Width
1     setosa       3.428
2 versicolor       2.770
3  virginica       2.974
# exemplo com outro conjunto de dados
dados<-CO2

head(dados)
  Plant   Type  Treatment conc uptake
1   Qn1 Quebec nonchilled   95   16.0
2   Qn1 Quebec nonchilled  175   30.4
3   Qn1 Quebec nonchilled  250   34.8
4   Qn1 Quebec nonchilled  350   37.2
5   Qn1 Quebec nonchilled  500   35.3
6   Qn1 Quebec nonchilled  675   39.2
grupo_media <- aggregate(uptake ~ Type, data = dados, mean)
grupo_media
         Type   uptake
1      Quebec 33.54286
2 Mississippi 20.88333
# calcula a média por Type e Treatment
grupo_media <- aggregate(uptake ~ Type+Treatment, data = dados, mean)
grupo_media
         Type  Treatment   uptake
1      Quebec nonchilled 35.33333
2 Mississippi nonchilled 25.95238
3      Quebec    chilled 31.75238
4 Mississippi    chilled 15.81429

Escrevendo e lendo dados

Ler e escrever um arquivo de texto delimitado

# write.table(df, 'file.txt')

write.table(iris, 'df_iris.txt')

# df <- read.table('file.txt')

df <- read.table('df_iris.txt')

Ler e escrever um arquivo com separações por vírgula (CSV).

#write.csv(df, 'file.csv')

write.csv(iris, 'df_iris.csv')

#df <- read.csv('file.csv')

df <- read.csv('df_iris.csv')

read.csv2 faz leitura de arquivos separados por ;

Ler e escrever um arquivo tipo R data (especial do R)

# save(df, file = 'file.Rdata')

save(iris, file = 'df_iris.Rdata')

# load('file.RData')

load('df_iris.Rdata')

Pacote haven - Salvando e abrindo arquivo no formato do SPSS e do STATA

SPSS

library(haven)

write_sav(iris,"df_iris.sav")

iris_SPSS<-read_sav("df_iris.sav")

STATA

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
write_dta(mtcars,"df_mtcars.dta")

mtcars_STATA<-read_dta("df_mtcars.dta")

# Ou
# mtcars_STATA<-read_stata("df_mtcars.dta")

Existem outros pacotes para abrir arquivos de diferentes software, inclusive pacotes especificos para abrir formato excel, spss, stata, SAS e etc (readxl, forign).

Exercicio

Criar uma data frame simulando uma base de dados contendo as colunas sexo, altura e idade. Onde, sexo é uma coluna de M e F alternados, altura é uma variável normal com média 1.6 e desvio padrão 0,2 e idade é um valor que varia de 15 a 25 anos. Salvar no formato csv

# Resposta
sexo<-rep(c("M","F"),5)
altura<-rnorm(10,1.6,.2)
idade<-sample(15:25,10)

dados<-data.frame(sexo,altura,idade)

write.csv(dados,"dados_exercicio.csv")

Pacote tidyverse

O tidyverse é uma coleção de pacotes R projetados para ciência de dados. Todos os pacotes compartilham uma filosofia de design, gramática e estruturas de dados semelhantes.

https://www.tidyverse.org/

Instalando o tidyverse e outros pacotes

#instalar

#install.packages("tidyverse")

#carregar pacotes

library(tidyverse)
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
✔ ggplot2 3.3.6     ✔ purrr   0.3.4
✔ tibble  3.1.7     ✔ dplyr   1.0.9
✔ tidyr   1.2.0     ✔ stringr 1.4.0
✔ readr   2.1.2     ✔ forcats 0.5.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
#require(tidyverse)

tibble

Formato de data frame do tidyverse é o tibble

#iris

dados<-as_tibble(iris)
dados2<-iris

# repare na diferença em relação as tabelas
head(dados)
# A tibble: 6 × 5
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
         <dbl>       <dbl>        <dbl>       <dbl> <fct>  
1          5.1         3.5          1.4         0.2 setosa 
2          4.9         3            1.4         0.2 setosa 
3          4.7         3.2          1.3         0.2 setosa 
4          4.6         3.1          1.5         0.2 setosa 
5          5           3.6          1.4         0.2 setosa 
6          5.4         3.9          1.7         0.4 setosa 
head(dados2)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
# write_csv(dados,"dados.csv")

# dados3<-read_csv("dados.csv")
dados<- as_tibble(iris)

dplyr

#select
#Seleciona/renomeia variáveis por nome e posição
?select
help(select)
colnames(dados)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
names(dados)<-c("teste1","teste2","teste3","teste4","teste5")

head(dados)
# A tibble: 6 × 5
  teste1 teste2 teste3 teste4 teste5
   <dbl>  <dbl>  <dbl>  <dbl> <fct> 
1    5.1    3.5    1.4    0.2 setosa
2    4.9    3      1.4    0.2 setosa
3    4.7    3.2    1.3    0.2 setosa
4    4.6    3.1    1.5    0.2 setosa
5    5      3.6    1.4    0.2 setosa
6    5.4    3.9    1.7    0.4 setosa
dados<-as_tibble(iris) # voltando dados originais
#selecionando a primeira variável
select(dados, 1)
# A tibble: 150 × 1
   Sepal.Length
          <dbl>
 1          5.1
 2          4.9
 3          4.7
 4          4.6
 5          5  
 6          5.4
 7          4.6
 8          5  
 9          4.4
10          4.9
# … with 140 more rows
select(dados, Sepal.Length)
# A tibble: 150 × 1
   Sepal.Length
          <dbl>
 1          5.1
 2          4.9
 3          4.7
 4          4.6
 5          5  
 6          5.4
 7          4.6
 8          5  
 9          4.4
10          4.9
# … with 140 more rows
#Selecionando as duas primeiras variáveis
select(dados, 1:2)
# A tibble: 150 × 2
   Sepal.Length Sepal.Width
          <dbl>       <dbl>
 1          5.1         3.5
 2          4.9         3  
 3          4.7         3.2
 4          4.6         3.1
 5          5           3.6
 6          5.4         3.9
 7          4.6         3.4
 8          5           3.4
 9          4.4         2.9
10          4.9         3.1
# … with 140 more rows
select(dados, Sepal.Length,Sepal.Width)
# A tibble: 150 × 2
   Sepal.Length Sepal.Width
          <dbl>       <dbl>
 1          5.1         3.5
 2          4.9         3  
 3          4.7         3.2
 4          4.6         3.1
 5          5           3.6
 6          5.4         3.9
 7          4.6         3.4
 8          5           3.4
 9          4.4         2.9
10          4.9         3.1
# … with 140 more rows
#Selecionando as três primeiras variáveis
select(dados, 1:3)
# A tibble: 150 × 3
   Sepal.Length Sepal.Width Petal.Length
          <dbl>       <dbl>        <dbl>
 1          5.1         3.5          1.4
 2          4.9         3            1.4
 3          4.7         3.2          1.3
 4          4.6         3.1          1.5
 5          5           3.6          1.4
 6          5.4         3.9          1.7
 7          4.6         3.4          1.4
 8          5           3.4          1.5
 9          4.4         2.9          1.4
10          4.9         3.1          1.5
# … with 140 more rows
select(dados, Sepal.Length,Sepal.Width,Petal.Length)
# A tibble: 150 × 3
   Sepal.Length Sepal.Width Petal.Length
          <dbl>       <dbl>        <dbl>
 1          5.1         3.5          1.4
 2          4.9         3            1.4
 3          4.7         3.2          1.3
 4          4.6         3.1          1.5
 5          5           3.6          1.4
 6          5.4         3.9          1.7
 7          4.6         3.4          1.4
 8          5           3.4          1.5
 9          4.4         2.9          1.4
10          4.9         3.1          1.5
# … with 140 more rows
select(dados, Sepal.Length:Petal.Length)
# A tibble: 150 × 3
   Sepal.Length Sepal.Width Petal.Length
          <dbl>       <dbl>        <dbl>
 1          5.1         3.5          1.4
 2          4.9         3            1.4
 3          4.7         3.2          1.3
 4          4.6         3.1          1.5
 5          5           3.6          1.4
 6          5.4         3.9          1.7
 7          4.6         3.4          1.4
 8          5           3.4          1.5
 9          4.4         2.9          1.4
10          4.9         3.1          1.5
# … with 140 more rows
#Excluindo colunas
select(dados, -1)
# A tibble: 150 × 4
   Sepal.Width Petal.Length Petal.Width Species
         <dbl>        <dbl>       <dbl> <fct>  
 1         3.5          1.4         0.2 setosa 
 2         3            1.4         0.2 setosa 
 3         3.2          1.3         0.2 setosa 
 4         3.1          1.5         0.2 setosa 
 5         3.6          1.4         0.2 setosa 
 6         3.9          1.7         0.4 setosa 
 7         3.4          1.4         0.3 setosa 
 8         3.4          1.5         0.2 setosa 
 9         2.9          1.4         0.2 setosa 
10         3.1          1.5         0.1 setosa 
# … with 140 more rows
select(dados, -Sepal.Length)
# A tibble: 150 × 4
   Sepal.Width Petal.Length Petal.Width Species
         <dbl>        <dbl>       <dbl> <fct>  
 1         3.5          1.4         0.2 setosa 
 2         3            1.4         0.2 setosa 
 3         3.2          1.3         0.2 setosa 
 4         3.1          1.5         0.2 setosa 
 5         3.6          1.4         0.2 setosa 
 6         3.9          1.7         0.4 setosa 
 7         3.4          1.4         0.3 setosa 
 8         3.4          1.5         0.2 setosa 
 9         2.9          1.4         0.2 setosa 
10         3.1          1.5         0.1 setosa 
# … with 140 more rows
select(dados, -(4:5))
# A tibble: 150 × 3
   Sepal.Length Sepal.Width Petal.Length
          <dbl>       <dbl>        <dbl>
 1          5.1         3.5          1.4
 2          4.9         3            1.4
 3          4.7         3.2          1.3
 4          4.6         3.1          1.5
 5          5           3.6          1.4
 6          5.4         3.9          1.7
 7          4.6         3.4          1.4
 8          5           3.4          1.5
 9          4.4         2.9          1.4
10          4.9         3.1          1.5
# … with 140 more rows
#Outras formas de seleção

select(dados, starts_with("S")) # começa com
# A tibble: 150 × 3
   Sepal.Length Sepal.Width Species
          <dbl>       <dbl> <fct>  
 1          5.1         3.5 setosa 
 2          4.9         3   setosa 
 3          4.7         3.2 setosa 
 4          4.6         3.1 setosa 
 5          5           3.6 setosa 
 6          5.4         3.9 setosa 
 7          4.6         3.4 setosa 
 8          5           3.4 setosa 
 9          4.4         2.9 setosa 
10          4.9         3.1 setosa 
# … with 140 more rows
select(dados, ends_with("Width"))# termina com
# A tibble: 150 × 2
   Sepal.Width Petal.Width
         <dbl>       <dbl>
 1         3.5         0.2
 2         3           0.2
 3         3.2         0.2
 4         3.1         0.2
 5         3.6         0.2
 6         3.9         0.4
 7         3.4         0.3
 8         3.4         0.2
 9         2.9         0.2
10         3.1         0.1
# … with 140 more rows
select(dados, contains("tal"))# contém "
# A tibble: 150 × 2
   Petal.Length Petal.Width
          <dbl>       <dbl>
 1          1.4         0.2
 2          1.4         0.2
 3          1.3         0.2
 4          1.5         0.2
 5          1.4         0.2
 6          1.7         0.4
 7          1.4         0.3
 8          1.5         0.2
 9          1.4         0.2
10          1.5         0.1
# … with 140 more rows
#Renomeando - mantém apenas as variáveis selecionadas

select(dados, comprimento_petala = Petal.Length)
# A tibble: 150 × 1
   comprimento_petala
                <dbl>
 1                1.4
 2                1.4
 3                1.3
 4                1.5
 5                1.4
 6                1.7
 7                1.4
 8                1.5
 9                1.4
10                1.5
# … with 140 more rows
#filter
#filtra linhas de acordo com condições estabelecidas
#Petal width menor que 1
filter(dados,Petal.Width<1)
# A tibble: 50 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# … with 40 more rows
#Petal Species igual a virginica
filter(dados,Species == "virginica")
# A tibble: 50 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species  
          <dbl>       <dbl>        <dbl>       <dbl> <fct>    
 1          6.3         3.3          6           2.5 virginica
 2          5.8         2.7          5.1         1.9 virginica
 3          7.1         3            5.9         2.1 virginica
 4          6.3         2.9          5.6         1.8 virginica
 5          6.5         3            5.8         2.2 virginica
 6          7.6         3            6.6         2.1 virginica
 7          4.9         2.5          4.5         1.7 virginica
 8          7.3         2.9          6.3         1.8 virginica
 9          6.7         2.5          5.8         1.8 virginica
10          7.2         3.6          6.1         2.5 virginica
# … with 40 more rows
# menor que 2 E Species "virginica"
filter(dados,Petal.Width<2 & Species == "virginica") 
# A tibble: 21 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species  
          <dbl>       <dbl>        <dbl>       <dbl> <fct>    
 1          5.8         2.7          5.1         1.9 virginica
 2          6.3         2.9          5.6         1.8 virginica
 3          4.9         2.5          4.5         1.7 virginica
 4          7.3         2.9          6.3         1.8 virginica
 5          6.7         2.5          5.8         1.8 virginica
 6          6.4         2.7          5.3         1.9 virginica
 7          6.5         3            5.5         1.8 virginica
 8          6           2.2          5           1.5 virginica
 9          6.3         2.7          4.9         1.8 virginica
10          7.2         3.2          6           1.8 virginica
# … with 11 more rows
#arrange
#organiza linhas por variáveis
arrange(dados,Petal.Width) # crescente
# A tibble: 150 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          4.9         3.1          1.5         0.1 setosa 
 2          4.8         3            1.4         0.1 setosa 
 3          4.3         3            1.1         0.1 setosa 
 4          5.2         4.1          1.5         0.1 setosa 
 5          4.9         3.6          1.4         0.1 setosa 
 6          5.1         3.5          1.4         0.2 setosa 
 7          4.9         3            1.4         0.2 setosa 
 8          4.7         3.2          1.3         0.2 setosa 
 9          4.6         3.1          1.5         0.2 setosa 
10          5           3.6          1.4         0.2 setosa 
# … with 140 more rows
arrange(dados,desc(Petal.Width)) # decrescente
# A tibble: 150 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species  
          <dbl>       <dbl>        <dbl>       <dbl> <fct>    
 1          6.3         3.3          6           2.5 virginica
 2          7.2         3.6          6.1         2.5 virginica
 3          6.7         3.3          5.7         2.5 virginica
 4          5.8         2.8          5.1         2.4 virginica
 5          6.3         3.4          5.6         2.4 virginica
 6          6.7         3.1          5.6         2.4 virginica
 7          6.4         3.2          5.3         2.3 virginica
 8          7.7         2.6          6.9         2.3 virginica
 9          6.9         3.2          5.7         2.3 virginica
10          7.7         3            6.1         2.3 virginica
# … with 140 more rows
#mutate
#cria novas variáveis
mutate(dados, sepal_mul = Sepal.Length * Sepal.Width)
# A tibble: 150 × 6
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species sepal_mul
          <dbl>       <dbl>        <dbl>       <dbl> <fct>       <dbl>
 1          5.1         3.5          1.4         0.2 setosa       17.8
 2          4.9         3            1.4         0.2 setosa       14.7
 3          4.7         3.2          1.3         0.2 setosa       15.0
 4          4.6         3.1          1.5         0.2 setosa       14.3
 5          5           3.6          1.4         0.2 setosa       18  
 6          5.4         3.9          1.7         0.4 setosa       21.1
 7          4.6         3.4          1.4         0.3 setosa       15.6
 8          5           3.4          1.5         0.2 setosa       17  
 9          4.4         2.9          1.4         0.2 setosa       12.8
10          4.9         3.1          1.5         0.1 setosa       15.2
# … with 140 more rows
mutate(dados, sepal_Soma = Sepal.Length +20)
# A tibble: 150 × 6
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species sepal_Soma
          <dbl>       <dbl>        <dbl>       <dbl> <fct>        <dbl>
 1          5.1         3.5          1.4         0.2 setosa        25.1
 2          4.9         3            1.4         0.2 setosa        24.9
 3          4.7         3.2          1.3         0.2 setosa        24.7
 4          4.6         3.1          1.5         0.2 setosa        24.6
 5          5           3.6          1.4         0.2 setosa        25  
 6          5.4         3.9          1.7         0.4 setosa        25.4
 7          4.6         3.4          1.4         0.3 setosa        24.6
 8          5           3.4          1.5         0.2 setosa        25  
 9          4.4         2.9          1.4         0.2 setosa        24.4
10          4.9         3.1          1.5         0.1 setosa        24.9
# … with 140 more rows
#combinando com argumento if_else
col_comb<- mutate(dados, comprimento = if_else(Petal.Length>=3,"grande","pequeno"))

col_comb
# A tibble: 150 × 6
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species comprimento
          <dbl>       <dbl>        <dbl>       <dbl> <fct>   <chr>      
 1          5.1         3.5          1.4         0.2 setosa  pequeno    
 2          4.9         3            1.4         0.2 setosa  pequeno    
 3          4.7         3.2          1.3         0.2 setosa  pequeno    
 4          4.6         3.1          1.5         0.2 setosa  pequeno    
 5          5           3.6          1.4         0.2 setosa  pequeno    
 6          5.4         3.9          1.7         0.4 setosa  pequeno    
 7          4.6         3.4          1.4         0.3 setosa  pequeno    
 8          5           3.4          1.5         0.2 setosa  pequeno    
 9          4.4         2.9          1.4         0.2 setosa  pequeno    
10          4.9         3.1          1.5         0.1 setosa  pequeno    
# … with 140 more rows
#group_by 
#'marca' variáveis por grupo

dados<- group_by(dados, Species)
#View(dados)
#summarise 
# aplica funções nos grupos
summarise(dados, media= mean(Petal.Width),desvio_padrao=sd(Petal.Width),soma= sum(Petal.Width))
# A tibble: 3 × 4
  Species    media desvio_padrao  soma
  <fct>      <dbl>         <dbl> <dbl>
1 setosa     0.246         0.105  12.3
2 versicolor 1.33          0.198  66.3
3 virginica  2.03          0.275 101. 

Juntando e agrupando tabelas

Funções importantes

df1<- tibble("altura"= c(1.8,1.6,1.65), "peso"=c(62,65,70))
#dfl

df2<- tibble("altura"= c(1.6,1.65,1.5), "peso"=c(65,55,70))
#df2

df3<- tibble("peso"=c(55,60,66), "genero"=c("masc","masc","fem"))
df3
# A tibble: 3 × 2
   peso genero
  <dbl> <chr> 
1    55 masc  
2    60 masc  
3    66 fem   
#juntando

#juntando colunas

# mesmo número de linhas
bind_cols(df1,df2)   
New names:
• `altura` -> `altura...1`
• `peso` -> `peso...2`
• `altura` -> `altura...3`
• `peso` -> `peso...4`
# A tibble: 3 × 4
  altura...1 peso...2 altura...3 peso...4
       <dbl>    <dbl>      <dbl>    <dbl>
1       1.8        62       1.6        65
2       1.6        65       1.65       55
3       1.65       70       1.5        70
bind_cols(df1,df3)
New names:
• `peso` -> `peso...2`
• `peso` -> `peso...3`
# A tibble: 3 × 4
  altura peso...2 peso...3 genero
   <dbl>    <dbl>    <dbl> <chr> 
1   1.8        62       55 masc  
2   1.6        65       60 masc  
3   1.65       70       66 fem   
bind_cols(df2,df3)
New names:
• `peso` -> `peso...2`
• `peso` -> `peso...3`
# A tibble: 3 × 4
  altura peso...2 peso...3 genero
   <dbl>    <dbl>    <dbl> <chr> 
1   1.6        65       55 masc  
2   1.65       55       60 masc  
3   1.5        70       66 fem   
# Os data frames precisam ter o mesmo número de linhas para usar bind_cols()
#juntando por linhas
# todas as colunas em comum
bind_rows(df1,df2)  # uma coluna em comum
# A tibble: 6 × 2
  altura  peso
   <dbl> <dbl>
1   1.8     62
2   1.6     65
3   1.65    70
4   1.6     65
5   1.65    55
6   1.5     70
# uma coluna em comum
bind_rows(df2,df3)  
# A tibble: 6 × 3
  altura  peso genero
   <dbl> <dbl> <chr> 
1   1.6     65 <NA>  
2   1.65    55 <NA>  
3   1.5     70 <NA>  
4  NA       55 masc  
5  NA       60 masc  
6  NA       66 fem   
# Criando data frame com colunas diferentes
df4<- tibble("c1"=c("a","b"),"c2"=1:2, "c3"=50:51)
df4
# A tibble: 2 × 3
  c1       c2    c3
  <chr> <int> <int>
1 a         1    50
2 b         2    51
#nenhuma coluna em comum
bind_rows(df1,df4) 
# A tibble: 5 × 5
  altura  peso c1       c2    c3
   <dbl> <dbl> <chr> <int> <int>
1   1.8     62 <NA>     NA    NA
2   1.6     65 <NA>     NA    NA
3   1.65    70 <NA>     NA    NA
4  NA       NA a         1    50
5  NA       NA b         2    51
############
#juntando por colunas iguais

?join

# retorna números em comum
inner_join(df2,df3, by="peso")   
# A tibble: 1 × 3
  altura  peso genero
   <dbl> <dbl> <chr> 
1   1.65    55 masc  
# todos os valores do data frame da esquerda
left_join(df2,df3, by="peso")
# A tibble: 3 × 3
  altura  peso genero
   <dbl> <dbl> <chr> 
1   1.6     65 <NA>  
2   1.65    55 masc  
3   1.5     70 <NA>  
# todos os valores do data frame da direita
right_join(df2,df3, by="peso") 
# A tibble: 3 × 3
  altura  peso genero
   <dbl> <dbl> <chr> 
1   1.65    55 masc  
2  NA       60 masc  
3  NA       66 fem   
# todos os valores
full_join(df2,df3, by="peso")
# A tibble: 5 × 3
  altura  peso genero
   <dbl> <dbl> <chr> 
1   1.6     65 <NA>  
2   1.65    55 masc  
3   1.5     70 <NA>  
4  NA       60 masc  
5  NA       66 fem   
# todos os valores NÃO combinados do primeiro data frame
anti_join(df2,df3, by="peso") 
# A tibble: 2 × 2
  altura  peso
   <dbl> <dbl>
1    1.6    65
2    1.5    70
# filtrar valores 
?distinct

# combinando "df1" e "df2"
dist<- bind_rows(df1,df2)  
dist
# A tibble: 6 × 2
  altura  peso
   <dbl> <dbl>
1   1.8     62
2   1.6     65
3   1.65    70
4   1.6     65
5   1.65    55
6   1.5     70
# mantém apenas a coluna selecionada
distinct(dist,peso) 
# A tibble: 4 × 1
   peso
  <dbl>
1    62
2    65
3    70
4    55
# mantém todas as colunas
distinct(dist,peso, .keep_all= TRUE) 
# A tibble: 4 × 2
  altura  peso
   <dbl> <dbl>
1   1.8     62
2   1.6     65
3   1.65    70
4   1.65    55

%>% “pipe” ou “tubo”

dados<- as_tibble(iris)
# %>% "pipe" ou "tubo"
#coloca o objeto que vem antes do pipe como primeiro argumento da função que vem depois

setosa<- dados %>% filter(Species == "setosa")

#mesma coisa que:
setosa<- filter(dados, Species == "setosa")
# Forma mais dinamica de ler os dados
# Fazendo comandos separados

setosa<-filter(dados,Species == "setosa")  
setosa<-select(setosa,1:3) 
setosa<- mutate(setosa,soma =Sepal.Length+Sepal.Width)

# Fazendo o comando usando o pipe
setosa1<- dados %>% filter(Species == "setosa") %>% select(1:3) %>% mutate(setosa,soma =Sepal.Length+Sepal.Width)
#View(setosa1)

tidyr

gather

#library(tidyr) # não necessário se o tidyverse já foi carregado
#junta valores de diferentes colunas e reorganiza
#gather( dataframe, variavel, valor, colunas)

#gather(setosa, variavel,numero, - linha) 

dados1<- dados %>% select(3:5) %>% gather(variavel,numero,-Species)
dados1
# A tibble: 300 × 3
   Species variavel     numero
   <fct>   <chr>         <dbl>
 1 setosa  Petal.Length    1.4
 2 setosa  Petal.Length    1.4
 3 setosa  Petal.Length    1.3
 4 setosa  Petal.Length    1.5
 5 setosa  Petal.Length    1.4
 6 setosa  Petal.Length    1.7
 7 setosa  Petal.Length    1.4
 8 setosa  Petal.Length    1.5
 9 setosa  Petal.Length    1.4
10 setosa  Petal.Length    1.5
# … with 290 more rows

spread

pop<-population

head(pop)
# A tibble: 6 × 3
  country      year population
  <chr>       <int>      <int>
1 Afghanistan  1995   17586073
2 Afghanistan  1996   18415307
3 Afghanistan  1997   19021226
4 Afghanistan  1998   19496836
5 Afghanistan  1999   19987071
6 Afghanistan  2000   20595360
pop_tabela<-pop%>%spread(year,population)

pop_tabela
# A tibble: 219 × 20
   country `1995` `1996` `1997` `1998` `1999` `2000` `2001` `2002` `2003` `2004`
   <chr>    <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
 1 Afghan… 1.76e7 1.84e7 1.90e7 1.95e7 2.00e7 2.06e7 2.13e7 2.22e7 2.31e7 2.40e7
 2 Albania 3.36e6 3.34e6 3.33e6 3.33e6 3.32e6 3.30e6 3.29e6 3.26e6 3.24e6 3.22e6
 3 Algeria 2.93e7 2.98e7 3.03e7 3.08e7 3.13e7 3.17e7 3.22e7 3.26e7 3.30e7 3.35e7
 4 Americ… 5.29e4 5.39e4 5.49e4 5.59e4 5.68e4 5.75e4 5.82e4 5.87e4 5.91e4 5.93e4
 5 Andorra 6.39e4 6.43e4 6.41e4 6.38e4 6.41e4 6.54e4 6.8 e4 7.16e4 7.56e4 7.91e4
 6 Angola  1.21e7 1.25e7 1.28e7 1.31e7 1.35e7 1.39e7 1.44e7 1.49e7 1.54e7 1.60e7
 7 Anguil… 9.81e3 1.01e4 1.03e4 1.05e4 1.08e4 1.11e4 1.14e4 1.17e4 1.20e4 1.23e4
 8 Antigu… 6.83e4 7.02e4 7.22e4 7.42e4 7.60e4 7.76e4 7.90e4 8.00e4 8.09e4 8.17e4
 9 Argent… 3.48e7 3.53e7 3.57e7 3.61e7 3.65e7 3.69e7 3.73e7 3.76e7 3.80e7 3.83e7
10 Armenia 3.22e6 3.17e6 3.14e6 3.11e6 3.09e6 3.08e6 3.06e6 3.05e6 3.04e6 3.03e6
# … with 209 more rows, and 9 more variables: `2005` <int>, `2006` <int>,
#   `2007` <int>, `2008` <int>, `2009` <int>, `2010` <int>, `2011` <int>,
#   `2012` <int>, `2013` <int>

gather e spread são funções opostas

separate

#separa conteúdo das linhas 
#setosa1 %>% separate(variavel,c("petala","medida")) %>% View # utiliza pontuação
#setosa1 %>% separate(variavel,c("petala","medida"),sep="Len") %>% View # separação manual

unite

#oposto de separate, une conteudos
dados1 %>% unite("linha_junta",1,2,sep= "_") #%>% View #une as colunas "Species" e "Variavel"
# A tibble: 300 × 2
   linha_junta         numero
   <chr>                <dbl>
 1 setosa_Petal.Length    1.4
 2 setosa_Petal.Length    1.4
 3 setosa_Petal.Length    1.3
 4 setosa_Petal.Length    1.5
 5 setosa_Petal.Length    1.4
 6 setosa_Petal.Length    1.7
 7 setosa_Petal.Length    1.4
 8 setosa_Petal.Length    1.5
 9 setosa_Petal.Length    1.4
10 setosa_Petal.Length    1.5
# … with 290 more rows

separate e unite são funções opostas

Gráficos GGPLOT2

ggplot

#library(tidyverse)
#library(ggplot2)

quickplot ou qplot - gráfico rápido

Fórmula

qplot(x,y,data,geom)

eixos x,y, dados, tipo de gráfico

Grafico tradicional

# iris
dados<-iris
plot(dados$Petal.Length,dados$Petal.Width)

Grafico com o qplot

#duas dimensões
qplot(x=Petal.Length,y=Petal.Width,data=dados) 

#uma dimensão
# qplot(x=Petal.Length,data=dados) 
qplot(x=Petal.Length,data=dados,geom="histogram") 
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

qplot(x=Petal.Length,data=iris,binwidth=0.5) #ajeitando bins

qplot(x=Petal.Length,data=iris,geom="bar") 

qplot(x=Species,data=iris) #padrão geom="bar"

#duas dimensões
qplot(x=Petal.Length,y=Petal.Width,data=iris) # padrão geom="point"

qplot(x=Petal.Length,y=Petal.Width,data=iris,geom="line")

qplot(x=Petal.Length,y=Petal.Width,data=iris,geom="path")

qplot(x=Petal.Length,y=Petal.Width,data=iris,color=Species) # cores de acordo com Species

qplot(x=Petal.Length,y=Petal.Width,data=iris,shape=Species) # formato de acordo com Species

qplot(x=Petal.Length,y=Petal.Width,data=iris,shape=Species,color=Species) 

qplot(y=Petal.Length,x=Species,data=iris,geom="boxplot") 

O qplot é ótimo para gráficos rápidos, testar dados,etc

formato completo de gráficos usando o comando ggplot

ggplot(data,aes(x,y,color,shape,fill,etc))+geom + outras camadas…

gráficos de variáveis com uma dimensão

ggplot(iris,aes(Petal.Length))+geom_bar()#gráfico de barra

ggplot(iris,aes(Petal.Length))+geom_histogram() #histograma
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(iris,aes(Petal.Length))+geom_histogram(binwidth=0.3)

ggplot(iris,aes(Petal.Length))+geom_density()#gráfico de densidade (estimativa de densidade de kernel)

ggplot(iris,aes(Petal.Length))+geom_freqpoly(binwidth= 0.1)  # poligono de frequência

ggplot(iris,aes(Petal.Length))+geom_dotplot(binwidth = 0.1) #gráfico de pontos

formas diferentes de escrever

1 forma

ggplot(dados, aes(Sepal.Length))+
                geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

2 forma

ggplot(dados)+
  geom_histogram(aes(Sepal.Length))
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3 forma

dados%>%ggplot(aes(Sepal.Length))+geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

4 forma

dados%>%ggplot()+geom_histogram(aes(Sepal.Length))
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

5 forma

p<-ggplot(dados)

p+geom_histogram(aes(Sepal.Length))
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Pode mudar o tipo de grafico - de barra

p+geom_bar(aes(Sepal.Length))

gráfico de pontos

p+geom_point(aes(Sepal.Length,Petal.Length))

gráficos de variáveis com uma dimensão de barras

banco diamonds

head(diamonds)
# A tibble: 6 × 10
  carat cut       color clarity depth table price     x     y     z
  <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1  0.23 Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
2  0.21 Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
3  0.23 Good      E     VS1      56.9    65   327  4.05  4.07  2.31
4  0.29 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
5  0.31 Good      J     SI2      63.3    58   335  4.34  4.35  2.75
6  0.24 Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48

Tabela de frequencia da variável cut

table(diamonds$cut)

     Fair      Good Very Good   Premium     Ideal 
     1610      4906     12082     13791     21551 

Grafico de barras colorindo contorno

ggplot(data=diamonds)+geom_bar(mapping=aes(x=cut,color=cut))

Grafico de barras colorindo barras

ggplot(data=diamonds)+geom_bar(mapping=aes(x=cut,fill=cut))

Caso a tabela já esteja pronta

Criando dados tabelas

data <- data.frame(
  name=c("A","B","C","D","E") ,  
  value=c(3,12,5,18,45)
)

Usar o opção stat = “identity”

ggplot(data, aes(x=name, y=value)) + 
  geom_bar(stat = "identity") 

gráficos de variáveis com uma dimensão histograma

Usando o grafico do rbase

hist(dados$Sepal.Length)

Utilizando o ggplot - Incluindo cores e modificando

ggplot(dados, aes(Sepal.Length)) +
  geom_histogram(fill='gray', col='black',bins=8)

incluindo interevalo de frequencia de Stuges

ifre<-nclass.Sturges(dados$Sepal.Length)

ifre
[1] 9
ggplot(dados, aes(Sepal.Length)) +
  geom_histogram(fill='gray', col='black',bins=ifre)

Outras variações

ggplot(dados,aes(Sepal.Length))+geom_bar()#gráfico de barra

ggplot(dados,aes(Sepal.Length))+geom_histogram() #histograma
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(dados,aes(Sepal.Length))+geom_histogram(binwidth=0.5)

ggplot(dados,aes(Sepal.Length))+geom_density()#gráfico de densidade (estimativa de densidade de kernel)

ggplot(dados,aes(Sepal.Length))+geom_freqpoly(binwidth= 0.5)  # poligono de frequência

ggplot(dados,aes(Sepal.Length))+geom_dotplot(binwidth = 0.1) #gráfico de pontos

ggplot(dados, aes(x=Sepal.Length)) +
  geom_histogram(fill='red', col='black',binwidth = 0.5)+geom_freqpoly(binwidth= 0.5)

ggplot(dados, aes(x=Sepal.Length)) +
  geom_histogram(fill='red', col='black',binwidth = 0.5)

ggplot(dados,aes(Sepal.Length))+geom_dotplot(fill='steelblue', col='black',binwidth = 0.2) #gráfico de pontos

Histograma com densidade normal

ggplot(dados, aes(x=Sepal.Length)) +
  geom_histogram(aes(y = ..density..),fill='orange', col='black',bins = 8)+
  stat_function(fun = dnorm, colour = "red", args = list(mean = mean(dados$Sepal.Length), sd = sd(dados$Sepal.Length)))

Mais completo

p<- ggplot(dados)

p+ geom_histogram(aes(Sepal.Length,fill=Species),bins=12,alpha=0.5,colour="black")

p+ geom_histogram(aes(Sepal.Length,colour=Species),binwidth=0.1,alpha=0.5,fill="black")

alpha= transparência

colour = contorno

p+ geom_density(aes(Sepal.Length,fill=Species),alpha=0.3,colour="black")

p+ geom_density(aes(Sepal.Length,..count..,fill=Species),alpha=0.5,colour="black")

p+geom_freqpoly(aes(Sepal.Length,colour=Species),binwidth=0.3,show.legend = TRUE)

#combinando gráficos
p+ geom_histogram(aes(Sepal.Length,fill=Species),binwidth=0.3,alpha=0.3,colour="black")+
  geom_density(aes(Sepal.Length,0.3*..count..,fill=Species),alpha=0.5,colour="black")

p+ geom_histogram(aes(Sepal.Length,fill=Species),binwidth=0.5,alpha=0.3)+
  geom_freqpoly(aes(Sepal.Length,colour=Species),binwidth=0.5)

p+ geom_dotplot(aes(Sepal.Length,fill=Species),binwidth=0.2,alpha=0.3)+
  geom_freqpoly(aes(Sepal.Length,colour=Species),binwidth=0.2)

ou pode-se mudar o tipo de grafico e continuar usando os dados contido em p

p+ geom_boxplot(aes(y=Sepal.Length,fill=Species))

boxplot e gráfico de violino - utilizando base mpg de carros

g<- ggplot(mpg)
g+geom_boxplot(aes(class,hwy))

g+geom_boxplot(aes(class,hwy))+geom_jitter(aes(class,hwy))

g+geom_violin(aes(class,hwy))+geom_jitter(aes(class,hwy))

Facets

facet_grid(linha~coluna)

head(mpg)
# A tibble: 6 × 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class 
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr> 
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compa…
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compa…
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compa…
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compa…
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compa…
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compa…
g+geom_boxplot(aes(class,hwy))+facet_grid(~drv) #tração f- dianteira r, traseira 4

g+geom_boxplot(aes(class,hwy))+facet_grid(year~.)

g+geom_boxplot(aes(class,hwy))+facet_grid(year~drv)

inserindo média

dados%>%ggplot(aes(y=Species,x=Sepal.Length, fill=Species)) +
  geom_boxplot()+
  stat_summary(fun="mean",color="red")+
  theme(legend.position = "none")
Warning: Removed 3 rows containing missing values (geom_segment).

library(gapminder)
gapminder %>%
    ggplot(aes(continent,lifeExp, fill=continent)) +
    geom_boxplot() +
    stat_summary(fun="mean")+
    theme(legend.position = "none")
Warning: Removed 5 rows containing missing values (geom_segment).

Mudando aspectos estéticos do gráfico

Legendas

g<-ggplot(dados)+geom_point(aes(Petal.Length,Petal.Width,colour=Species))
g

g<-ggplot(dados)+geom_point(aes(Petal.Length,Petal.Width,colour=Species))+
  labs(title="Comprimento por largura de pétalas",x="Comprimento",y="Largura")+# Título e nomes dos eixos
  scale_colour_manual(name="Espécie",labels=c("Setosa","Versicolor","Virginica"),values=c("skyblue", "royalblue", "blue"))

g

g1<- ggplot(iris,aes(Petal.Length,fill=Species))+geom_bar()+
  labs(title="Frequência de cada valor de Petal.Length",x= "Valores de Petal.Length",y= "Frequência/Contagem")+ #Título e nomes dos eixos
  scale_fill_manual(name="Espécie",labels=c("Setosa","Versicolor","Virginica"),values=c("goldenrod2","steelblue","green4"))

g1

Temas

g+ theme_bw()

g+ theme_classic()

g+ theme_minimal()

g+ theme_dark()

g1+ theme_bw()

g1+ theme_classic()

g1+ theme_minimal()

g1+theme_void()

g1+ theme_dark()

mais temas com o pacote ggthemes

library(ggthemes)
g1+theme_wsj()#+scale_colour_wsj() #wall street journal

g1+theme_gdocs()

cores

g+theme_economist() +scale_colour_economist()# esquema de cores do the economist
Scale for 'colour' is already present. Adding another scale for 'colour',
which will replace the existing scale.

##duas variáveis contínuas com pares de números/ time series/ etc View(economics)

head(economics)
# A tibble: 6 × 6
  date         pce    pop psavert uempmed unemploy
  <date>     <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
1 1967-07-01  507. 198712    12.6     4.5     2944
2 1967-08-01  510. 198911    12.6     4.7     2945
3 1967-09-01  516. 199113    11.9     4.6     2958
4 1967-10-01  512. 199311    12.9     4.9     3143
5 1967-11-01  517. 199498    12.8     4.7     3066
6 1967-12-01  525. 199657    11.8     4.8     3018
e<- ggplot(economics)
e+ geom_line(aes(date,unemploy))

e+ geom_area(aes(date,unemploy))

Importenta - Baixar planilhas de ajuda GGPLOT2 do site https://www.rstudio.com/resources/cheatsheets/

Series Temporais com o pacote forecast

referência sobre séries temporais no R

https://otexts.com/fpp2/

https://otexts.com/fpp3/

Caso o forecast não esteja instalado

#install.packages("forecast")
library(forecast)

Baixar o dados do rpubs do curso

https://rpubs.com/silvioest/cursoR

Dados-IPEA

library(readxl)
dados <- read_excel("ipeadata(02-06-2022-04-52) - silvio exemplo.xls")
head(dados)
# A tibble: 6 × 5
  Data      IMP   PIB  PIBA    TX
  <chr>   <dbl> <dbl> <dbl> <dbl>
1 1990.01 1678.   0.2   0.7  134.
2 1990.02 1252.   0.4   1.1  126.
3 1990.03 1646.   0.8   1.8  113.
4 1990.04 1363.   0.7   2.5  131.
5 1990.05 1534.   0.8   3.3  133.
6 1990.06 1369.   0.8   4    136.

Transformando os dados em ts (dados de séries temporais) coluna IMP - importação

ts_IMP<-ts(dados$IMP,start=c(1990,1),frequency = 12)

ts_IMP
           Jan       Feb       Mar       Apr       May       Jun       Jul
1990  1678.275  1251.570  1646.230  1362.701  1534.042  1369.161  1576.211
1991  1622.334  1245.038  1462.993  1619.012  1577.352  1837.797  1789.322
1992  1651.851  1521.412  1457.375  1504.127  1564.051  1656.886  1956.260
1993  1798.237  1431.797  2000.557  2124.757  1590.052  2292.208  2770.439
1994  1768.675  2030.101  2248.937  2151.982  2624.852  2498.707  2514.352
1995  3283.872  4012.484  4721.392  3863.500  4897.140  4896.577  4002.874
1996  3439.787  3434.791  3876.447  4073.777  4249.153  4167.948  4806.883
1997  2588.660  4318.803  4788.930  5590.105  4789.335  5270.827  5852.153
1998  4712.117  4020.478  5245.880  4705.098  4814.205  4777.596  5479.072
1999  3746.185  3235.867  4134.496  3757.416  4171.971  4545.922  4114.886
2000  3654.576  4133.069  4535.323  4078.285  4776.281  4681.709  4960.415
2001  5088.239  4086.700  5530.628  4693.746  5236.593  4842.735  4938.328
2002  3886.422  3483.558  3749.115  4225.844  4154.270  3488.084  5105.908
2003  3739.989  3973.074  3786.968  4081.480  3946.387  3603.901  4122.647
2004  4293.740  3833.805  5422.843  4713.721  4917.995  5614.818  5613.393
2005  5349.748  5071.993  5998.528  5423.851  6462.855  6257.324  6147.753
2006  6552.292  6072.453  7814.875  6845.904  7383.569  7464.246  8085.256
2007  8562.978  7340.898  9627.971  8382.641  9904.455  9417.185 10896.754
2008 12487.791 12099.972 11772.927 12477.740 15374.638 16016.787 17279.442
2009 10439.094  7955.653 10191.230  8763.503  9500.591 10009.203 11380.715
2010 11628.213 11936.119 15181.213 14007.783 14374.168 14960.403 16464.840
2011 14962.070 15689.001 17872.299 18458.870 19826.223 19398.621 19259.092
2012 17589.407 16476.146 19033.764 18849.752 20417.071 18709.217 18294.469
2013 20156.726 16981.571 19281.998 21788.738 21203.756 18986.750 22867.576
2014 20238.121 18190.582 17640.547 19352.301 20229.372 18260.985 21610.394
2015 17000.889 15063.077 16660.194 14799.978 14153.162 15239.765 16286.388
2016 10455.955 10448.566 11706.199 10658.991 11291.199 12923.893 11906.418
2017 12335.328 11046.775 13562.894 11459.644 12968.955 13408.998 13263.065
2018 15114.215 13268.768 14668.560 14653.559 14039.985 15008.153 17759.843
2019 17453.377 13566.767 14066.001 14664.020 16130.591 13944.368 18032.909
2020 17190.165 13849.451 14266.745 11431.020 10681.946 10977.106 11814.764
2021 15167.392 14539.173 17865.279 16096.324 17664.682 17843.605 18128.645
           Aug       Sep       Oct       Nov       Dec
1990  1999.407  1898.575  2037.735  2263.086  2044.369
1991  2152.628  1671.899  2247.611  2005.551  1808.933
1992  1622.022  1643.645  1992.171  1761.570  2222.722
1993  2340.892  2217.389  2094.220  2039.596  2555.856
1994  2775.732  2641.133  3186.329  4114.518  4523.371
1995  4461.347  3687.438  4076.040  4136.941  3932.293
1996  4661.594  4748.327  5496.716  4755.667  5634.678
1997  5433.041  5495.531  5713.646  5332.329  5364.602
1998  4232.707  5810.229  5530.836  4812.451  4532.192
1999  4548.570  4319.941  4539.760  4617.817  4526.709
2000  5501.974  5143.576  5327.233  5234.187  4949.723
2001  5176.030  4246.174  4837.692  4299.682  3592.473
2002  4258.143  4087.345  4369.882  3936.118  3530.073
2003  3811.538  4702.377  5107.951  4348.298  4082.554
2004  5708.244  5834.890  5932.061  6161.109  5767.016
2005  7784.322  6401.418  6327.020  6806.236  6661.167
2006  9212.212  8207.793  8830.359  8761.166  7300.971
2007 11683.453 10832.943 12481.158 12175.813 10735.700
2008 17596.371 17403.299 17329.401 13236.431 11632.287
2009 10934.048 12698.039 12910.059 12182.273 12433.201
2010 16961.829 17891.796 16685.020 17538.418 15707.164
2011 22405.400 20356.258 19918.997 21345.663 18477.262
2012 19312.716 17605.428 20395.170 20821.071 17662.214
2013 20364.219 19035.573 23201.590 19280.002 18352.388
2014 19437.037 20722.266 19635.310 18191.865 17314.238
2015 12937.801 13336.913 14194.772 12744.979 10686.340
2016 13000.672 12141.043 11518.693 11603.000 11666.729
2017 14789.291 14242.528 14598.899 13951.600 13323.466
2018 19768.276 14948.421 16921.935 15529.847 13640.421
2019 17603.931 15362.322 16987.201 14868.296 13248.186
2020 11585.201 13139.952 13245.304 14856.582 15748.589
2021 19557.277 19975.448 20538.918 21611.841 20419.466

Gráfico de série temporal com o comando autoplot

autoplot(ts_IMP)

vericando ajuda para o comando holt

help(holt)

Fazendo previsão com o camando holt para 12 meses

PrevIMP <- holt(ts_IMP, h = 12)
PrevIMP
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jan 2022       20760.12 19259.44 22260.79 18465.02 23055.21
Feb 2022       20819.06 19053.62 22584.51 18119.05 23519.08
Mar 2022       20878.01 18882.56 22873.46 17826.23 23929.79
Apr 2022       20936.95 18735.33 23138.58 17569.86 24304.04
May 2022       20995.90 18605.77 23386.03 17340.51 24651.29
Jun 2022       21054.85 18489.97 23619.73 17132.20 24977.49
Jul 2022       21113.79 18385.28 23842.30 16940.90 25286.69
Aug 2022       21172.74 18289.82 24055.65 16763.70 25581.77
Sep 2022       21231.68 18202.18 24261.19 16598.46 25864.91
Oct 2022       21290.63 18121.26 24460.00 16443.50 26137.76
Nov 2022       21349.58 18046.22 24652.93 16297.53 26401.62
Dec 2022       21408.52 17976.36 24840.68 16159.49 26657.56

Resumo do ajuste

summary(PrevIMP)

Forecast method: Holt's method

Model Information:
Holt's method 

Call:
 holt(y = ts_IMP, h = 12) 

  Smoothing parameters:
    alpha = 0.6196 
    beta  = 1e-04 

  Initial states:
    l = 1432.0126 
    b = 59.4888 

  sigma:  1170.986

     AIC     AICc      BIC 
7717.408 7717.566 7737.161 

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE
Training set -14.13047 1164.871 829.0728 -1.844391 10.02267 0.4609707
                    ACF1
Training set -0.05584862

Forecasts:
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jan 2022       20760.12 19259.44 22260.79 18465.02 23055.21
Feb 2022       20819.06 19053.62 22584.51 18119.05 23519.08
Mar 2022       20878.01 18882.56 22873.46 17826.23 23929.79
Apr 2022       20936.95 18735.33 23138.58 17569.86 24304.04
May 2022       20995.90 18605.77 23386.03 17340.51 24651.29
Jun 2022       21054.85 18489.97 23619.73 17132.20 24977.49
Jul 2022       21113.79 18385.28 23842.30 16940.90 25286.69
Aug 2022       21172.74 18289.82 24055.65 16763.70 25581.77
Sep 2022       21231.68 18202.18 24261.19 16598.46 25864.91
Oct 2022       21290.63 18121.26 24460.00 16443.50 26137.76
Nov 2022       21349.58 18046.22 24652.93 16297.53 26401.62
Dec 2022       21408.52 17976.36 24840.68 16159.49 26657.56

Gráfico com a previsão

autoplot(PrevIMP)

Fazendo previsão com o camando forecast

PrevIMP1 <- forecast(ts_IMP, h = 12)
PrevIMP1
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jan 2022       20458.42 17546.49 23370.35 16005.00 24911.83
Feb 2022       17988.62 15092.23 20885.02 13558.97 22418.28
Mar 2022       20398.49 16772.40 24024.58 14852.87 25944.12
Apr 2022       19337.38 15603.59 23071.17 13627.04 25047.72
May 2022       20366.53 16144.52 24588.55 13909.52 26823.55
Jun 2022       20393.89 15894.55 24893.22 13512.75 27275.03
Jul 2022       22102.21 16947.96 27256.45 14219.47 29984.95
Aug 2022       22373.12 16888.29 27857.94 13984.80 30761.43
Sep 2022       21481.98 15970.46 26993.50 13052.83 29911.13
Oct 2022       22364.80 16382.05 28347.55 13214.98 31514.62
Nov 2022       21609.58 15601.36 27617.81 12420.80 30798.37
Dec 2022       20317.32 14461.99 26172.64 11362.37 29272.26

Resumo do ajuste

summary(PrevIMP1)

Forecast method: ETS(M,A,M)

Model Information:
ETS(M,A,M) 

Call:
 ets(y = object, lambda = lambda, biasadj = biasadj, allow.multiplicative.trend = allow.multiplicative.trend) 

  Smoothing parameters:
    alpha = 0.5261 
    beta  = 1e-04 
    gamma = 0.0711 

  Initial states:
    l = 1575.6498 
    b = 21.5337 
    s = 1.0464 1.0416 1.0632 1.0128 1.0764 1.0711
           0.9915 0.9788 0.9451 0.9859 0.8538 0.9332

  sigma:  0.1111

     AIC     AICc      BIC 
7424.329 7426.001 7491.490 

Error measures:
                   ME     RMSE      MAE        MPE     MAPE      MASE
Training set 44.52475 1036.263 719.4986 -0.4172756 8.455621 0.4000466
                   ACF1
Training set 0.03674622

Forecasts:
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jan 2022       20458.42 17546.49 23370.35 16005.00 24911.83
Feb 2022       17988.62 15092.23 20885.02 13558.97 22418.28
Mar 2022       20398.49 16772.40 24024.58 14852.87 25944.12
Apr 2022       19337.38 15603.59 23071.17 13627.04 25047.72
May 2022       20366.53 16144.52 24588.55 13909.52 26823.55
Jun 2022       20393.89 15894.55 24893.22 13512.75 27275.03
Jul 2022       22102.21 16947.96 27256.45 14219.47 29984.95
Aug 2022       22373.12 16888.29 27857.94 13984.80 30761.43
Sep 2022       21481.98 15970.46 26993.50 13052.83 29911.13
Oct 2022       22364.80 16382.05 28347.55 13214.98 31514.62
Nov 2022       21609.58 15601.36 27617.81 12420.80 30798.37
Dec 2022       20317.32 14461.99 26172.64 11362.37 29272.26

Gráfico com a previsão

autoplot(PrevIMP1)

Fazendo previsão com o camando auto.arima

ajuste <- auto.arima(ts_IMP)
PrevIMP2<-forecast(ajuste, h = 12)

Resumo do ajuste

summary(PrevIMP2)

Forecast method: ARIMA(3,1,0)(0,0,2)[12]

Model Information:
Series: ts_IMP 
ARIMA(3,1,0)(0,0,2)[12] 

Coefficients:
          ar1      ar2     ar3    sma1    sma2
      -0.3818  -0.0596  0.2467  0.3706  0.1636
s.e.   0.0501   0.0532  0.0505  0.0516  0.0599

sigma^2 = 1069763:  log likelihood = -3200.68
AIC=6413.36   AICc=6413.58   BIC=6437.05

Error measures:
                   ME     RMSE      MAE        MPE     MAPE      MASE
Training set 44.34119 1026.181 730.1854 -0.2010917 8.985075 0.4059886
                    ACF1
Training set -0.02212515

Forecasts:
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jan 2022       20821.93 19496.43 22147.43 18794.76 22849.11
Feb 2022       20650.62 19092.26 22208.98 18267.32 23033.93
Mar 2022       21481.95 19665.31 23298.59 18703.64 24260.26
Apr 2022       21049.25 18845.69 23252.80 17679.20 24419.30
May 2022       21370.12 18951.98 23788.26 17671.90 25068.34
Jun 2022       21540.12 18883.02 24197.23 17476.43 25603.82
Jul 2022       21566.19 18669.56 24462.82 17136.18 25996.20
Aug 2022       22086.89 19000.61 25173.16 17366.84 26806.94
Sep 2022       22341.27 19057.46 25625.08 17319.11 27363.43
Oct 2022       22518.50 19049.50 25987.50 17213.12 27823.87
Nov 2022       23042.91 19405.35 26680.47 17479.74 28606.08
Dec 2022       22702.36 18896.96 26507.77 16882.50 28522.23

Gráfico com a previsão

autoplot(PrevIMP2)

### Analise base RAIS ###

## Abrindo Banco de dados

#library(tidyverse)

#library(readr)
#dados <- read_csv("Documentos/CursoR_UDESC/RAIS_SC2020.csv", 
#                    +     col_types = cols(grau_instrucao_apos_2005 = col_factor(levels = c()), 
#                                           +         sexo = col_factor(levels = c()), 
#                                           +         raca_cor = col_factor(levels = c())))

#summary(dados)

#library(fdth)
#help("fdth")
#freq <- fdt(dados$valor_remuneracao_media)

#freq

#plot(freq)

#ggplot(dados, aes(valor_remuneracao_media))+
#  geom_histogram()


#ifre<-nclass.Sturges(dados$valor_remuneracao_media)

#ifre

#ggplot(dados, aes(valor_remuneracao_media)) +
#  geom_histogram(fill='gray', col='black',bins=ifre)

#ggplot(dados, aes(log(valor_remuneracao_media))) +
#  geom_histogram(fill='gray', col='black',bins=ifre)

#dados<-mutate(dados, logRenda=log(dados$valor_remuneracao_media))

#dados<-filter(dados,logRenda!="-Inf")

#ggplot(dados, aes(logRenda)) +
#  geom_histogram(fill='gray', col='black',bins=ifre)

## Renda média por cidade
#Renda_Cidade<- group_by(dados, id_municipio)%>%
#  summarise(mediaRenda= mean(valor_remuneracao_media), pop=n())

#View(Renda_Cidade)

#cod_cidades <- read_csv("Documentos/CursoR_UDESC/cod_cidades.csv")
#View(cod_cidades)

#Renda_Cidade<-left_join(Renda_Cidade,cod_cidades, by="id_municipio")

#arrange(Renda_Cidade,mediaRenda)

#arrange(Renda_Cidade,desc(mediaRenda))

## Renda média por nivel de formação

#Renda_Form<- group_by(dados, grau_instrucao_apos_2005)%>%
#  summarise(mediaRenda= mean(valor_remuneracao_media), pop=n())

#View(Renda_Form)

#Renda_Form<-rename(Renda_Form, chave=grau_instrucao_apos_2005)

#dicionarioRAIS <- read_csv("Documentos/CursoR_UDESC/dicionarioRAIS.csv")

#nivel<-filter(dicionarioRAIS,nome_coluna=="grau_instrucao_apos_2005")

#Renda_Form<-left_join(Renda_Form,nivel, by="chave")
#View(Renda_Form)

#Renda_Form<-select(Renda_Form,valor,mediaRenda,pop)
#View(Renda_Form)

#arrange(Renda_Form,mediaRenda)

#ggplot(Renda_Form)+geom_bar(aes(y=mediaRenda,x=valor),stat = "identity")

#library(ggthemes)
#ggplot(Renda_Form,aes(x=mediaRenda,y=reorder(valor,-mediaRenda),fill=valor))+
#  geom_col(stat = "identity")+theme_wsj()+scale_colour_wsj()+
#  labs(title = "Renda por nivel de formação")

## Regressão Linear

#ggplot(dados,aes(idade,logRenda))+
#  geom_point()+
#  geom_smooth(method=lm,se=FALSE)+
#  facet_wrap(vars(grau_instrucao_apos_2005))

#ajuste<-lm(logRenda~idade+sexo+tempo_emprego+grau_instrucao_apos_2005+raca_cor,data=dados)
#summary(ajuste)