Nesse tutorial vamos nos aventurar na análise e visualização de dados, nosso intuito é mostrar os principais códigos para que vocês consigam ter autonomia no desenvolvimento das próximas atividades.

Vamos usar o dataset do Brasil.io sobre o Prouni. Entre nesse link para baixar o arquivo e depois carregue os dados no R, para facilitar o processo, mantenha esse dataset na mesma pasta que o arquivo R que você está usando. Caso precise, retorne ao tutorial anterior para copiar alguns códigos:

  1. Instale e carregue o pacote tidyverse

O tidyverse é um pacote desenvolvido para Ciência de Dados. Vamos instalá-lo, porque possui os dois pacotes que vamos usar nesse turtorial, dplyr e ggplot. Desse modo, só precisaremos carregar um pacote. Você já viu como instalar e carregar um pacote no tutorial anterior. Tente fazer isso com o tidyverse sozinha. Caso não consiga, compare seu código com o abaixo.

install.packages("tidyverse")
library(tidyverse)
## -- Attaching packages ---------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v purrr   0.3.4
## v tibble  2.1.3     v dplyr   0.8.5
## v tidyr   1.0.2     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## -- Conflicts ------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
  1. Carregue o dataset

Dentro da função read.csv(), usaremos o argumento fileEncoding = “UTF-8” para que as observações com acento sejam lidas corretamente.

# carregando um dataset
prouni <- read.csv('cursos.csv', sep = ',', fileEncoding = "UTF-8")
  1. Visualize as 6 primeiras linhas do dataset
##          grau    turno mensalidade bolsa_integral_cotas bolsa_integral_ampla
## 1 Bacharelado Integral     9999.99                   15                   14
## 2 Bacharelado  Noturno     9836.40                    1                   NA
## 3 Bacharelado Integral     9715.61                    2                    5
## 4 Bacharelado  Noturno     9689.34                    3                    2
## 5 Bacharelado Integral     9674.34                    4                    1
## 6 Bacharelado Integral     9650.00                    8                   15
##   bolsa_parcial_cotas bolsa_parcial_ampla     curso_id curso_busca
## 1                  NA                  NA 7.067104e+11    Medicina
## 2                  NA                  NA 1.041912e+14  Enfermagem
## 3                   6                  10 1.002329e+12    Medicina
## 4                  NA                  NA 1.041912e+14  Psicologia
## 5                   5                   2 6.589961e+13    Medicina
## 6                  NA                  NA 6.578156e+10    Medicina
##          cidade_busca uf_busca    cidade_filtro
## 1        Campo Grande       MS NTAwMjAwNDAyNzA0
## 2             Crateus       CE MjMwNDAxODA0MTAz
## 3           Sao Paulo       SP MzUxNTA2MTUwMzA4
## 4             Crateus       CE MjMwNDAxODA0MTAz
## 5          Rio Branco       AC MTIwMjAwNDAwNDAx
## 6 Presidente Prudente       SP MzUwODAzNjQxNDA2
##                           universidade_nome
## 1         Universidade Anhanguera - UNIDERP
## 2         Faculdade Princesa do Oeste - FPO
## 3 Universidade Cidade de São Paulo - UNICID
## 4         Faculdade Princesa do Oeste - FPO
## 5       Faculdade Barão do Rio Branco - FAB
## 6  Universidade do Oeste Paulista - UNOESTE
##                                                                campus_nome
## 1                                       CAMPO GRANDE - SEDE - Miguel Couto
## 2                                               UNIDADE SEDE - São Vicente
## 3               UNIVERSIDADE CIDADE DE SÃO PAULO - UNICID - SEDE - Tatuapé
## 4                                               UNIDADE SEDE - São Vicente
## 5               CAMPUS  - RIO BRANCO - JARDIM EUROPA II - Jardim Europa II
## 6 CAMPUS I  SEDE ADMINISTRATIVA PRESIDENTE PRUDENTE - Cidade Universitária
##   campus_external_id       nome nota_integral_ampla nota_integral_cotas
## 1             706710   Medicina              740.22              726.46
## 2            1041912 Enfermagem              663.36                  NA
## 3            1002328   Medicina              739.62              738.08
## 4            1041912 Psicologia              651.00              652.22
## 5             658996   Medicina              758.32              723.94
## 6             657815   Medicina              738.92              728.86
##   nota_parcial_ampla nota_parcial_cotas
## 1                 NA                 NA
## 2                 NA                 NA
## 3             738.96             718.64
## 4                 NA                 NA
## 5             734.92             711.26
## 6                 NA                 NA
  1. Visualize as 6 últimas linhas do dataset
