“Finding the question is often more important than finding the answer.”
John Tukey

1 Instruções

Para realização desta atividade será preciso estar conectado à internet para que possa importar os dados.

2 Pacotes e funções para importar base de dados via console

Dados Tipo Função Pacote
separado por vírgula (.csv) read.csv() utils (default)
outros formatos delimitados “;”, “” , etc read.table() utils (default)
Stata version 7-12 (.dta) read.dta() foreign
Stata version 13-14 (.dta) readdta() haven
SPSS (.sav) read.spss(), read_spss() foreign, haven
SAS (.sas7bdat) read.sas7bdat(), read_sas() sas7bdat, haven
Excel (.xls, .xlsx) read_excel() readxl

3 Exercícios

Exercício 1: Importe a base de dados sobre rendimento escolar “school.sav” (SPSS) do diretório data ou diretamente do endereço web:

https://github.com/danielmarcelino/Datasets/raw/master/Hox2000/school.sav

library(haven)

endereço = "https://github.com/danielmarcelino/Datasets/raw/master/Hox2000/school.sav"

school <- read_spss(endereço)

Exercício 2: Explore a estrutura dos dados.

str(school)
## Classes 'tbl_df', 'tbl' and 'data.frame':    979 obs. of  7 variables:
##  $ SCHOOLNR: atomic  1 1 1 1 1 1 1 1 1 1 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##  $ PUPILNR : atomic  1 2 3 4 5 6 7 8 9 10 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##  $ SCORE   :Class 'labelled'  atomic [1:979] 55 85 55 55 55 45 45 45 65 75 ...
##   .. ..- attr(*, "label")= chr "school outcome score"
##   .. ..- attr(*, "format.spss")= chr "F2.0"
##   .. ..- attr(*, "labels")= Named num [1:2] 29 83
##   .. .. ..- attr(*, "names")= chr [1:2] "lowest" "highest"
##  $ PUPILSES:Class 'labelled'  atomic [1:979] 4 6 4 4 4 3 4 3 5 5 ...
##   .. ..- attr(*, "label")= chr "SES of pupil"
##   .. ..- attr(*, "format.spss")= chr "F2.0"
##   .. ..- attr(*, "labels")= Named num [1:2] 1 6
##   .. .. ..- attr(*, "names")= chr [1:2] "lowest" "highest"
##  $ PUPILSEX:Class 'labelled'  atomic [1:979] 1 1 0 1 1 0 1 0 0 1 ...
##   .. ..- attr(*, "label")= chr "sex of pupil"
##   .. ..- attr(*, "format.spss")= chr "F2.0"
##   .. ..- attr(*, "labels")= Named num [1:2] 0 1
##   .. .. ..- attr(*, "names")= chr [1:2] "female" "maleest"
##  $ CLASSIZE: atomic  20 20 20 20 20 20 20 20 20 20 ...
##   ..- attr(*, "label")= chr "class size"
##   ..- attr(*, "format.spss")= chr "F2.0"
##  $ TEACHEXP:Class 'labelled'  atomic [1:979] 27 27 27 27 27 27 27 27 27 27 ...
##   .. ..- attr(*, "label")= chr "teacher experience"
##   .. ..- attr(*, "format.spss")= chr "F2.0"
##   .. ..- attr(*, "labels")= Named num [1:2] 2 27
##   .. .. ..- attr(*, "names")= chr [1:2] "2 yeard" "27 years"
##  - attr(*, "label")= chr "SPSS/PC+"
  • Os atributos das variáveis podem ser acessados assim:
attr(school$PUPILSEX, "label") # Variable label
## [1] "sex of pupil"
attr(school$PUPILSEX, "labels") # Value labels
##  female maleest 
##       0       1
  • Peça um sumário descritivo de todas as variáveis.
summary(school)
##     SCHOOLNR        PUPILNR          SCORE         PUPILSES    
##  Min.   : 1.00   Min.   : 1.00   Min.   :25.0   Min.   :1.000  
##  1st Qu.:14.00   1st Qu.: 5.00   1st Qu.:45.0   1st Qu.:3.000  
##  Median :26.00   Median :10.00   Median :45.0   Median :4.000  
##  Mean   :25.88   Mean   :10.41   Mean   :49.5   Mean   :3.762  
##  3rd Qu.:38.00   3rd Qu.:15.00   3rd Qu.:55.0   3rd Qu.:4.000  
##  Max.   :50.00   Max.   :23.00   Max.   :85.0   Max.   :6.000  
##     PUPILSEX         CLASSIZE        TEACHEXP    
##  Min.   :0.0000   Min.   :15.00   Min.   : 2.00  
##  1st Qu.:0.0000   1st Qu.:19.00   1st Qu.:10.00  
##  Median :1.0000   Median :20.00   Median :14.00  
##  Mean   :0.5077   Mean   :19.83   Mean   :14.95  
##  3rd Qu.:1.0000   3rd Qu.:22.00   3rd Qu.:18.00  
##  Max.   :1.0000   Max.   :23.00   Max.   :27.00
  • Apresente as primeiras linhas do data frame para entender melhor o que ele contém.
