1 Começando no R

O R possui 4 principais janelas: Script, o Prompt, o ambiente global e a janela de ajuda/gráficos.
Na janela do script rodamos o código;
Na janera do prompt temos os resultados;
Na janela do ambiente global temas as nossas bases de dados e o histórico;
Na janela de ajuda temos as informações referentes aos pacotes e os gráficos, além de outras informações úteis

1.1 Sinal de atribuição

O R é uma linguagem de programação voltada para o objeto.
Quando queremos atribuir algo para um novo objeto, usamos o sina “<-” ou “=”

soma <- 5+5
soma
## [1] 10

1.2 Importando dados

dados <- read.XXXX(“CAMINHO DOS DADOS/NOME DO ARQUIVO.EXTENSÃO DO ARQUIVO)”

dados <- read.csv("C:/Users/user/Desktop/Vida acadêmica/Disciplinas/Estatística Vitor/Aula 1/Bases/imoveis_aula1.csv", header = T, dec = ",", sep = ";", encoding = "latin1")
head(dados, 10)
##    Preços M2 Numero_quartos Localizaçao Dependencia_empregada
## 1      15 50              2           1                     1
## 2      16 60              3           1                     0
## 3      14 45              2           2                     0
## 4      13 45              2           1                     0
## 5      17 65              3           2                     0
## 6      13 40              1           2                     0
## 7      14 45              2           2                     0
## 8      18 50              2           1                     0
## 9      19 50              3           1                     1
## 10     20 55              1           3                     1

1.3 Instalando um Pacote

Pacotes são extensões do R que nos permitem fazer diferentes análises, são como aplicativos de celular

#install.packages("dplyr")

O sinal ‘#’ singifica comentário, o R não lê como parte do código, deixei em comentário pois não preciso do pacote, uma vez que já o tenho instalado. Se você ainda nao possui o pacote instalado, bastante remover o ‘#’ e rodar o código

1.4 Carregando um pacote

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

2 Trabalhando com os dados

No R temos classificações diferentes para os dados Charactere: Palavras Factor: são dados categóricos, podendo eles serem ordenados ou não Integer: Valores inteiros Numeric: Valores contínuos Double: Valores contínuos de até 2 casas decimais

glimpse (dados)
## Rows: 20
## Columns: 5
## $ Preços                <int> 15, 16, 14, 13, 17, 13, 14, 18, 19, 20, 15, 1...
## $ M2                    <int> 50, 60, 45, 45, 65, 40, 45, 50, 50, 55, 35, 4...
## $ Numero_quartos        <int> 2, 3, 2, 2, 3, 1, 2, 2, 3, 1, 1, 2, 2, 2, 2, ...
## $ Localizaçao           <int> 1, 1, 2, 1, 2, 2, 2, 1, 1, 3, 2, 1, 1, 1, 1, ...
## $ Dependencia_empregada <int> 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, ...
str(dados)
## 'data.frame':    20 obs. of  5 variables:
##  $ Preços               : int  15 16 14 13 17 13 14 18 19 20 ...
##  $ M2                   : int  50 60 45 45 65 40 45 50 50 55 ...
##  $ Numero_quartos       : int  2 3 2 2 3 1 2 2 3 1 ...
##  $ Localizaçao          : int  1 1 2 1 2 2 2 1 1 3 ...
##  $ Dependencia_empregada: int  1 0 0 0 0 0 0 0 1 1 ...

Note que a variável Localização foi lida como Integer, quando deveria ser um factor; Note que a variável Dependencia_empregada foi lida como Integer, quando deveria ser um factor;

2.1 Codificando as variáveis

O processo de enconding é extremamente importante, temos que colocar as variáveis na cateogira correta para fazermos as análises

dados$Preços <- as.numeric(as.character(dados$Preços))
dados$M2 <- as.numeric(as.character(dados$M2))
dados$Numero_quartos <- as.numeric(as.character(dados$Numero_quartos))

dados$Localizaçao <- factor(dados$Localizaçao,
                                  label = c("Centro de Porto Alegre", "Canoas", "Zona Sul de Porto Alegre"),
                                  levels = 1:3)

dados$Dependencia_empregada <- factor(dados$Dependencia_empregada,
                                      label = c("Não", "Sim"),
                                      levels = 0:1)
str(dados)
## 'data.frame':    20 obs. of  5 variables:
##  $ Preços               : num  15 16 14 13 17 13 14 18 19 20 ...
##  $ M2                   : num  50 60 45 45 65 40 45 50 50 55 ...
##  $ Numero_quartos       : num  2 3 2 2 3 1 2 2 3 1 ...
##  $ Localizaçao          : Factor w/ 3 levels "Centro de Porto Alegre",..: 1 1 2 1 2 2 2 1 1 3 ...
##  $ Dependencia_empregada: Factor w/ 2 levels "Não","Sim": 2 1 1 1 1 1 1 1 2 2 ...

3 Missings

3.1 1ª forma: substituindo valores ausentes por um valor arbitrário:

Aqui fazemos com que o R leia um determinado valor como missing, igual fizemos no SPSS

dados[dados==9999] <- NA

3.2 2ª forma: substituindo pela média

