alt text
GET00100 - Estatística I
Análise Exploratória Univariada de Dados no R
Conteúdo
- Tabelas usando o pacote expss;
- Gráficos usando ggplot2.
1 - Importando e tratando a base de dados
Inicialmente importaremos o arquivo base_app.csv.
# Carregando o pacote
library(readr)
#Importando o arquivo base_app.csv
baseApp = read_csv2(file = "base_app.csv", #nome do arquivo com extensão e entre aspas
na = "8888", #indicando o código usado para informar dado faltante
col_types = cols(codigo = col_character())) #importando a variável col_types como um character
#Visualizando o objeto
baseApp# A tibble: 120 × 9
codigo aplicativo sexo classe umano idade satisfacao_preco satisfacao_carro
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4440 4 1 3 0 49 92 71
2 2448 4 1 3 0 43 92 68
3 2611 1 0 1 0 24 45 66
4 4800 4 1 3 1 63 105 71
5 4653 3 0 2 0 29 75 67
6 1402 3 0 1 0 23 80 72
7 1565 1 1 3 1 59 66 78
8 2350 3 0 2 0 25 74 73
9 2641 2 1 3 1 30 74 75
10 4185 1 0 1 1 41 60 70
# … with 110 more rows, and 1 more variable: satisfacao_servico <dbl>
#Obtendo resumos rápidos da base
summary(baseApp) codigo aplicativo sexo classe
Length:120 Min. :1.000 Min. :0.0000 Min. :1.000
Class :character 1st Qu.:1.500 1st Qu.:0.0000 1st Qu.:1.000
Mode :character Median :2.000 Median :1.0000 Median :2.000
Mean :2.286 Mean :0.5667 Mean :2.092
3rd Qu.:3.000 3rd Qu.:1.0000 3rd Qu.:3.000
Max. :4.000 Max. :1.0000 Max. :3.000
NA's :1
umano idade satisfacao_preco satisfacao_carro
Min. :0.000 Min. :18.00 Min. : 35.00 Min. :56.00
1st Qu.:0.000 1st Qu.:24.00 1st Qu.: 61.00 1st Qu.:68.00
Median :1.000 Median :29.00 Median : 71.00 Median :70.00
Mean :0.625 Mean :32.97 Mean : 70.84 Mean :70.19
3rd Qu.:1.000 3rd Qu.:40.00 3rd Qu.: 80.00 3rd Qu.:72.25
Max. :1.000 Max. :63.00 Max. :105.00 Max. :80.00
NA's :1
satisfacao_servico
Min. :68.00
1st Qu.:76.00
Median :79.00
Mean :79.38
3rd Qu.:83.00
Max. :91.00
#Transformando as variáveis qualitativas em fatores
baseApp$aplicativo = factor(x = baseApp$aplicativo, #conjunto de valores que serão transformados
levels = c(1,2,3,4), #sequência de valores que a variável assume
labels = c("Táxi Rio", "Uber", "99 Pop", "Drive-in")) #sequência de rótulos, obedece a sequência de levels
baseApp$sexo = factor(x = baseApp$sexo,
levels = c(0,1),
labels = c("Feminino", "Masculino"))
baseApp$classe = factor(x = baseApp$classe,
levels = c(1,2,3),
labels = c("A", "B", "Outras"))
baseApp$umano = factor(x = baseApp$umano,
levels = c(0,1),
labels = c("Não", "Sim"))
#Refazendo o summary
summary(baseApp) codigo aplicativo sexo classe umano
Length:120 Táxi Rio:30 Feminino :52 A :36 Não:45
Class :character Uber :45 Masculino:68 B :37 Sim:75
Mode :character 99 Pop :24 Outras:47
Drive-in:20
NA's : 1
idade satisfacao_preco satisfacao_carro satisfacao_servico
Min. :18.00 Min. : 35.00 Min. :56.00 Min. :68.00
1st Qu.:24.00 1st Qu.: 61.00 1st Qu.:68.00 1st Qu.:76.00
Median :29.00 Median : 71.00 Median :70.00 Median :79.00
Mean :32.97 Mean : 70.84 Mean :70.19 Mean :79.38
3rd Qu.:40.00 3rd Qu.: 80.00 3rd Qu.:72.25 3rd Qu.:83.00
Max. :63.00 Max. :105.00 Max. :80.00 Max. :91.00
NA's :1
2 - Resumindo uma variável qualitativa
Suponha que o nosso desejo seja o de resumir a variável aplicativo. Como já vimos, o summary já nos forneceu as frequências absolutas das categorias desta variável, mas possuímos outras formas de obter mais frequências associadas a esta variável, por exemplo, usando a função fre
# Carregando o pacote
library(expss)
library(dplyr)
#Criando uma tabela de distribuições de frequência para uma variável
baseApp |> #comece informando a base de dados
select(aplicativo) |> #depois selecione da base a variável para a qual será criada a tabela
fre() #a seguir use a função que cria a tabela| select(baseApp, aplicativo) | Count | Valid percent | Percent | Responses, % | Cumulative responses, % |
|---|---|---|---|---|---|
| Táxi Rio | 30 | 25.2 | 25.0 | 25.2 | 25.2 |
| Uber | 45 | 37.8 | 37.5 | 37.8 | 63.0 |
| 99 Pop | 24 | 20.2 | 20.0 | 20.2 | 83.2 |
| Drive-in | 20 | 16.8 | 16.7 | 16.8 | 100.0 |
| #Total | 119 | 100 | 99.2 | 100 | |
| <NA> | 1 | 0.8 |
Se o nosso interesse fosse uma análise da variável aplicativo, mas somente para indivíduos do sexo masculino?
#Criando uma tabela de distribuições de frequência para uma variável
baseApp |> #comece informando a base de dados
filter(sexo == "Masculino") |> #selecione somente as linhas em que sexo está preenchida com Masculino
select(aplicativo) |> #depois selecione da base a variável para a qual será criada a tabela
fre() #a seguir use a função que cria a tabela| select(filter(baseApp, sexo == “Masculino”), aplicativo) | Count | Valid percent | Percent | Responses, % | Cumulative responses, % |
|---|---|---|---|---|---|
| Táxi Rio | 15 | 22.1 | 22.1 | 22.1 | 22.1 |
| Uber | 30 | 44.1 | 44.1 | 44.1 | 66.2 |
| 99 Pop | 13 | 19.1 | 19.1 | 19.1 | 85.3 |
| Drive-in | 10 | 14.7 | 14.7 | 14.7 | 100.0 |
| #Total | 68 | 100 | 100 | 100 | |
| <NA> | 0 | 0.0 |
E se o desejo fosse fazer um gráfico para resumir a variável aplicativo?
Poderíamos começar fazendo um gráfico de barras.
#Carregando pacote
library(ggplot2)
#Criando um gráfico de barras
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(x = aplicativo)) + #estamos definindo que no eixo x será apresentado as categorias da variável aplicativo
geom_bar() #estamos definindo o formato do gráfico, que será um gráfico de barrasComo fazer o gráfico retirando o NA?
#Criando um gráfico de barras retirando os NA da variável
baseApp |> #comece informando a base de dados
filter(!is.na(aplicativo)) |> #selecionando somente as linhas diferentes de NA para a variável aplicativo
ggplot(mapping = aes(x = aplicativo)) + #estamos definindo que no eixo x será apresentado as categorias da variável aplicativo
geom_bar() #estamos definindo o formato do gráfico, que será um gráfico de barrasVamos realizar algumas melhorias estéticas no gráfico??
#Criando um gráfico de barras retirando os NA da variável
baseApp |> #comece informando a base de dados
filter(!is.na(aplicativo)) |> #selecionando somente as linhas diferentes de NA para a variável aplicativo
ggplot(mapping = aes(x = aplicativo)) + #estamos definindo que no eixo x será apresentado as categorias da variável aplicativo
geom_bar(fill = "red") + #estamos definindo o formato do gráfico, que será um gráfico de barras preenchidas com vermelho
labs(x = "Aplicativo", y = "Frequência") + #Modificando os rótulos dos eixos
theme_classic() #Mudando o tema do gráficoComo fazer o gráfico em proporção?
#Carregando pacote
library(scales)
#Criando um gráfico de barras retirando os NA da variável
baseApp |> #comece informando a base de dados
filter(!is.na(aplicativo)) |> #selecionando somente as linhas diferentes de NA para a variável aplicativo
ggplot(mapping = aes(x = aplicativo,
y = ..prop..,
group = 1)) + #estamos definindo que no eixo x será apresentado as categorias da variável aplicativo e no y as proporções
geom_bar(fill = "red") + #estamos definindo o formato do gráfico, que será um gráfico de barras preenchidas com vermelho
labs(x = "Aplicativo", y = "Porcentagem") + #Modificando os rótulos dos eixos
theme_classic() + #Mudando o tema do gráfico
scale_y_continuous(labels = scales::percent_format()) #Fazendo com que o rótulo seja em formato de percentual3 - Resumindo uma variável quantitativa
Suponha que o nosso desejo seja o de resumir a variável idade. Como já vimos, o summary já nos forneceu algumas medidas de posição da variável, mas poderíamos obter outras? Como obter medidas de dispersão?
#Obtendo medidas resumos
resumo = baseApp |> #comece indicando a base
summarise(media = mean(idade, na.rm = TRUE), #função que calcula a média
mediana = median(idade, na.rm = TRUE), #função que calcula a mediana
q_0.9 = quantile(idade, probs = 0.9, na.rm = TRUE), #função que calcula um quantil qualquer, probs é a % abaixo do valor calculado
q_0.1 = quantile(idade, probs = 0.1, na.rm = TRUE),
q1 = quantile(idade, probs = 0.25, na.rm = TRUE),
q3 = quantile(idade, probs = 0.75, na.rm = TRUE),
maximo = max(idade, na.rm = TRUE), #função que calcula o máximo
dp = sd(idade, na.rm = TRUE), #função que calcula o desvio padrão amostral
var = var(idade, na.rm = TRUE), #função que calcula a variância amostral
dam = mad(idade, na.rm = TRUE) #função que calcula o desvio absoluto mediano
)
#Visualizando o objeto
resumo# A tibble: 1 × 10
media mediana q_0.9 q_0.1 q1 q3 maximo dp var dam
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 33.0 29 49 20 24 40 63 11.6 135. 11.9
E se quiséssemos acrescentar medidas calculadas CV, Coeficiente de assimetria e curtose?
#Incluindo outras medidas resumos
resumo = resumo |> #inicie indicando o objeto que contém as medidas resumos
mutate(CV = dp/media*100,
AS = 3*(media - mediana)/dp,
Curtose = (q3-q1)/(2*(q_0.9-q_0.1)))
#Visualizando o objeto
resumo# A tibble: 1 × 13
media mediana q_0.9 q_0.1 q1 q3 maximo dp var dam CV AS
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 33.0 29 49 20 24 40 63 11.6 135. 11.9 35.2 1.03
# … with 1 more variable: Curtose <dbl>
E como podemos resumir graficamente?
#Criando um histograma
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(x = idade)) + #estamos definindo que no eixo x será apresentado os valores da variável idade
geom_histogram() #estamos definindo o formato do gráfico, que será um hitogramaMudando o número de classes e a estética do gráfico.
#Criando um histograma
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(x = idade)) + #estamos definindo que no eixo x será apresentado os valores da variável idade
geom_histogram(bins = 10,
fill = "lightblue",
colour = "red") + #estamos definindo o formato do gráfico, que será um hitograma e definindo a quantidade de classes, preenchido de azul e as linhas serão vermelhas
labs(x = "Idade", y = "Frequência") +
theme_light() #modificando a temática do gráficoPoderíamos definir onde começa e onde termina cada classe do histograma?
#Criando um histograma
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(x = idade,
y = ..density..)) + #estamos definindo que no eixo x será apresentado os valores da variável idade e no eixo y a densidade
geom_histogram(breaks = c(18,30,40,50,70),
fill = "lightblue") + #estamos definindo o formato do gráfico, que será um hitograma e definindo a quantidade de classes +
labs(x = "Idade") +
theme_light() #modificando a temática do gráficoComo fazer um boxplot?
#Criando um histograma
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(y = idade)) + #estamos definindo que no eixo y será apresentado os valores da variável idade
geom_boxplot(fill = "pink") + #estamos definindo o formato do gráfico, que será um boxplot e definindo que ele será preenchido de rosa +
labs(y = "Idade") +
theme_minimal() #modificando a temática do gráficoO boxplot poderia ser feito deitado?
#Criando um histograma
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(y = idade)) + #estamos definindo que no eixo y será apresentado os valores da variável idade
geom_boxplot(fill = "pink") + #estamos definindo o formato do gráfico, que será um boxplot e definindo que ele será preenchido de rosa +
labs(y = "Idade") +
theme_minimal() + #modificando a temática do gráfico
coord_flip() #invertendo os eixosAtividade 1: Crie uma tabela e um gráfico para as variáveis sexo e classe.
Atividade 2: Obtenha medidas de posição e dispersão e faça um gráfico adequado para as variáveis satisfacao_preco e satisfacao_servico.