“The goal is to turn data into information, and information into insight.”
Carly Fiorina

1 Instruções

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

2 Exercícios

Exercício 1: Comece importando 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)

2.1 Explorando atributos de dados com rótulos (labelled data frame)

Exercício 2: Explore os atributos das seguintes variáveis:

  • SCORE

  • PUPILSEX

  • PUPILSES

attr(school$SCORE, "label") # Variable label
## [1] "school outcome score"
attr(school$SCORE, "labels") # Value labels
##  lowest highest 
##      29      83
attr(school$PUPILSEX, "label") 
## [1] "sex of pupil"
attr(school$PUPILSEX, "labels")
##  female maleest 
##       0       1
attr(school$PUPILSES, "label") 
## [1] "SES of pupil"
attr(school$PUPILSES, "labels")
##  lowest highest 
##       1       6
# Bônus: usando a função do print_labels() do pacote haven para mostrar os labels.
print_labels(school$PUPILSEX)
## 
## Labels:
##  value   label
##      0  female
##      1 maleest

Exercício 3: Crie uma variável PUPILSEX2 que seja uma cópia da variável PUPILSEX. Para tornar a interpretação dos resultados a seguir mais intuitiva, você precisará recodificar a variável criada para fator, atribuíndo também os seguintes labels: c(“Feminino”, “Masculino”).

# school$PUPILSEX <- labelled(school$PUPILSEX, labels=c(Feminino=0, Masculino=1))

school <- transform(school, 
                    PUPILSEX2 = factor(PUPILSEX, levels=c(0,1),
                            labels=c("Feminino", "Masculino")))
                  
levels(school$PUPILSEX2); table(school$PUPILSEX)
## [1] "Feminino"  "Masculino"
## 
##   0   1 
## 482 497

2.2 Estimativas agregadas por grupos

Exercício 4: Produza estatísticas descritivas da variável SCORE por sexo e PUPILSEX2). Vamos olhar as médias e os desvios padronizados.

aggregate(formula = SCORE ~ PUPILSEX2, 
          data = school, 
          FUN = "mean")
##   PUPILSEX2    SCORE
## 1  Feminino 49.91701
## 2 Masculino 49.10463
aggregate(formula = SCORE ~ PUPILSEX2,
          data = school, 
          FUN = "sd")
##   PUPILSEX2    SCORE
## 1  Feminino 10.50163
## 2 Masculino 10.49448
  • Como você poderia produzir o mesmo resultado usando a função tapply()?
# ou usando tapply
with(school, tapply(SCORE, list(PUPILSEX2), FUN = "mean"))
##  Feminino Masculino 
##  49.91701  49.10463

Exercício 5: Produza algumas estatísticas descritivas da variável SCORE para cada NSE–nível socioeconômico (PUPILSES) e sexo (PUPILSEX2). Vamos gerar médias e desvios padronizados.

aggregate(formula = SCORE ~ PUPILSES + PUPILSEX2,
           data = school, 
           FUN = mean)
##    PUPILSES PUPILSEX2    SCORE
## 1         1  Feminino 25.00000
## 2         2  Feminino 35.40000
## 3         3  Feminino 42.92135
## 4         4  Feminino 51.30058
## 5         5  Feminino 62.17391
## 6         6  Feminino 70.38462
## 7         2 Masculino 35.00000
## 8         3 Masculino 42.52941
## 9         4 Masculino 50.25253
## 10        5 Masculino 60.87500
## 11        6 Masculino 72.64706
aggregate(formula = SCORE ~ PUPILSES + PUPILSEX2,
          data = school, 
          FUN = "sd")
##    PUPILSES PUPILSEX2     SCORE
## 1         1  Feminino        NA
## 2         2  Feminino  3.511885
## 3         3  Feminino  4.712586
## 4         4  Feminino  6.748113
## 5         5  Feminino  7.749667
## 6         6  Feminino 10.500305
## 7         2 Masculino  4.399413
## 8         3 Masculino  5.080624
## 9         4 Masculino  6.659741
## 10        5 Masculino  8.065201
## 11        6 Masculino  9.034249
  • Como você poderia produzir o mesmo resultado usando a função tapply()?
# ou usando tapply
with(school, tapply(SCORE, list(PUPILSES, PUPILSEX2),
       FUN = mean, na.rm=TRUE))
##   Feminino Masculino
## 1 25.00000        NA
## 2 35.40000  35.00000
## 3 42.92135  42.52941
## 4 51.30058  50.25253
## 5 62.17391  60.87500
## 6 70.38462  72.64706

Exercício 6: Usando a função cut() ou ifelse(), gere uma variável chamada SEScat, agregando PUPILSES em 3 categorias: menor ou igual a 2, 3 e 4, e maior ou igual a 5. Apresente uma tabela dos resultados.

# school$SEScat <- cut(school$PUPILSES, breaks = c(0,3,5,6))

school$SEScat <- ifelse(school$PUPILSES <=2, 1,
                        ifelse(school$PUPILSES >= 3 &
                                 school$PUPILSES < 5,2, 3 ))

with(school, table(PUPILSES, SEScat))
##         SEScat
## PUPILSES   1   2   3
##        1   1   0   0
##        2  57   0   0
##        3   0 348   0
##        4   0 371   0
##        5   0   0 172
##        6   0   0  30

Exercício 7: Apague do objeto de dados as variáveis PUPILSEX2 e SEScat.

school[ , c("PUPILSEX2", "SEScat" )] <- NULL

# Outro atalho é:
# school$PUPILSEX2 <- school$SEScat <- NULL

names(school)
## [1] "SCHOOLNR" "PUPILNR"  "SCORE"    "PUPILSES" "PUPILSEX" "CLASSIZE"
## [7] "TEACHEXP"