##               grau             turno mensalidade bolsa_integral_cotas
## 41442  Tecnológico Curso a Distância         149                    0
## 41443 Licenciatura Curso a Distância         149                    1
## 41444  Tecnológico Curso a Distância         144                    1
## 41445  Tecnológico        Vespertino         139                    1
## 41446  Bacharelado Curso a Distância         139                    1
## 41447  Tecnológico Curso a Distância         139                    3
##       bolsa_integral_ampla bolsa_parcial_cotas bolsa_parcial_ampla     curso_id
## 41442                    1                  NA                  NA 9.671138e+11
## 41443                   NA                  NA                  NA 9.943129e+11
## 41444                    2                   2                   5 6.586871e+13
## 41445                   NA                  NA                  NA 1.056446e+12
## 41446                   NA                  NA                  NA 9.678121e+10
## 41447                    1                  NA                  NA 2.004674e+14
##                      curso_busca         cidade_busca uf_busca    cidade_filtro
## 41442           Gestão Comercial              Taubate       SP MzUxMzA1MDU0MTAy
## 41443                 Sociologia Paraiso do Tocantins       TO MTcwMTAwNDE2MTA5
## 41444                  Marketing          Sao VIcente       SP MzUxNTA2MzUxMDA5
## 41445 Gestão de Recursos Humanos             Brasilia       DF NTMwMTAwMTAwMTA4
## 41446             Serviço Social              Vitoria       ES MzIwMzAwOTA1MzA5
## 41447           Gestão Ambiental             Santarem       PA MTUwMTAwMjA2ODA3
##                                                           universidade_nome
## 41442                                          Universidade Paulista - UNIP
## 41443                                          Universidade Paulista - UNIP
## 41444                                        Faculdade de São VIcente - FSV
## 41445 Centro Universitário Planalto do Distrito Federal - Uniplan - UNIPLAN
## 41446                                          Universidade Paulista - UNIP
## 41447                                          Universidade Paulista - UNIP
##                                                         campus_nome
## 41442                                    TAUBATÉ I - Campos Elíseos
## 41443                                 PARAISO DO TOCANTINS - Centro
## 41444                                         UNIDADE SEDE - Centro
## 41445 DF03 - UNIDADE BRASIL CENTRAL - Taguatinga Norte (Taguatinga)
## 41446                                    VITORIA I - Barro Vermelho
## 41447                                             SANTARÉM - Fátima
##       campus_external_id                       nome nota_integral_ampla
## 41442               9671           Gestão Comercial              504.18
## 41443               9943                 Sociologia              502.36
## 41444             658687                  Marketing              533.34
## 41445            1056445 Gestão de Recursos Humanos              580.76
## 41446               9678             Serviço Social              548.26
## 41447            2004674           Gestão Ambiental              605.32
##       nota_integral_cotas nota_parcial_ampla nota_parcial_cotas
## 41442                  NA                 NA                 NA
## 41443                  NA                 NA                 NA
## 41444               450.0                450                450
## 41445                  NA                 NA                 NA
## 41446                  NA                 NA                 NA
## 41447               573.7                 NA                 NA
  1. Visualize a estrutura do dataset
