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:
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()
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")
## 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
## 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
## '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 ...
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.
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 |
Para treinar tente obter a frequência e a frequência relativa das outras variáveis categóricas.
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 |
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 |
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
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
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)))
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))
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))
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))
Nesta subseção faremos gráficos que exibem mais de uma dimensão.
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))
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))
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'
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
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
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
NAVARRO, Danielle.Learning statistics with R: A tutorial for psychology students and other beginners. Disponível aqui