dados2 <- c(NA,30,1,"Centro de Porto Alegre", "Não") # Criamos uma nova observação
dados <- rbind(dados, dados2) # Adicionamos a nova observação ao data frame "dados" original
dados$Preços <- as.numeric(as.character(dados$Preços))
dados[is.na(dados$Preços), ] # Verificar se existe um NA
##    Preços M2 Numero_quartos            Localizaçao Dependencia_empregada
## 21     NA 30              1 Centro de Porto Alegre                   Não
mean(dados$Preços, na.rm = T)
## [1] 24.75
dados[is.na(dados$Preços), ]$Preços <- mean(dados$Preços, na.rm = T) # Substituir NA pela mediana
tail(dados)
##    Preços  M2 Numero_quartos              Localizaçao Dependencia_empregada
## 16  12.00  30              1                   Canoas                   Não
## 17  11.00  25              2                   Canoas                   Não
## 18  19.00  55              3 Zona Sul de Porto Alegre                   Sim
## 19  15.00  35              2                   Canoas                   Não
## 20 200.00 350              5 Zona Sul de Porto Alegre                   Sim
## 21  24.75  30              1   Centro de Porto Alegre                   Não
# Observação 21 com média de 24.75!
dados <- dados[-21,] # Removemos a observação 21
dados # Dados originais
##    Preços  M2 Numero_quartos              Localizaçao Dependencia_empregada
## 1      15  50              2   Centro de Porto Alegre                   Sim
## 2      16  60              3   Centro de Porto Alegre                   Não
## 3      14  45              2                   Canoas                   Não
## 4      13  45              2   Centro de Porto Alegre                   Não
## 5      17  65              3                   Canoas                   Não
## 6      13  40              1                   Canoas                   Não
## 7      14  45              2                   Canoas                   Não
## 8      18  50              2   Centro de Porto Alegre                   Não
## 9      19  50              3   Centro de Porto Alegre                   Sim
## 10     20  55              1 Zona Sul de Porto Alegre                   Sim
## 11     15  35              1                   Canoas                   Não
## 12     16  40              2   Centro de Porto Alegre                   Não
## 13     17  45              2   Centro de Porto Alegre                   Não
## 14     18  50              2   Centro de Porto Alegre                   Sim
## 15     13  30              2   Centro de Porto Alegre                   Não
## 16     12  30              1                   Canoas                   Não
## 17     11  25              2                   Canoas                   Não
## 18     19  55              3 Zona Sul de Porto Alegre                   Sim
## 19     15  35              2                   Canoas                   Não
## 20    200 350              5 Zona Sul de Porto Alegre                   Sim

3.3 Ou pelo pacote

#install.packages("imputeTS")
library(imputeTS)
## Warning: package 'imputeTS' was built under R version 4.0.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
dados2 <- c(NA,30,1,"Centro de Porto Alegre", "Não") # Criamos uma nova observação
dados <- rbind(dados, dados2) # Adicionamos a nova observação ao data frame "dados" original
dados$Preços <- as.numeric(as.character(dados$Preços))
dados[is.na(dados$Preços), ] # Verificar se existe um NA
##    Preços M2 Numero_quartos            Localizaçao Dependencia_empregada
## 21     NA 30              1 Centro de Porto Alegre                   Não
dados <- na_mean(dados)

NOTA: Substituir missings pela média/mediana na verdade é uma alternativa bastante perigosa e não recomendanda. O ideial é remover as observações com missings caso o banco de dados for grande. Caso seja pequeno, trabalho com IMPUTAÇÕES NOTA: Não iremos ver imputações agora, pois é algo bastante avançado e requer conhecimentos de técnicas de previsão e Machine Learning, o que atropelaria o aprendizado

dados <- dados[-21,] # Removendo a observação que criamos antes
dados
##    Preços  M2 Numero_quartos              Localizaçao Dependencia_empregada
## 1      15  50              2   Centro de Porto Alegre                   Sim
## 2      16  60              3   Centro de Porto Alegre                   Não
## 3      14  45              2                   Canoas                   Não
## 4      13  45              2   Centro de Porto Alegre                   Não
## 5      17  65              3                   Canoas                   Não
## 6      13  40              1                   Canoas                   Não
## 7      14  45              2                   Canoas                   Não
## 8      18  50              2   Centro de Porto Alegre                   Não
## 9      19  50              3   Centro de Porto Alegre                   Sim
## 10     20  55              1 Zona Sul de Porto Alegre                   Sim
## 11     15  35              1                   Canoas                   Não
## 12     16  40              2   Centro de Porto Alegre                   Não
## 13     17  45              2   Centro de Porto Alegre                   Não
## 14     18  50              2   Centro de Porto Alegre                   Sim
## 15     13  30              2   Centro de Porto Alegre                   Não
## 16     12  30              1                   Canoas                   Não
## 17     11  25              2                   Canoas                   Não
## 18     19  55              3 Zona Sul de Porto Alegre                   Sim
## 19     15  35              2                   Canoas                   Não
## 20    200 350              5 Zona Sul de Porto Alegre                   Sim

3.4 Verificação da aleatoriedade dos valores omissos

Teste de Little MCAR HO = Os valores omissos estão distribuídos de forma aleatória; H1 = Os valores omissos não estão distribuídos de forma aleatória

Ainda não vimos teste de hipótese, mas já que estamos trabalhando com valores omissos, podemos dar uma olhadinha na aleatoridade da distribuição dos missings