## 'data.frame':    41447 obs. of  20 variables:
##  $ grau                : Factor w/ 3 levels "Bacharelado",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ turno               : Factor w/ 5 levels "Curso a Distância",..: 2 4 2 4 2 2 2 2 2 2 ...
##  $ mensalidade         : num  10000 9836 9716 9689 9674 ...
##  $ bolsa_integral_cotas: int  15 1 2 3 4 8 3 4 7 13 ...
##  $ bolsa_integral_ampla: int  14 NA 5 2 1 15 5 3 5 4 ...
##  $ bolsa_parcial_cotas : int  NA NA 6 NA 5 NA NA NA NA NA ...
##  $ bolsa_parcial_ampla : int  NA NA 10 NA 2 NA NA NA NA NA ...
##  $ curso_id            : num  7.07e+11 1.04e+14 1.00e+12 1.04e+14 6.59e+13 ...
##  $ curso_busca         : Factor w/ 296 levels "Administração",..: 211 80 211 250 211 211 211 211 211 211 ...
##  $ cidade_busca        : Factor w/ 1158 levels "Abaete","Abaetetuba",..: 208 315 1007 315 882 846 639 983 325 586 ...
##  $ uf_busca            : Factor w/ 27 levels "AC","AL","AM",..: 12 6 26 6 1 26 26 11 13 5 ...
##  $ cidade_filtro       : Factor w/ 1172 levels "MjcwMjAwNjAwMzAw",..: 1050 170 739 170 260 645 655 460 1117 144 ...
##  $ universidade_nome   : Factor w/ 1299 levels "Alfa - Faculdade de Almenara",..: 1235 914 1247 914 256 1268 1258 121 1255 362 ...
##  $ campus_nome         : Factor w/ 4774 levels "(SEDE) - Flor da Serra",..: 376 4573 4684 4573 606 775 4399 4616 4154 4410 ...
##  $ campus_external_id  : int  706710 1041912 1002328 1041912 658996 657815 657884 658611 658099 105059 ...
##  $ nome                : Factor w/ 296 levels "Administração",..: 211 80 211 250 211 211 211 211 211 211 ...
##  $ nota_integral_ampla : num  740 663 740 651 758 ...
##  $ nota_integral_cotas : num  726 NA 738 652 724 ...
##  $ nota_parcial_ampla  : num  NA NA 739 NA 735 ...
##  $ nota_parcial_cotas  : num  NA NA 719 NA 711 ...

1 Estatística Descritiva

A partir de agora vamos analisar os dados sobre do dataset que você acabou de carregar. Essa análise não tem nenhuma fundamentação teórica e busca apenas demonstrar como analisar dados no R.

1.1 Variável categórica

A primeira coluna do data frame se refere ao grau do curso, como é uma variável categórica vamos tirar a frequência das observações em cada categoria com a função table(). Se essa é sua primeira vez usando a função, não se esqueça de checar a documentação antes, ?table.

table(prouni$grau)
## 
##  Bacharelado Licenciatura  Tecnológico 
##        19165         8802        13480

Essa função retornou quantos cursos existem em cada categoria. Conseguimos entender que Bacharelado > Tecnológico > Licenciatura, porém fica difícil comparar com números absolutos. Seria mais fácil comparar com a frequência relativa. Por isso, no código abaixo adicionamos a função prop.table() e multiplicamos o valor por 100, para retornar a porcentagem.

prop.table(table(prouni$grau)) * 100
## 
##  Bacharelado Licenciatura  Tecnológico 
##     46.23978     21.23676     32.52346

Outra forma de fazer isso é através da função group_by() do pacote dplyr, que agrupa as observações por categoria, depois podemos pedir a contagem e a proporção das observações. E retornamos uma tabela em ordem decrescente. Usamos várias funções do pacote dplyr, leia atentamente os comentários e busque informações sobre cada uma com ? ou a função help(). Ademais, rode uma linha de cada vez para entender o que cada parte faz. A última função é do pacote knitr e apresenta o resultado formatado em uma tabela.

#instalando o pacote
install.packages("knitr")
#carregando o pacote
library(knitr)


prouni %>% 
  group_by(grau) %>% #agrupando as observacoes por mes
  summarize(n = n()) %>%  #quantas observacoes existem em cada categoria
  mutate(prop = round(n / sum(n) * 100,2)) %>% #transformando em porcentagem
  arrange(-n) %>%  #ordem decrescente
  knitr::kable(col.names = c('Curso', 'N', 'Porcentagem(%)')) # saindo em formato de tabela e com os nomes das colunas
