Ejercicio 1:

  1. Seleccionar un data set de los datasets de R o de GitHub (ver nota)
library(datasets)
library(tidyverse)
library(DT)
library(carData)
library(skimr)
library(funModeling)
library(dplyr)
library(mice)

El salario académico de nueve meses de 2008-09 para profesores asistentes, profesores asociados y catedráticos en una universidad de EE.UU.

Los datos se recogieron como parte del esfuerzo continuo de la administración de la universidad para controlar las diferencias salariales entre los miembros del profesorado masculino y femenino.

Un marco de datos con 397 observaciones sobre las siguientes 6 variables.

DT::datatable(Salaries)
df1=Salaries

`

Ejercicio 2

El mismo debe contener mínimo 100 observaciones, mínimo 3 variables numéricas, mínimo tres variables categóricas y mínimo 5% de datos ausentes (NA)

set.seed(123)
df2=df1 %>% mutate(rank=  replace(rank, sample(row_number(),
                                           size = ceiling(0.05 * n()),
                                           replace = FALSE), NA) )

df2=df2 %>% mutate(discipline=replace(discipline, sample(row_number(),
                                           size = ceiling(0.05 * n()),
                                           replace = FALSE), NA) )

df2=df2 %>% mutate(yrs.since.phd=replace(yrs.since.phd, sample(row_number(),
                                           size = ceiling(0.05 * n()),
                                           replace = FALSE), NA) )

df2=df2 %>% mutate(yrs.service=replace(yrs.service, sample(row_number(),
                                           size = ceiling(0.05 * n()),
                                           replace = FALSE), NA) )
df2=df2 %>% mutate(sex=replace(sex, sample(row_number(),
                                           size = ceiling(0.05 * n()),
                                           replace = FALSE), NA) )
df2=df2 %>% mutate(salary=replace(salary, sample(row_number(),
                                           size = ceiling(0.05 * n()),
                                           replace = FALSE), NA) )
DT::datatable(df2)
sum(is.na(df2))
## [1] 120
colSums(is.na(df2))
##          rank    discipline yrs.since.phd   yrs.service           sex 
##            20            20            20            20            20 
##        salary 
##            20

En cada una de las columnas hay 20 datos faltantes.

skim(df2)
Data summary
Name df2
Number of rows 397
Number of columns 6
_______________________
Column type frequency:
factor 3
numeric 3
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
rank 20 0.95 FALSE 3 Pro: 253, Ass: 63, Ass: 61
discipline 20 0.95 FALSE 2 B: 208, A: 169
sex 20 0.95 FALSE 2 Mal: 342, Fem: 35

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
yrs.since.phd 20 0.95 22.36 12.88 1 12 21 32 56 ▇▇▆▅▁
yrs.service 20 0.95 17.48 12.94 0 7 16 26 60 ▇▅▃▂▁
salary 20 0.95 113746.41 30447.14 57800 91000 107200 134550 231545 ▅▇▅▂▁

Ejercicio 3

Imputar datos para una variable categórica empleando la moda

Se considera la siguiente función

getmode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}
df3=df2
getmode(df3$rank)
## [1] Prof
## Levels: AsstProf AssocProf Prof
df3$rank<-as.character(df3$rank)
df3$rank<-ifelse(is.na(df3$rank),getmode(df3$rank),df3$rank)
DT::datatable(df3)
colSums(is.na(df3))
##          rank    discipline yrs.since.phd   yrs.service           sex 
##             0            20            20            20            20 
##        salary 
##            20

Ejercicio 4

Imputar datos para otra variable categórica con cadenas de texto

df3$sex<- as.character(df3$sex) 

En los NAs de la variable sex los vamos a sustituir por la el texto Sexo_deconocido

df3=df3 %>% mutate(sex = replace_na(sex, "Sexo_desconocido"))
DT::datatable(df3)

Ejercicio 5

colnames(df3)
## [1] "rank"          "discipline"    "yrs.since.phd" "yrs.service"  
## [5] "sex"           "salary"

Hacer dos imputaciones con el paquete mice

columns <- c("yrs.since.phd", "yrs.service")
imputed_data <- mice(df3[,names(df3) %in% columns],m = 1,
                     maxit = 1, method = "mean",seed = 2018,print=F)
complete.data <- mice::complete(imputed_data)
base1<-df3
base1$yrs.since.phd <- complete.data$yrs.since.phd
base1$yrs.service <- complete.data$yrs.service
DT::datatable(base1)
xyplot(imputed_data,yrs.since.phd ~yrs.service)

par(mfrow=c(1,2))
plot(density(df3$yrs.since.phd,na.rm = T),col=2,main="yrs.since.phd")
lines(density(complete.data$yrs.since.phd),col=3)
plot(density(df3$yrs.service,na.rm = T),col=2,main="yrs.service")
lines(density(complete.data$yrs.service),col=3)

Ejercicio 6

Convertir la tercera variable categórica en numérica

La variable restante es la variable discipline

library(caret) # contiene la función dummyVars
library(fastDummies)
disci_dummie=dummy_cols(Salaries,  select_columns = c("discipline")) %>%
  select(-c("discipline"))
DT::datatable(disci_dummie)

Ejercicio 7

Discretizar una de las variables