3.4.1 Missings Aleatórios

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

#Exemplo 1 - Dados são MCAR
n <- 300
p <- 5
pctmiss <- 0.2
set.seed(1010)
y <- matrix(rnorm(n * p),nrow = n)
missing <- matrix(runif(n * p), nrow = n) < pctmiss
y[missing] <- NA
output <- TestMCARNormality(data=y) # 0.6543455 aceita H0
output
## Call:
## TestMCARNormality(data = y)
## 
## Number of Patterns:  9 
## 
## Total number of cases used in the analysis:  245 
## 
##  Pattern(s) used:
##                                    Number of cases
## group.1    1    1    1   NA    1                16
## group.2    1    1   NA    1    1                23
## group.3    1    1    1    1    1               101
## group.4   NA    1    1    1    1                33
## group.5    1   NA    1    1    1                22
## group.6   NA   NA    1    1    1                 7
## group.7    1    1    1    1   NA                21
## group.8    1    1   NA    1   NA                10
## group.9   NA    1    1    1   NA                12
## 
## 
##     Test of normality and Homoscedasticity:
##   -------------------------------------------
## 
## Hawkins Test:
## 
##     P-value for the Hawkins test of normality and homoscedasticity:  0.7444768 
## 
##     There is not sufficient evidence to reject normality
##     or MCAR at 0.05 significance level
summary(output)
## 
## Number of imputation:  1 
## 
## Number of Patterns:  9 
## 
## Total number of cases used in the analysis:  245 
## 
##  Pattern(s) used:
##                                    Number of cases
## group.1    1    1    1   NA    1                16
## group.2    1    1   NA    1    1                23
## group.3    1    1    1    1    1               101
## group.4   NA    1    1    1    1                33
## group.5    1   NA    1    1    1                22
## group.6   NA   NA    1    1    1                 7
## group.7    1    1    1    1   NA                21
## group.8    1    1   NA    1   NA                10
## group.9   NA    1    1    1   NA                12
## 
## 
##     Test of normality and Homoscedasticity:
##   -------------------------------------------
## 
## Hawkins Test:
## 
##     P-value for the Hawkins test of normality and homoscedasticity:  0.7444768 
## 
## Non-Parametric Test:
## 
##     P-value for the non-parametric test of homoscedasticity:  0.6543455

Hawkins Test:

P-value for the Hawkins test of normality and homoscedasticity:  0.7444768 

There is not sufficient evidence to reject normality
or MCAR at 0.05 significance level

Para um nível de significância de 5%, podemos aceitar a hipótese nula de que os missings estão distribuídos de forma aleatória (p > 0.05)

3.4.2 Missings não aleatórios

# Exemplos 2 - Dados não são MCAR

n <- 300
p <- 5
pctmiss <- 0.2
set.seed(1010)
y <- matrix (rnorm(n * p), nrow = n)
missing <- matrix(runif(n * p), nrow = n) < pctmiss
y[missing] <- NA
Out <- OrderMissing(y)
y <- Out$data
spatcnt <- Out$spatcnt
g2 <- seq(spatcnt[1] + 1, spatcnt[2])
g4 <- seq(spatcnt[3] + 1, spatcnt[4])
y[c(g2, g4), ] <- 2 * y[c(g2, g4), ]
out <- TestMCARNormality(data = y, imputation.number = 20) #Rejeita H0, aceita H1
out
## Call:
## TestMCARNormality(data = y, imputation.number = 20)
## 
## Number of Patterns:  9 
## 
## Total number of cases used in the analysis:  245 
## 
##  Pattern(s) used:
##                                    Number of cases
## group.1    1    1    1   NA    1                16
## group.2    1    1   NA    1    1                23
## group.3    1    1    1    1    1               101
## group.4   NA    1    1    1    1                33
## group.5    1   NA    1    1    1                22
## group.6   NA   NA    1    1    1                 7
## group.7    1    1    1    1   NA                21
## group.8    1    1   NA    1   NA                10
## group.9   NA    1    1    1   NA                12
## 
## 
##     Test of normality and Homoscedasticity:
##   -------------------------------------------
## 
## Hawkins Test:
## 
##     P-value for the Hawkins test of normality and homoscedasticity:  4.361157e-16 
## 
##     Either the test of multivariate normality or homoscedasticity (or both) is rejected.
##     Provided that normality can be assumed, the hypothesis of MCAR is 
##     rejected at 0.05 significance level. 
## 
## Non-Parametric Test:
## 
##     P-value for the non-parametric test of homoscedasticity:  2.730253e-27 
## 
##     Hypothesis of MCAR is rejected at  0.05 significance level.
##     The multivariate normality test is inconclusive.
data(agingdata)
TestMCARNormality(agingdata, del.lesscases = 1)
## Call:
## TestMCARNormality(data = agingdata, del.lesscases = 1)
## 
## Number of Patterns:  20 
## 
## Total number of cases used in the analysis:  506 
## 
##  Pattern(s) used:
##            education   income   support   coping   events   depression   Health
## group.1            1        1         1        1        1            1        1
## group.2            1       NA         1        1        1            1        1
## group.3            1        1         1       NA        1            1        1
## group.4            1        1         1       NA        1            1       NA
## group.5            1        1         1       NA        1           NA        1
## group.6            1        1         1        1        1           NA        1
## group.7            1        1        NA        1        1            1        1
## group.8            1        1         1        1        1            1       NA
## group.9           NA        1         1        1        1            1        1
## group.10           1        1        NA       NA        1           NA       NA
## group.11           1        1        NA       NA        1            1        1
## group.12           1        1        NA        1        1            1       NA
## group.13          NA        1         1       NA        1            1        1
## group.14           1        1         1        1       NA            1        1
## group.15           1        1         1       NA       NA            1        1
## group.16           1        1         1       NA       NA           NA        1
## group.17          NA       NA         1       NA        1            1        1
## group.18           1        1         1       NA       NA            1       NA
## group.19           1       NA         1       NA        1            1        1
## group.20          NA       NA         1       NA       NA           NA        1
##            Number of cases
## group.1                280
## group.2                 10
## group.3                 90
## group.4                  3
## group.5                 11
## group.6                  6
## group.7                 14
## group.8                  5
## group.9                  2
## group.10                 3
## group.11                 4
## group.12                 2
## group.13                 2
## group.14                18
## group.15                41
## group.16                 5
## group.17                 4
## group.18                 2
## group.19                 2
## group.20                 2
## 
## 
##     Test of normality and Homoscedasticity:
##   -------------------------------------------
## 
## Hawkins Test:
## 
##     P-value for the Hawkins test of normality and homoscedasticity:  0.0001548743 
## 
##     Either the test of multivariate normality or homoscedasticity (or both) is rejected.
##     Provided that normality can be assumed, the hypothesis of MCAR is 
##     rejected at 0.05 significance level. 
## 
## Non-Parametric Test:
## 
##     P-value for the non-parametric test of homoscedasticity:  0.04552708 
## 
##     Hypothesis of MCAR is rejected at  0.05 significance level.
##     The multivariate normality test is inconclusive.