Curso N Porcentagem(%)
Bacharelado 19165 46.24
Tecnológico 13480 32.52
Licenciatura 8802 21.24

1.2 Exercício 1

Para treinar tente obter a frequência e a frequência relativa das outras variáveis categóricas.

2 Variável contínua

A mensalidade é uma variável contínua. Portanto, vamos obter a média, a mediana, o desvio padrão, os valores mínimo e máximo. Podemos fazer isso usando uma função para cada medida, ou pedir o summary() da variável, que traz informações sobre os quartis também. Tente fazer o mesmo com a variável “nota_integral_ampla”.

# media
mean(prouni$mensalidade)
## [1] 622.637
#mediana
median(prouni$mensalidade)
## [1] 393.35
#desvio padrao
sd(prouni$mensalidade)
## [1] 606.4423
#min
min(prouni$mensalidade)
## [1] 139
#max
max(prouni$mensalidade)
## [1] 9999.99
#descrevendo a variavel
summary(prouni$mensalidade)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   139.0   278.0   393.4   622.6   825.0 10000.0

E se quisermos saber qual estado tem a maior mensalidade em média? Poderíamos usar as funções do pacote dplyr.

prouni %>% 
  group_by(uf_busca) %>% 
  summarize(media = round(mean(mensalidade), 2)) %>% 
  arrange(-media) %>% 
  kable(col.names = c('UF', 'Mensalidade Média (R$)'))
UF Mensalidade Média (R$)
CE 801.65
RJ 745.49
RS 743.00
MA 728.63
PB 696.57
RN 679.60
MG 668.96
DF 666.95
RO 661.99
SE 642.08
BA 639.85
PE 635.09
PI 629.50
ES 621.28
PR 602.33
SP 591.41
TO 588.33
AP 578.47
AM 576.65
AC 570.74
SC 560.69
GO 557.59
AL 534.48
PA 518.93
MT 491.55
MS 461.72
RR 428.60

2.1 Exercício 2

Agora tente descobrir quais são os seis cursos (Curso) com as maiores notas (Nota Integral Ampla) em média.

prouni %>% 
  group_by(curso_busca) %>% 
  summarize(media = mean(nota_integral_ampla, na.rm = TRUE)) %>% 
  arrange(-media) %>% 
  head() %>% 
kable(col.names = c('Curso', 'Nota Integral Ampla'))
Curso Nota Integral Ampla
Medicina 749.5466
Design de Games 747.7600
Engenharia Aeronáutica e Espaço 711.5800
Engenharia de Materiais e Nanotecnologia 707.3800
Engenharia Aeronáutica 694.4760
Comunicação Social - Cinema 693.4800

2.2 Summary do Data Frame

Uma forma de obter estatísticas descritivas de todas as variáveis do data frame é através da função summary(). Só precisamos nos atentar e não interpretar as estatísticas descritivas das variáveis id, porque elas apenas identificam as observações.

