1. Realice una revisión de los datos nulos, vacíos o si tienen algún otro carácter.

a. En caso de presentar valores diferentes a tipo numérico (las variables que apliquen), reemplace con NA.

datos <- read.csv("data_prac_2.csv", header = T, dec = ".", 
                  na.strings = c("&&", "null", "$$"), stringsAsFactors = T)

b. Verifique que las variables tengan el fomato adecuado para trabajar.

str(datos)
## 'data.frame':    1338 obs. of  7 variables:
##  $ edad   : int  19 18 28 33 NA 31 46 37 37 60 ...
##  $ sexo   : Factor w/ 2 levels "femenino","masculino": 1 2 2 2 2 1 1 1 2 1 ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : int  0 1 3 0 0 0 1 3 2 0 ...
##  $ fumador: Factor w/ 2 levels "no","s\xed": 2 1 1 1 1 1 1 1 1 1 ...
##  $ region : Factor w/ 4 levels "noreste","noroeste",..: 4 3 3 2 2 3 3 2 1 2 ...
##  $ clm    : num  16885 1726 4449 21984 3867 ...
datos$fumador <- lapply(datos$fumador, function(x) ifelse(x == "no", "no", "si"))
datos$fumador <- factor(datos$fumador, levels = c("si", "no"))

c. Hay manera de detectar valores duplicados?, en caso negativo, ¿qué podría proponer como identificador, para evitar duplicados en el data set?

datos %>%
  janitor::get_dupes()
## No variable names specified - using all columns.
##   edad      sexo   imc hijos fumador   region      clm dupe_count
## 1   19 masculino 30.59     0      no noroeste 1639.563          2
## 2   19 masculino 30.59     0      no noroeste 1639.563          2
# Quitar duplicados
datos <- datos %>%
  distinct()

d. Reemplace los valores no disponibles con las técnicas usadas, y haga una tabla resumen sobre los resultados (summary) de las variables numéricas, ¿cuál técnica sugiere usar y por qué?

— Hacemos un data frame con las variables numéricas

datos_num <- data.frame(edad = datos$edad, imc = datos$imc, hijos = datos$hijos, clm = datos$clm)

— Reemplazamos los NA

# Reemplazar con la media
datos_1 <- data.frame(lapply(datos_num, function(x) ifelse(is.na(x), mean(x, na.rm = T), x)))

# Reemplazar con la media recortada
datos_2 <- data.frame(lapply(datos_num, function(x) ifelse(is.na(x), mean(x, na.rm = T, trim = 0.15), x)))

# Reemplazar con la mediana
datos_3 <- data.frame(lapply(datos_num, function(x) ifelse(is.na(x), median(x, na.rm = T), x)))

# Reemplazar por interpolación
datos_4 <- data.frame(lapply(datos_num, function(x) ifelse(is.na(x), na.approx(x, na.rm = T), x)))

# Reemplazar con la moda
datos_5 <- data.frame(lapply(datos_num, function(x) ifelse(is.na(x), mfv(x, na_rm = T), x)))

— Obtenemos el resumen de las variables numéricas

# Tabla resumen
summary(datos_num)
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.22   1st Qu.:0.000   1st Qu.: 4750  
##  Median :39.00   Median :30.30   Median :1.000   Median : 9382  
##  Mean   :39.24   Mean   :30.62   Mean   :1.096   Mean   :13287  
##  3rd Qu.:51.00   3rd Qu.:34.59   3rd Qu.:2.000   3rd Qu.:16781  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770  
##  NA's   :72      NA's   :39                      NA's   :41
summary(datos_1$edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   27.00   39.24   39.24   51.00   64.00
summary(datos_2)
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4878  
##  Median :39.07   Median :30.43   Median :1.000   Median : 9705  
##  Mean   :39.23   Mean   :30.61   Mean   :1.096   Mean   :13197  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16115  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_3)
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4878  
##  Median :39.00   Median :30.30   Median :1.000   Median : 9382  
##  Mean   :39.23   Mean   :30.61   Mean   :1.096   Mean   :13167  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16115  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_4)
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.22   1st Qu.:0.000   1st Qu.: 4796  
##  Median :39.00   Median :30.40   Median :1.000   Median : 9411  
##  Mean   :39.29   Mean   :30.62   Mean   :1.096   Mean   :13274  
##  3rd Qu.:51.00   3rd Qu.:34.58   3rd Qu.:2.000   3rd Qu.:16819  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_5)
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:25.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4762  
##  Median :38.00   Median :30.59   Median :1.000   Median : 9305  
##  Mean   :38.13   Mean   :30.66   Mean   :1.096   Mean   :13254  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16587  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770

Como sugerencia personal usaría el método de reemplazo por interpolación dado que este resulta ser más efectivo y estricto a la hora de hacer el reemplazo, sin embargo, la media recortada también es una opción considerable ya que al eliminar los extremos hace mejores estimaciones.

  1. Teniendo la base funcional, emplee el data set con reemplazamiento mediante interpolación, para realizar lo siguiente:

— Actualizamos la base para contemplar nuevamente las variables no numéricas

datos_f <- data.frame(sexo = datos$sexo, fumador = datos$fumador, region = datos$region, datos_4)

a. Usando ggplot, realice un histograma para analizar las variables numéricas, ¿este sería el tipo de gráfico más significativo para su análisis univariante?.

# Edad
ggplot(datos_f, aes(edad)) + geom_histogram(fill = "darkseagreen") + 
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "EDAD", x = NULL, y = NULL)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# IMC
ggplot(datos_f, aes(imc)) + geom_histogram(fill = "lightpink3") + 
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "IMC", x = NULL, y = NULL)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Número de hijos
ggplot(datos_f, aes(hijos)) + geom_histogram(fill = "plum3") + 
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "NÚMERO DE HIJOS", x = NULL, y = NULL)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# CLM
ggplot(datos_f, aes(clm)) + geom_histogram(fill = "slategray2") + 
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "RECLAMACIONES", x = NULL, y = NULL)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Aunque los histogramas proporcionan un buen acercamiento al análisis de los datos pues permiten observar de forma precisa como estos se distribuyen, personalmente, considero que se puede perder información pues el intervalo es bastante amplio dado el número de observaciones; estos podrían ser complementados con gráficos de dispersión o tablas de frecuencia