Hawkins Test:

P-value for the Hawkins test of normality and homoscedasticity:  0.0001548743 

Either the test of multivariate normality or homoscedasticity (or both) is rejected.
Provided that normality can be assumed, the hypothesis of MCAR is 
rejected at 0.05 significance level. 

Para um nível de significância de 5%, podemos rejeitar a hipótese nula de que os missings estão distribuídos de forma aleatória (p < 0.05)

4 Padronização

dados <- read.csv("C:/Users/user/Desktop/Vida acadêmica/Disciplinas/Estatística Vitor/Aula 1/Bases/imoveis_aula1.csv", header = T, dec = ",", sep = ";", encoding = "latin1")
dados$Preços <- as.numeric(as.character(dados$Preços))
dados$M2 <- as.numeric(as.character(dados$M2))
dados$Numero_quartos <- as.numeric(as.character(dados$Numero_quartos))

dados$Localizaçao <- factor(dados$Localizaçao,
                                  label = c("Centro de Porto Alegre", "Canoas", "Zona Sul de Porto Alegre"),
                                  levels = 1:3)

dados$Dependencia_empregada <- factor(dados$Dependencia_empregada,
                                      label = c("Não", "Sim"),
                                      levels = 0:1)

Preços_padronizados <- scale(dados$Preços) # criando um vetor da variável preços padronizada
dados <- cbind(dados, Preços_padronizados) # adicionando o vetor na base de dados
dados <- dados[,-6] # Removendo a variável padronizada

dados2 <- dados # Fazendo uma cópia de segurança
dados2[c(1,2)] <- scale(dados2[c(1,2)]) # Padronizando somente as 2 primeiras variáveis
rm(dados2) # Removendo o dataframe dados2
rm(Preços_padronizados)

5 Identificando outliers

Já sabemos que a observação 20 possui um z-score de 4,24.

# Boxplot

boxplot(dados$Preço)

boxplot.stats(dados$Preço)$out
## [1] 200
outlier <- dados[dados$Preços > 150, ]

dados2 <- dados

dados2 <- dados2[-20,]
boxplot(dados2$Preço)

5.1 Com pacote

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

outlier(dados$Preços) # superior
## [1] 200
outlier(dados$Preços, opposite = T) # inferior
## [1] 11

5.2 Distância de Mahalanobis

dados_Mahal <- dados[,1:2]

mahal <- mahalanobis(dados[,-c(3:5)],
                     colMeans(dados[, -c(3:5)], na.rm = T),
                     cov(dados[, -c(3:5)], use = "pairwise.complete.obs"))

summary((mahal)) # estatísticas descritivas do Mahalanobis
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##  0.02276  0.13910  0.47295  1.90000  1.49713 17.99631
Corte <- qchisq(1-0.001, ncol(dados[, -c(3:5)])) # Valor do corte = 13.81551
Corte
## [1] 13.81551
summary(mahal < Corte)
##    Mode   FALSE    TRUE 
## logical       1      19
DadosSemOutliers <- subset(dados, mahal < Corte)

6 Criando uma nova variável categórica para os valores do preço

