alt text
GET00100 - Estatística I
Análise Exploratória Bivariada 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 - Analisando existência de relação entre duas variáveis qualitativas
Suponha que o nosso desejo seja o de verificar a existência de associação/relação entre as variáveis aplicativo e classe.
# Carregando o pacote
library(expss)
library(dplyr)
#Criando uma tabela de contingência com as frequências observadas
baseApp |> #comece informando a base de dados
cross_cases(classe,aplicativo) #função que faz a tabela de dupla entrada com as frequências observadas alimentada com as duas variáveis de interesse| aplicativo | ||||
|---|---|---|---|---|
| Táxi Rio | Uber | 99 Pop | Drive-in | |
| classe | ||||
| A | 20 | 10 | 5 | 1 |
| B | 8 | 15 | 9 | 4 |
| Outras | 2 | 20 | 10 | 15 |
| #Total cases | 30 | 45 | 24 | 20 |
#Criando uma tabela de contingência com os percentuais por coluna
baseApp |> #comece informando a base de dados
cross_cpct(classe,aplicativo) #função que faz a tabela de dupla entrada com os % por coluna alimentada com as duas variáveis de interesse| aplicativo | ||||
|---|---|---|---|---|
| Táxi Rio | Uber | 99 Pop | Drive-in | |
| classe | ||||
| A | 66.7 | 22.2 | 20.8 | 5 |
| B | 26.7 | 33.3 | 37.5 | 20 |
| Outras | 6.7 | 44.4 | 41.7 | 75 |
| #Total cases | 30 | 45 | 24 | 20 |
#Criando uma tabela de contingência com os percentuais por linha
baseApp |> #comece informando a base de dados
cross_rpct(classe,aplicativo) #função que faz a tabela de dupla entrada com os % por linha alimentada com as duas variáveis de interesse| aplicativo | ||||
|---|---|---|---|---|
| Táxi Rio | Uber | 99 Pop | Drive-in | |
| classe | ||||
| A | 55.6 | 27.8 | 13.9 | 2.8 |
| B | 22.2 | 41.7 | 25.0 | 11.1 |
| Outras | 4.3 | 42.6 | 21.3 | 31.9 |
| #Total cases | 30 | 45 | 24 | 20 |
#Criando uma tabela de contingência com os percentuais pelo total
baseApp |> #comece informando a base de dados
cross_tpct(classe,aplicativo) #função que faz a tabela de dupla entrada com os % pelo total alimentada com as duas variáveis de interesse| aplicativo | ||||
|---|---|---|---|---|
| Táxi Rio | Uber | 99 Pop | Drive-in | |
| classe | ||||
| A | 16.8 | 8.4 | 4.2 | 0.8 |
| B | 6.7 | 12.6 | 7.6 | 3.4 |
| Outras | 1.7 | 16.8 | 8.4 | 12.6 |
| #Total cases | 30 | 45 | 24 | 20 |
E se o desejo fosse fazer um gráfico para resumir a relação entre as duas variáveis?
#Carregando pacote
library(ggplot2)
library(scales)
#Gráfico de barras empilhadas
baseApp |> #comece informando a base de dados
filter(!is.na(aplicativo)) |> #retirando as linhas que são NA para aplicativo
ggplot(mapping = aes(x = aplicativo,
fill = classe)) + #estamos definindo que no eixo x será apresentado as categorias da variável aplicativo e cada coluna do aplicativa sera particionada nas categorias de classe
geom_bar(position = "fill") + #definimos que o formato do gráfico é de barras e as barras são empilhadas
labs(x = "Aplicativo",
y = "%",
fill = "Classe") + #cuidando dos rótulos
scale_y_continuous(labels = scales::percent_format()) + #fazendo o eixo y ser apresentado em %
theme_classic() #modificando o tema do gráficoComo quantificar a relação entre aplicativo e classe?
#Caculando o qui-quadrado
aux = chisq.test(table(baseApp$aplicativo, baseApp$classe),
correct = FALSE)
#Acessando o qui-quadrado
aux$statisticX-squared
35.28583
#Calculando Coeficiente de contingência
C = sqrt(aux$statistic/(aux$statistic+120))
CX-squared
0.476688
#Calculando V de Cramer
V = sqrt((aux$statistic/120)/min(4-1,3-1))
VX-squared
0.3834375
3 - Analisando existência de relação entre duas variáveis quantitativas
Suponha que o nosso desejo seja o de verificar a existência de associação/relação entre as variáveis Satisfação preço e staisfação serviço.
#Gráfico de dispersão
baseApp |> #comece informando a base de dados
ggplot(mapping = aes(x = satisfacao_preco,
y = satisfacao_servico)) + #estamos definindo que no eixo x será apresentado a satisfação com o preço e no eixo y a satisfação com o serviço
geom_point() + #definimos que o formato do gráfico é de pontos (gráfico de dispersão)
labs(x = "Satisfação preço",
y = "Satisfação serviço") + #cuidando dos rótulos
theme_classic() #modificando o tema do gráficoComo quantificar a relação entre aplicativo e classe?
#Caculando a correlação
cor(baseApp$satisfacao_preco, baseApp$satisfacao_servico)[1] 0.9377661
4 - Analisando existência de relação entre uma variável quantitativa e uma quaitativa
Suponha que o nosso desejo seja o de verificar a existência de associação/relação entre as variáveis idade e aplicativo.
#Obtendo medidas resumos
resumo = baseApp |> #comece indicando a base
filter(!is.na(aplicativo)) |> #retirando as linhas que são NA em aplicativo
group_by(aplicativo) |> #defina os grupos para os quais as medidas serão caclculadas
summarise(media = mean(idade, na.rm = TRUE), #função que calcula a média
variancia = var(idade, na.rm = TRUE), #função que calcula a variância amostral,
n = n() #função que contabiliza o número de linhas
)
#Visualizando o objeto
resumo# A tibble: 4 × 4
aplicativo media variancia n
<fct> <dbl> <dbl> <int>
1 Táxi Rio 44 105. 30
2 Uber 24.1 12.8 45
3 99 Pop 32 54.3 24
4 Drive-in 38.2 186. 20
Graficamente?
#Criando um boxplot
baseApp |> #comece informando a base de dados
filter(!is.na(aplicativo)) |> #retirando as linhas sem informação de aplicativo
ggplot(mapping = aes(x = aplicativo,
y = idade)) + #estamos definindo que no eixo x será apresentado os valores da variável aplicativo e no eixo y da idade
geom_boxplot() + #estamos definindo o formato do gráfico, que será um boxplot
theme_minimal() #modificando a temática do gráficoQuantificando a relação
#Calculando a média ponderada entre as variâncias da idade em cada grupo
Var_med = sum((resumo$variancia*resumo$n))/sum(resumo$n)
Var_med[1] 73.42735
#Calculando R2
R2 = 1 - Var_med/var(baseApp$idade, na.rm = TRUE)
R2[1] 0.45633
Atividade 1: Existe relação entre aplicativo e o tempo que é cliente do serviço?
Atividade 2: Existe relação entre aplicativo e satisfação com o serviço?
Atividade 3: Existe relação entre satisfação com o preço e idade?