summary(prouni) 
##            grau                     turno        mensalidade     
##  Bacharelado :19165   Curso a Distância:22926   Min.   :  139.0  
##  Licenciatura: 8802   Integral         :  640   1st Qu.:  278.0  
##  Tecnológico :13480   Matutino         : 5175   Median :  393.4  
##                       Noturno          :12196   Mean   :  622.6  
##                       Vespertino       :  510   3rd Qu.:  825.0  
##                                                 Max.   :10000.0  
##                                                                  
##  bolsa_integral_cotas bolsa_integral_ampla bolsa_parcial_cotas
##  Min.   : 0.000       Min.   : 1.000       Min.   : 1.00      
##  1st Qu.: 0.000       1st Qu.: 1.000       1st Qu.: 1.00      
##  Median : 1.000       Median : 1.000       Median : 1.00      
##  Mean   : 1.535       Mean   : 2.514       Mean   : 1.87      
##  3rd Qu.: 2.000       3rd Qu.: 3.000       3rd Qu.: 2.00      
##  Max.   :58.000       Max.   :67.000       Max.   :74.00      
##  NA's   :8927         NA's   :16043        NA's   :32619      
##  bolsa_parcial_ampla    curso_id                             curso_busca   
##  Min.   :  1.000     Min.   :2.249e+07   Administração             : 2754  
##  1st Qu.:  1.000     1st Qu.:6.460e+11   Pedagogia                 : 2555  
##  Median :  2.000     Median :2.004e+12   Ciências Contábeis        : 2056  
##  Mean   :  8.633     Mean   :4.207e+13   Gestão de Recursos Humanos: 1595  
##  3rd Qu.:  6.000     3rd Qu.:1.037e+14   Educação Física           : 1528  
##  Max.   :350.000     Max.   :2.009e+14   Serviço Social            : 1166  
##  NA's   :28406                           (Other)                   :29793  
##          cidade_busca      uf_busca              cidade_filtro  
##  Sao Paulo     : 3224   SP     :11533   MzUxNTA2MTUwMzA4: 3224  
##  Brasilia      : 1063   MG     : 4175   NTMwMTAwMTAwMTA4: 1063  
##  Curitiba      :  937   PR     : 3918   NDExMDAzNzA2OTAy:  937  
##  Belo Horizonte:  793   RS     : 3060   MzEwNzAzMDA2MjAw:  793  
##  Salvador      :  714   BA     : 2505   MjkwNTAyMTI3NDA4:  714  
##  Campinas      :  588   SC     : 2195   MzUwNzAzMjA5NTAy:  588  
##  (Other)       :34128   (Other):14061   (Other)         :34128  
##                                                               universidade_nome
##  Centro Universitário Internacional - Uninter - UNINTER                : 7335  
##  Universidade Paulista - UNIP                                          : 3800  
##  Universidade Pitágoras Unopar                                         : 2163  
##  Faculdade Educacional da Lapa - FAEL                                  : 1198  
##  Centro Universitário de Maringá - Unicesumar - Unicesumar - UNICESUMAR: 1047  
##  Universidade Anhanguera - UNIDERP                                     : 1044  
##  (Other)                                                               :24860  
##                         campus_nome    campus_external_id
##  UNIDADE SEDE - Centro        :  610   Min.   :    224   
##  SANTO AMARO - Santo Amaro    :  121   1st Qu.:  11723   
##  RUA AUGUSTA - Consolação     :  118   Median : 658755   
##  UNIDADE SEDE - Boa Vista     :  118   Mean   : 678653   
##  VILA PRUDENTE - Vila Prudente:  110   3rd Qu.:1058794   
##  MEMORIAL - Barra Funda       :  109   Max.   :2008633   
##  (Other)                      :40261                     
##                          nome       nota_integral_ampla nota_integral_cotas
##  Administração             : 2754   Min.   :450.0       Min.   :450.0      
##  Pedagogia                 : 2555   1st Qu.:544.4       1st Qu.:532.9      
##  Ciências Contábeis        : 2056   Median :580.7       Median :571.5      
##  Gestão de Recursos Humanos: 1595   Mean   :576.0       Mean   :564.5      
##  Educação Física           : 1528   3rd Qu.:614.1       3rd Qu.:603.3      
##  Serviço Social            : 1166   Max.   :781.2       Max.   :792.2      
##  (Other)                   :29793   NA's   :8927        NA's   :24645      
##  nota_parcial_ampla nota_parcial_cotas
##  Min.   :450.0      Min.   :450.0     
##  1st Qu.:454.0      1st Qu.:450.0     
##  Median :532.4      Median :511.8     
##  Mean   :527.5      Mean   :511.8     
##  3rd Qu.:573.2      3rd Qu.:557.2     
##  Max.   :776.4      Max.   :768.3     
##  NA's   :25097      NA's   :35928

3 Visualização de Dados

Para plotar gráficos no R usamos a biblioteca ggplot2 que se inspira no The Grammar of Graphics. Nesse tutorial usaremos também a biblioteca plotly para fazer gráficos interativos.