range(dados$Preços)
## [1]  11 200
nclass.Sturges(dados$Preços) # avaliar a quantidade de categorias adequadas - Sturges faixas iguais
## [1] 6
table(cut(dados$Preços, seq(0,200, l = 7)))
## 
##    (0,33.3] (33.3,66.7]  (66.7,100]   (100,133]   (133,167]   (167,200] 
##          19           0           0           0           0           1
dados$Preços_cat[dados$Preços < 15] <- "Barato"
dados$Preços_cat[dados$Preços > 14 & dados$Preços <=18] <- "Médio"
dados$Preços_cat[dados$Preços > 18] <- "Caro"
dados$Preços_cat <- factor(dados$Preços_cat)
summary(dados$Preços_cat)
## Barato   Caro  Médio 
##      7      4      9

6.1 Ou com o pacote tidyverse

#install.packages("tidyverse")
library(tidyverse)
## -- Attaching packages ------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v purrr   0.3.4
## v tibble  3.0.1     v stringr 1.4.0
## v tidyr   1.0.3     v forcats 0.5.0
## v readr   1.3.1
## -- Conflicts ---------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
dados <- dados %>%
  mutate(Preços_cat = if_else(Preços <= 14, "Barato",
                              if_else(Preços <= 18, "Médio", "Caro")))
str(dados)
## 'data.frame':    20 obs. of  6 variables:
##  $ Preços               : num  15 16 14 13 17 13 14 18 19 20 ...
##  $ M2                   : num  50 60 45 45 65 40 45 50 50 55 ...
##  $ Numero_quartos       : num  2 3 2 2 3 1 2 2 3 1 ...
##  $ Localizaçao          : Factor w/ 3 levels "Centro de Porto Alegre",..: 1 1 2 1 2 2 2 1 1 3 ...
##  $ Dependencia_empregada: Factor w/ 2 levels "Não","Sim": 2 1 1 1 1 1 1 1 2 2 ...
##  $ Preços_cat           : chr  "Médio" "Médio" "Barato" "Barato" ...

7 Análise exploratória

mean(dados$Preços)
## [1] 24.75
median(dados$Preços)
## [1] 15.5
mode(dados$Preços)
## [1] "numeric"
sd(dados$Preços)
## [1] 41.32525
summary(dados) # Ver um resumo de todas as variáveis
##      Preços             M2         Numero_quartos                   Localizaçao
##  Min.   : 11.00   Min.   : 25.00   Min.   :1.00   Centro de Porto Alegre  :9   
##  1st Qu.: 13.75   1st Qu.: 38.75   1st Qu.:2.00   Canoas                  :8   
##  Median : 15.50   Median : 45.00   Median :2.00   Zona Sul de Porto Alegre:3   
##  Mean   : 24.75   Mean   : 60.00   Mean   :2.15                                
##  3rd Qu.: 18.00   3rd Qu.: 51.25   3rd Qu.:2.25                                
##  Max.   :200.00   Max.   :350.00   Max.   :5.00                                
##  Dependencia_empregada  Preços_cat       
##  Não:14                Length:20         
##  Sim: 6                Class :character  
##                        Mode  :character  
##                                          
##                                          
## 
summary(dados$Preços) # Ver um resumo de uma variável
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   11.00   13.75   15.50   24.75   18.00  200.00
table(dados$Dependencia_empregada) # Frequência absoluta
## 
## Não Sim 
##  14   6
table(dados$Dependencia_empregada)/20 # Frequência relativa
## 
## Não Sim 
## 0.7 0.3
prop.table(table(dados$Dependencia_empregada)) # Frequência relativa
## 
## Não Sim 
## 0.7 0.3
table(dados$Dependencia_empregada, dados$Preços_cat) # Tabela cruzada absoluta
##      
##       Barato Caro Médio
##   Não      7    0     7
##   Sim      0    4     2
table(dados$Dependencia_empregada, dados$Preços_cat)/20 # Tabela cruzada relativa
##      
##       Barato Caro Médio
##   Não   0.35 0.00  0.35
##   Sim   0.00 0.20  0.10

7.1 Usando o pacote psych

#install.packages("psych")
library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## The following object is masked from 'package:outliers':
## 
##     outlier
describe(dados$Preços)
##    vars  n  mean    sd median trimmed  mad min max range skew kurtosis   se
## X1    1 20 24.75 41.33   15.5   15.75 3.71  11 200   189  3.8    13.17 9.24
describeBy(dados$Preços, group = dados$Dependencia_empregada)
## 
##  Descriptive statistics by group 
## group: Não
##    vars  n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 14 14.57 2.06   14.5   14.58 2.22  11  18     7    0    -1.27 0.55
## ------------------------------------------------------------ 
## group: Sim
##    vars n mean    sd median trimmed  mad min max range skew kurtosis    se
## X1    1 6 48.5 74.24     19    48.5 1.48  15 200   185 1.36    -0.09 30.31
describeBy(dados$Preços, group = dados$Dependencia_empregada:dados$Localizaçao)
## 
##  Descriptive statistics by group 
## group: Não:Centro de Porto Alegre
##    vars n mean   sd median trimmed  mad min max range  skew kurtosis   se
## X1    1 6 15.5 2.07     16    15.5 2.22  13  18     5 -0.22     -1.9 0.85
## ------------------------------------------------------------ 
## group: Não:Canoas
##    vars n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 8 13.88 1.89     14   13.88 1.48  11  17     6 0.04    -1.22 0.67
## ------------------------------------------------------------ 
## group: Não:Zona Sul de Porto Alegre
## NULL
## ------------------------------------------------------------ 
## group: Sim:Centro de Porto Alegre
##    vars n  mean   sd median trimmed  mad min max range  skew kurtosis  se
## X1    1 3 17.33 2.08     18   17.33 1.48  15  19     4 -0.29    -2.33 1.2
## ------------------------------------------------------------ 
## group: Sim:Canoas
## NULL
## ------------------------------------------------------------ 
## group: Sim:Zona Sul de Porto Alegre
##    vars n  mean     sd median trimmed  mad min max range skew kurtosis    se
## X1    1 3 79.67 104.21     20   79.67 1.48  19 200   181 0.38    -2.33 60.17