b. Calcule la media de monto de reclamación por sexo.

rec_by_sex <- datos_f %>%
  group_by(sexo) %>%
  summarise(prom_mont = mean(clm))
rec_by_sex
## # A tibble: 2 × 2
##   sexo      prom_mont
##   <fct>         <dbl>
## 1 femenino     12517.
## 2 masculino    14017.
ggplot(datos_f, aes(x = sexo, y = clm, fill = sexo)) + 
  geom_bar(stat = "identity") + 
  scale_fill_manual(values = c("femenino" = "indianred3", 
                               "masculino" = "salmon3")) +
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "RECLAMACIONES POR SEXO", x = NULL, y = NULL) +
  guides(fill = "none")

c. Calcule la media de monto de reclamación por fumador y sexo.

rec_by_sex_fum <- datos_f %>%
  group_by(sexo, fumador) %>%
  summarise(prom_mont_ = mean(clm))
## `summarise()` has grouped output by 'sexo'. You can override using the
## `.groups` argument.
rec_by_sex_fum
## # A tibble: 4 × 3
## # Groups:   sexo [2]
##   sexo      fumador prom_mont_
##   <fct>     <fct>        <dbl>
## 1 femenino  si          29556.
## 2 femenino  no           8935.
## 3 masculino si          32874.
## 4 masculino no           8206.
ggplot(datos_f, aes(x = fumador, y = clm, fill = fumador)) + 
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("si" = "darkseagreen4", 
                               "no" = "darkslategray4")) +
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "RECLAMACIONES POR CONDICIÓN DE FUMADOR", x = NULL, y = NULL) +
  guides(fill = "none")

d. Identifique la región con mayor monto promedio de reclamación.

rec_by_reg <- datos_f %>%
  group_by(region) %>%
  summarise(prom_rec_reg = mean(clm)) %>%
  arrange(desc(prom_rec_reg))
rec_by_reg
## # A tibble: 4 × 2
##   region   prom_rec_reg
##   <fct>           <dbl>
## 1 sureste        14588.
## 2 noreste        13577.
## 3 noroeste       12418.
## 4 suroeste       12354.
ggplot(datos_f, aes(x = region, y = clm, fill = region)) + 
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("noreste" = "goldenrod2", 
                               "noroeste" = "deeppink3",
                               "sureste" = "darkorange3",
                               "suroeste" = "brown3")) +
  theme(plot.title = element_text(family = "serif", face = "bold", size = 15,
                                  hjust = 0.5, vjust = 1, lineheight = 1),
        axis.text.x = element_text(family = "serif"),
        axis.text.y = element_text(family = "serif")) +
  labs(title = "RECLAMACIONES POR REGIÓN", x = NULL, y = NULL) +
  guides(fill = "none")

e. Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.

datos_f <- datos_f %>%
  mutate(Clasificación = ifelse(imc>30, "Obesidad", ""))

f. Identifique el top 10 de personas obesas indicando: edad, sexo, hijos, monto de reclamación y región.

top_by_clas <- datos_f %>%
  select(imc, Clasificación, edad, sexo, hijos, clm, region) %>%
  arrange(desc(imc))
head(top_by_clas, 10)
##      imc Clasificación edad      sexo hijos       clm   region
## 1  53.13      Obesidad   18 masculino     0  1163.463  sureste
## 2  52.58      Obesidad   22 masculino     1 44501.398  sureste
## 3  50.38      Obesidad   23 masculino     1  2438.055  sureste
## 4  49.06      Obesidad   58 masculino     0 11381.325  sureste
## 5  47.74      Obesidad   52 masculino     1  9748.911  sureste
## 6  47.60      Obesidad   37  femenino     2 46113.511 suroeste
## 7  47.52      Obesidad   47 masculino     1  8083.920  sureste
## 8  47.41      Obesidad   54  femenino     0 63770.428  sureste
## 9  46.75      Obesidad   52  femenino     5 12592.534  sureste
## 10 46.70      Obesidad   54  femenino     2 11538.421 suroeste