Tente instalar o pacote plotly no seu RStudio. Caso não consiga, compare seu código com o abaixo e faça as alterações devidas. O uso do plotly é opcional. Se você não planeja fazer gráficos interativos não precisa instalá-lo e carregá-lo.

# Instalando o pacote
install.packages("plotly")
# carregando o pacote
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

3.1 Gráficos com uma variável

3.2 Gráfico de Barras: Uma variável discreta

O gráfico de barras é indicado para visualizar a frequência de variáveis categóricas. Portanto cada barra mostra quantas observações existem em cada categoria. A variável categórica fica no eixo x e no y o número de observações (count) presentes em cada categoria.

No ggplot2 usamos o ‘+’ para adicionar as “layers” ao gráfico. Ou seja, para cada função que vamos adicionar ao gráfico usamos o +. Para plotar o gráfico primeiro chamamos a função ggplot() com o nome do dataset dentro da função, depois especificamos que tipo de gráfico queremos com a função geom_bar() e dentro dela colocamos a variável que ficará no eixo x.

  ggplot(prouni) +
  geom_bar(aes(x = grau))

Se quisermos que o gráfico se torne interativo colocamos o código anterior dentro da função ggplotly.

  ggplotly(ggplot(prouni) +
  geom_bar(aes(x = grau)))

3.3 Histograma: Uma variável contínua

Para plotar variáveis contínuas usamos o histograma. No eixo x plotamos a variável contínua e no y a contagem de observações dentro daquele intervalo. Cada bin representa um intervalo da variável contínua. E o tamanho de cada bin varia com o número de observações que existem dentro desse intervalo.

#plotando o grafico
ggplot(prouni)+
  geom_histogram(aes(x=mensalidade))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Note que aparece um aviso no gráfico pedindo para escolhermos um número de bins mais adequado. Para fazer isso, basta determinarmos o número de bins dentro da função geom_histogram.

#plotando o grafico
ggplot(prouni)+
  geom_histogram(aes(x=mensalidade), bins = 50)

Para deixar o gráfico interativo basta colocar o código anterior dentro da função ggplotly(). Ao passarmos o mouse em cima de cada bin temos acesso ao número de observações e o valor da mensalidade dentro de cada intervalo.

ggplotly(#plotando o grafico
ggplot(prouni)+
  geom_histogram(aes(x=mensalidade), bins = 50))

3.4 Gráfico de densidade: Uma variável contínua

Através do gráfico de densidade, assim como o histograma e o boxplot, podemos visualizar a distribuição da variável. A função geom_density() do ggplot2 retorna à densidade da variável.

ggplot(prouni)+
  geom_density(aes(x= mensalidade))

3.5 Boxplot

O Boxplot também ilustra a distribuição da variável contínua. Mas traz maior visibilidade aos quartis. A imagem a seguir mostra quais medidas de posição encontramos no Boxplot.

Boxplot

Fonte:Operdata

ggplot(prouni)+
  geom_boxplot(aes(y =mensalidade))

3.6 Gráfico com duas variáveis ou mais variáveis

Nesta subseção faremos gráficos que exibem mais de uma dimensão.

3.7 Histograma: uma variável contínua e uma variável categórica

No histograma é possível adicionar uma variável categórica com o argumento fill=, dentro do aes(). O gráfico abaixo mostra a distribuição do valor mensalidade condicional ao grau do curso.

ggplotly(#plotando o grafico
ggplot(prouni)+
  geom_histogram(aes(x=mensalidade, fill = grau), bins = 50))

3.8 Boxplot: uma variável contínua e uma variável categórica

Para ver se a distribuição de uma variável muda condicional a uma variável categórica podemos usar um gráfico boxplot com as variáveis nos dois eixos.

ggplot(prouni)+
  geom_boxplot(aes(y = mensalidade, x = grau))

3.9 Scatterplot: duas variáveis contínuas

Podemos visualizar a relação entre duas variáveis contínuas através do gráfico geom_point(). E se quisermos adicionar a reta de regressão, usamos a função geom_smooth() e usamos o argumento method = “lm”.