7.2 Medida de consenso para escala Likert

#install.packages("agrmt")
library(agrmt)
## 
## Attaching package: 'agrmt'
## The following object is masked from 'package:tidyr':
## 
##     expand
## The following object is masked from 'package:dplyr':
## 
##     collapse
set.seed(100)
dadoslikert <- sample(1:5, 500, replace = TRUE, prob = c(0.1, 0.2, 0.4, 0.2, 0.1))
satisfação <- as.data.frame(dadoslikert)
freq <- table(satisfação$dadoslikert)
consensus(freq)
## [1] 0.6358694
hist(satisfação$dadoslikert)

8 Gráficos

#Gráfico de barras
tab <- table(dados$M2)
barplot(tab, col = "lightblue", space = 0.10, ylab = "", xlab = "Frequência", main = "Gráfico de barras",
        horiz = F, las = 1, border = NA)

# Box plot
dados <- dados[-20,]
boxplot(dados$Preços, col = "red", las = 1, axes = FALSE, main = "BoxPlot dos preços",
        aspect = 1)

ggplot(dados, aes(x=as.factor(dados$Localizaçao), y=dados$Preços, fill = as.factor(dados$Localizaçao))) +
  geom_boxplot() + labs(title = "Boxplot", x= "Localização", y = "Preços", fill="Localização")
## Warning: Use of `dados$Localizaçao` is discouraged. Use `Localizaçao` instead.
## Warning: Use of `dados$Preços` is discouraged. Use `Preços` instead.
## Warning: Use of `dados$Localizaçao` is discouraged. Use `Localizaçao` instead.

# Gráfico de pizza
tab <- table(dados$Localizaçao)
pie(tab, main = "Pizza", col = c(2:4))

piepercent<- round(100*tab/sum(tab), 1)

pie(tab, labels = piepercent, main = "Pizza localização",col = rainbow(length(tab)))
legend("bottomright", c("Centro de Porto Alegre", "Canoas", "Zona Sul"), cex = 0.6,
       fill = rainbow(length(tab)))

# Scatterplot

plot(dados$Preços, dados$M2, col = "blue", main = "Dispersão",
     xlab = "Preços", ylab = "M2", pch = 16, las = 1)
abline(lm(dados$M2 ~ dados$Preços), col = 2)

# Histograma slides

library(ggplot2)
dados <- data.frame(renda = rnorm(500000,1875,750))
ggplot(dados) +
  aes(x = renda) +
  geom_histogram(fill = "lightblue",
                 col = "black",
                 aes(y = ..density..)) +
  stat_function(fun = dnorm, args = list(mean = mean(dados$renda), sd = sd(dados$renda))) +
  labs(title = "Renda do Porto Alegrense", subtitle = "Em R$") + 
  geom_vline(xintercept=2625, linetype="dashed", color = "red") + 
  geom_vline(xintercept=1125, linetype="dashed", color = "red") + 
  geom_vline(xintercept=3375, linetype="dashed", color = "darkgreen") + 
  geom_vline(xintercept= 375, linetype="dashed", color = "darkgreen") + 
  geom_vline(xintercept= 4125, linetype="dashed", color = "darkgray") + 
  geom_vline(xintercept= -375, linetype="dashed", color = "darkgray")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

8.1 Gráficos avançados com ggplot2

#install.packages("readxl")
library(readxl)
dd <- read_excel("C:/Users/user/Desktop/R/Manipulação de dados/Udemy/Dados/TXT/datawranglingDADOSIDH.xlsx")
library(ggplot2)


dd$REGIAO <- ifelse(dd$UF %in% c("AM","RR","AP","PA","TO","RO","AC"), "1.Norte",
                    ifelse(dd$UF %in% c("MA","PI","CE","RN","PE","PB","SE","AL","BA"), "2.Nordeste",
                           ifelse(dd$UF %in% c("MT","MS","GO"), "3.Centro-Oeste",
                                  ifelse(dd$UF %in% c("SP","RJ","ES","MG"), "4.Sudeste", "5.Sul"))))
dd$REGIAO <- factor(dd$REGIAO, ordered = TRUE)

dd$ESCALA <- ifelse(dd$IDHM_2010 <= 0.499, "1.Muito Baixo",
                    ifelse(dd$IDHM_2010 <= 0.599, "2.Baixo",
                           ifelse(dd$IDHM_2010 <= 0.699, "3.Médio",
                                  ifelse(dd$IDHM_2010 <= 0.799, "4.Alto","5.Muito Alto"))))

dd$ESCALA <- factor(dd$ESCALA, ordered = TRUE) 


