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
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
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
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
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
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;
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 ...
Aqui fazemos com que o R leia um determinado valor como missing, igual fizemos no SPSS
dados[dados==9999] <- NA
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
#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
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
# 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)
# 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)
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)
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)
#install.packages("outliers")
library(outliers)
outlier(dados$Preços) # superior
## [1] 200
outlier(dados$Preços, opposite = T) # inferior
## [1] 11
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)
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
#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" ...
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
#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
#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)
#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`.
#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)
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`.