ggplot(prouni) +
  geom_point(aes(y = mensalidade, x = nota_integral_ampla))+
  geom_smooth(aes(y = mensalidade, x = nota_integral_ampla), method = "lm")
## `geom_smooth()` using formula 'y ~ x'

3.10 Gráfico de duas variáveis contínuas e uma categórica

Adicionamos uma nova dimensão ao gráfico anterior através do argumento color = variável. Desse modo, as cores dos pontos variam de acordo com o grau do curso. O argumento alpha = 0.5 aumenta a transparência dos pontos, ou seja, deixa a intensidade da cor mais fraca. Quanto menor o alpha, maior a transparência. Também podemos adicionar títulos e legendas aos gráficos.

ggplot(prouni)+
  geom_point(aes(y = mensalidade, x = nota_integral_ampla, color = grau), alpha = 0.5) +
   labs(title = " Relação entre Mensalidade e Nota dos Cursos Prouni", subtitle = "Por Grau", #adicionando titulo e subitulo
        caption = "Fonte: Elaboração própria, BRASIL.IO (2020)")+ #adicionando nota de rodape com a fontr
   ylab("Mensalidade") + #mundando o nome do eixo y
   xlab("Nota") #mudando o nome do eixo x

4 Teste de Hipóteses

Os cursos de Bacharelado são mais caros do que os Tecnológicos em média?

Para fazer um teste t usamos a função t.test(), dentro dela especificamos as variáveis que queremos testar e o data frame que será usado. Note que estou querendo comparar a mensalidade dos cursos de Bacharelado e Tecnológicos, por isso, (mensalidade ~ grau).

Antes de realizar o test t filtrei os dados do Prouni e salvei em um novo data frame. Dentro da função filter() especifiquei que queria apenas os cursos com grau diferente (!=) de Licenciatura.

df2 <- prouni %>% 
  filter(grau != "Licenciatura")

t.test(mensalidade ~ grau, data = df2)
## 
##  Welch Two Sample t-test
## 
## data:  mensalidade by grau
## t = 83.931, df = 24422, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  485.2713 508.4786
## sample estimates:
## mean in group Bacharelado mean in group Tecnológico 
##                  897.5476                  400.6726

5 Regressão Linear

Poderíamos responder essa pergunta também com uma regressão. A função lm() estima o modelo de regressão linear, primeiro declaramos a variável dependente e depois a independente, e um ~ separando as duas. A função summary() exibe o resultado da regressão.

df2 %>% 
  lm(formula = mensalidade ~ grau) %>% 
  summary()
## 
## Call:
## lm(formula = mensalidade ~ grau, data = .)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -758.5 -232.7 -101.7  151.6 9102.4 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      897.548      4.388  204.56   <2e-16 ***
## grauTecnológico -496.875      6.828  -72.77   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 607.4 on 32643 degrees of freedom
## Multiple R-squared:  0.1396, Adjusted R-squared:  0.1395 
## F-statistic:  5295 on 1 and 32643 DF,  p-value: < 2.2e-16

Se quisermos estimar um modelo de regressão multivariada basta adicionar a nova variável a fórmula, sempre usando ‘+’ para separar as variáveis.

df2 %>% 
  lm(formula = mensalidade ~ grau + nota_integral_ampla) %>% 
  summary()
## 
## Call:
## lm(formula = mensalidade ~ grau + nota_integral_ampla, data = .)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1218.5  -288.7   -79.2   186.4  8560.6 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -2.493e+03  4.219e+01  -59.09   <2e-16 ***
## grauTecnológico     -1.828e+02  8.388e+00  -21.80   <2e-16 ***
## nota_integral_ampla  5.682e+00  6.955e-02   81.69   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 576.2 on 25915 degrees of freedom
##   (6727 observations deleted due to missingness)
## Multiple R-squared:  0.3081, Adjusted R-squared:  0.308 
## F-statistic:  5769 on 2 and 25915 DF,  p-value: < 2.2e-16

6 Referências

NAVARRO, Danielle.Learning statistics with R: A tutorial for psychology students and other beginners. Disponível aqui