# Exemplo com nossos dados de IDH. Criando um scatterplot
ggplot(data = dd) +
  geom_point(mapping = aes(x = IDHM_2010, y = IDHM_RENDA, color = REGIAO, size = IDHM_EDUCACAO)) +
  labs(title = "Gráfico de pontos entre IDH total vs de renda por região",
       x = "IDH renda", y = "IDH Brasil") + 
  scale_colour_brewer(palette = "Greens")

# Quebrando o gráfico por categoria #

ggplot(data = dd) +
  geom_point(mapping = aes(x = IDHM_2010, y = IDHM_RENDA)) +
  ggtitle("Gráfico de pontos entre IDH total vs de renda por região") +
  xlab("IDH renda") + ylab("IDH Brasil") +
  facet_wrap( ~ REGIAO, nrow = 1, ncol = 5)

ggplot(data = dd) +
  geom_point(mapping = aes(x = IDHM_2010, y = IDHM_RENDA)) +
  ggtitle("Gráfico de pontos entre IDH total vs de renda por região") +
  xlab("IDH renda") + ylab("IDH Brasil") +
  facet_wrap(REGIAO ~ UF)

# Geometrias #

g1 <- ggplot(data = dd) +
  geom_point(mapping = aes(x = IDHM_2010, y = IDHM_RENDA)) +
  ggtitle("Gráfico de pontos") + xlab("IDH renda") + ylab("IDH Brasil")
g1

g2 <-  ggplot(data = dd) +
  geom_smooth(mapping = aes(x = IDHM_2010, y = IDHM_RENDA)) +
  ggtitle("Gráfico de linha suavizada") + xlab("IDH renda") + ylab("IDH Brasil")
g2
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

# Exemplos - Geometrias (geoms) #

g1 <-  ggplot(data = dd) +
  geom_smooth(mapping = aes(x = IDHM_2010, y = IDHM_RENDA, linetype = REGIAO)) +
  ggtitle("Gráfico de linha suavizada (tipo de linha)") + xlab("IDH renda") + ylab("IDH Brasil")

g2 <-  ggplot(data = dd) +
  geom_smooth(mapping = aes(x = IDHM_2010, y = IDHM_RENDA, group = REGIAO)) +
  ggtitle("Gráfico de linha suavizada (grupo)") + xlab("IDH renda") + ylab("IDH Brasil")

g3 <-  ggplot(data = dd) +
  geom_smooth(mapping = aes(x = IDHM_2010, y = IDHM_RENDA, color = REGIAO)) +
  ggtitle("Gráfico de linha suavizada (cor)") + xlab("IDH renda") + ylab("IDH Brasil")

g1
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

g2
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

g3
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

# Passando mappings para a função ggplot, melhora o uso dos geoms.
g1 <- ggplot(data = dd, mapping = aes(x = IDHM_2010, y = IDHM_RENDA)) +
  geom_smooth() +
  geom_point(mapping = aes(color = REGIAO)) +
  ggtitle("Gráfico de linha suavizada (multiplos geoms)") + xlab("IDH renda") + ylab("IDH Brasil")
g1
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

# Exemplos - Transformações estatísticas (Gráfico de Barras) #

g1 <- ggplot(data = dd) + geom_bar(mapping = aes(x = REGIAO)) +
  ggtitle("Gráfico de barras (Frequências)")
g1

g2 <- ggplot(data = dd) + geom_bar(mapping = aes(x = REGIAO, y = ..prop.., group = 1)) +
  ggtitle("Gráfico de barras (Proporção)")
g2

# Cores com barras #

g1 <- ggplot(data = dd, mapping = aes(x = REGIAO, color = REGIAO)) + 
  geom_bar(fill = NA, position = "identity") + ggtitle("Gráfico de barras (fill)") +   scale_colour_brewer()

g2 <- ggplot(data = dd, mapping = aes(x = REGIAO, fill = REGIAO)) + 
  geom_bar(alpha = 1, position = "identity") + ggtitle("Gráfico de barras (transparência)")
g3 <- ggplot(data = dd) + geom_bar(mapping = aes(x = REGIAO, fill = UF), position = "dodge") +
  ggtitle("Gráfico de barras (fill)")
g1

g2

g3

# Coordenadas #

g1 <- ggplot(data = dd, mapping = aes(x = REGIAO, fill = REGIAO)) +
  ggtitle("Gráfico de barras (horizontal)") +
  geom_bar() + coord_flip()
g2 <- ggplot(data = dd, mapping = aes(x = REGIAO, fill = REGIAO)) +
  ggtitle("Gráfico de barras (polar)") +
  geom_bar() + coord_polar()
g1

g2

# Variável contínua #

g1 <- ggplot(data = dd, aes(x = IDHM_2010))
g2 <- ggplot(data = dd)

g1

g2

g1 + geom_area(stat = "bin", bins = 50, fill = "red")

g1 + geom_density(kernel = "gaussian",
                  color = 1,
                  size = 1,
                  fill = "red")

g1

g1 + geom_dotplot(color = 1)
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

g1 <- g1 + geom_histogram(bins = 10, col = "black", fill = "red", alpha = 0.1);g1