head(school)
## # A tibble: 6 × 7
##   SCHOOLNR PUPILNR     SCORE  PUPILSES  PUPILSEX CLASSIZE  TEACHEXP
##      <dbl>   <dbl> <dbl+lbl> <dbl+lbl> <dbl+lbl>    <dbl> <dbl+lbl>
## 1        1       1        55         4         1       20        27
## 2        1       2        85         6         1       20        27
## 3        1       3        55         4         0       20        27
## 4        1       4        55         4         1       20        27
## 5        1       5        55         4         1       20        27
## 6        1       6        45         3         0       20        27

Exercício 3: Use a função attach() para deixar as variáveis da base de dados facilmente acessíveis.

attach(school)

4 Principais funções para descrição de dados

Comando Descrição
sum(vec) soma (total) todos os elementos de vec
mean(vec) média dos elementos de vec
median(vec) median de vec
min(vec), max(vec) o menor ou maior elemente de vec
sd(vec), var(vec) desvio padronizado e variância de vec
range(vec) intervalo dos valores de vec
quantile(vec) quartis ou separatrizes que dividem os dados em vec em 4 partes iguais
length(vec) retorna o número de elementos em vec
summary(vec) apresenta um sumário contendo cinco estatísticas básicas (five-numbers).

Exercício 4: Produza algumas estatísticas descritivas para a variável CLASSIZE. Queremos descobrir:

  • Qual é a média para CLASSIZE encontrada na amostra?
mean(CLASSIZE, na.rm=TRUE);
## [1] 19.82533
  • Qual é a mediana para CLASSIZE encontrada na amostra?
median(CLASSIZE, na.rm=TRUE);
## [1] 20
  • Qual é o menor valor para CLASSIZE encontrado na amostra?
min(CLASSIZE, na.rm=TRUE);
## [1] 15
  • Qual é o maior valor para CLASSIZE encontrado na amostra?
max(CLASSIZE, na.rm=TRUE);
## [1] 23
  • Qual é o desvio padrão de CLASSIZE encontrado na amostra?
sd(CLASSIZE, na.rm=TRUE);
## [1] 2.145793
  • Qual é variância de CLASSIZE encontrada na amostra?
var(CLASSIZE, na.rm=TRUE);
## [1] 4.604429
  • Qual é o intervalo dos valores de CLASSIZE encontrado na amostra?
range(CLASSIZE, na.rm=TRUE);
## [1] 15 23
  • Quais são os 25º e 75º percentis para o tamanho da classe (CLASSIZE) encontrados na amostra?
quantile(CLASSIZE, na.rm=TRUE);
##   0%  25%  50%  75% 100% 
##   15   19   20   22   23
quantile(CLASSIZE, c(0.25, 0.75)); 
## 25% 75% 
##  19  22

Exercício 5: Substitua os valores da variável PUPILSEX de modo que ‘0’ se torne ‘F’ e ‘1’ se torne ‘M’.

Usando ifelse

PUPILSEX = ifelse(PUPILSEX == 0, "F", "M")

table(PUPILSEX)
## PUPILSEX
##   F   M 
## 482 497

Usando a combinação de replace com which

PUPILSEX <- replace(PUPILSEX, which(PUPILSEX==0), "F")

PUPILSEX <- replace(PUPILSEX, which(PUPILSEX==1), "M")

table(PUPILSEX)
## PUPILSEX
##   F   M 
## 482 497

Exercício 6: Como você poderia substituir os valores da variável PUPILSEX como no exercício anterior, mas sem que o data frame estivesse disponível (sem usar attach())?

Usando ifelse

school$PUPILSEX <- with(school, ifelse(PUPILSEX == 0, "F", "M"))

table(school$PUPILSEX)
## 
##   F   M 
## 482 497

Usando a combinação de replace com which

PUPILSEX <- with(school, replace(PUPILSEX, which(PUPILSEX==0), "F"))

PUPILSEX <- with(school, replace(PUPILSEX, which(PUPILSEX==1), "M"))

with(school, table(PUPILSEX))
## PUPILSEX
##   F   M 
## 482 497