# Com curva normal
ggplot(dd) +
  aes(x = IDHM_2010) + geom_histogram(fill = "lightblue", col = "black",
                                      alpha = 0.5,
                                      bins = 15,
                                      aes(y=..density..))+
  stat_function(fun = dnorm, args = list(mean = mean(dd$IDHM_2010), sd = sd(dd$IDHM_2010))) # inserir uma curva normal no histograma

# Variáveis por grupos #

f <- ggplot(data = dd, mapping = aes(x = IDHM_2010, fill = REGIAO))
g <- ggplot(data = dd, mapping = aes(x = REGIAO, y = IDHM_EDUCACAO, fill = REGIAO))
g1 <- f + geom_density(alpha = 0.4)
g2 <- g + geom_boxplot()
g3 <- g + geom_boxplot() + coord_flip()
g4 <- g + geom_violin()

g

g1

g2

g3

g4

# Variável catergórica 

g <- ggplot(data = dd, mapping = aes(x = REGIAO, fill = REGIAO))
g1 <- g + geom_bar() 
g2 <- g + geom_bar() + coord_flip()
g3 <- g + geom_bar(position = "fill", width = 2) + coord_flip()
g4 <- g + geom_bar(position = "fill", width = 2) + coord_polar()

g

g1

g2

g3
## Warning: position_stack requires non-overlapping x intervals

g4
## Warning: position_stack requires non-overlapping x intervals

# Continua x Continua #

g4 <- ggplot(data = dd, mapping = aes(x = IDHM_2010, y = dd$IDHM_LONGEVIDADE))
g4 + geom_point(alpha = 0.5, color = "lightblue")
## Warning: Use of `dd$IDHM_LONGEVIDADE` is discouraged. Use `IDHM_LONGEVIDADE`
## instead.

g4 + geom_quantile()
## Warning: Use of `dd$IDHM_LONGEVIDADE` is discouraged. Use `IDHM_LONGEVIDADE`
## instead.
## Smoothing formula not specified. Using: y ~ x

g4 + geom_rug(sides = "bl") + geom_quantile()
## Warning: Use of `dd$IDHM_LONGEVIDADE` is discouraged. Use `IDHM_LONGEVIDADE`
## instead.

## Warning: Use of `dd$IDHM_LONGEVIDADE` is discouraged. Use `IDHM_LONGEVIDADE`
## instead.
## Smoothing formula not specified. Using: y ~ x

g4 + geom_smooth(method = "lm")
## Warning: Use of `dd$IDHM_LONGEVIDADE` is discouraged. Use `IDHM_LONGEVIDADE`
## instead.
## `geom_smooth()` using formula 'y ~ x'

g4 + geom_smooth(method = "loess")
## Warning: Use of `dd$IDHM_LONGEVIDADE` is discouraged. Use `IDHM_LONGEVIDADE`
## instead.
## `geom_smooth()` using formula 'y ~ x'

# Gráficos discreta vs contínua #
             
g5 <- ggplot(data = dd, mapping = aes(x = REGIAO, y = IDHM_LONGEVIDADE, fill = REGIAO))
             
g5 + geom_col()

g5 + geom_boxplot() + coord_flip()

g5 + geom_violin() + coord_flip()

g5 + geom_col(size = 3) + scale_colour_brewer("Diamond\nclarity")

# Discreta x discreta #
             
g6 <- ggplot(data = dd, aes(x = REGIAO, y = ESCALA))
             
g6 + geom_count(color = "lightblue", stroke = 4)

8.2 GGALLY

library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## 
## Attaching package: 'GGally'
## The following object is masked from 'package:dplyr':
## 
##     nasa
da <- dd[,c(4:5, 7:8)]

g1 <- ggpairs(da, mapping = aes()) + ggtitle("Correlograma")

ggcorr(mtcars, nbreaks = 10)

ggcorr(dd[,4:7], name = expression(rho), geom = "circle", max_size = 10, min_size = 2,
       hjust = 0.75, nbreaks = 5, angle = -45, palette = "RdYLGn") 
## Warning in pal_name(palette, type): Unknown palette RdYLGn

scatmat(dd, columns = 4:7, color = "REGIAO")

library(ggthemes)

attach(dd)
g1 <- ggplot(data = dd, mapping = aes(x = REGIAO, y = IDHM_LONGEVIDADE, fill = REGIAO))
g2 <- g1 + geom_boxplot(show.legend = F) + labs(x = "", ylab = "", title = "") + 
  scale_fill_brewer(palette = "RdYlGn")
g3 <- g1 + geom_col(show.legend = F) + 
  labs(x = "", y = "", title = "") + scale_fill_brewer(palette = "Greens")

g2 + theme_base()

g2 + theme_economist()

g2 + theme_excel()

g2 + theme_excel_new()

# Interatividade no ggplot #
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
g1 <- ggplot(data = dd, mapping = aes(x = REGIAO, y = IDHM_LONGEVIDADE, fill = REGIAO))
g2 <- g1 + geom_boxplot(show.legend = F) + labs(x = "", ylab = "", title = "") + 
  scale_fill_brewer(palette = "RdYlGn")
g3 <- ggplot(data = da) + 
  geom_histogram(aes(x = IDHM_EDUCACAO, fill = REGIAO), show.legend = T) + 
  scale_fill_brewer(palette = "RdYlGn")
ggplotly(g2)
ggplotly(g3)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.