#Ejercicio 1
#Se lee la tabla, se identifican los espacios vacíos y se cambian por NA
datos <- read.csv("data_prac_2 1.csv")
sum(is.na(datos))
## [1] 308
sum(datos == "", na.rm = TRUE)
## [1] 104
datos[datos == ""] <- NA
summary(datos)
##      edad               sexo               imc                hijos      
##  Length:1338        Length:1338        Length:1338        Min.   :0.000  
##  Class :character   Class :character   Class :character   1st Qu.:0.000  
##  Mode  :character   Mode  :character   Mode  :character   Median :1.000  
##                                                           Mean   :1.095  
##                                                           3rd Qu.:2.000  
##                                                           Max.   :5.000  
##                                                                          
##    fumador             region              clm                  X         
##  Length:1338        Length:1338        Length:1338        Min.   : 1.000  
##  Class :character   Class :character   Class :character   1st Qu.: 3.000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 6.000  
##                                                           Mean   : 5.563  
##                                                           3rd Qu.: 8.000  
##                                                           Max.   :10.000  
##                                                           NA's   :308
head(datos)
##   edad      sexo    imc hijos fumador   region         clm  X
## 1   19  femenino   27.9     0     yes suroeste   16884.924 NA
## 2   18 masculino  33.77     1      no  sureste   1725.5523 NA
## 3   28 masculino     33     3      no  sureste    4449.462 NA
## 4   33 masculino 22.705     0      no noroeste 21984.47061 NA
## 5 <NA> masculino  28.88     0      no noroeste   3866.8552 NA
## 6   31  femenino  25.74     0      no  sureste   3756.6216 NA
##Se identifican los posibles valores que está tomando cada variable
unique(datos$sexo)
## [1] "femenino"  "masculino"
unique(datos$region)
## [1] "suroeste" "sureste"  "noroeste" "noreste"
unique(datos$fumador)
## [1] "yes" "no"
unique(datos$hijos)
## [1] 0 1 3 2 5 4
##Edad,sexo,imc,fumador,region y clm son char, propongo cambiar el tipo de variable a numeric 
##Tanto fumdor como sexo como region se deben rediseñar, por ejemplo, si sexo es masculino, se cambia por 1
##Si sexo es femenino, se cambia por 0
##En el caso de región, suroeste=1, sureste=2, noroeste=3, noreste=4
##En el caso de fumador, no=0, yes=1
datos$edad <- as.numeric(datos$edad)
## Warning: NAs introducidos por coerción
datos$imc <- as.numeric(datos$imc)
## Warning: NAs introducidos por coerción
datos$clm <- as.numeric(datos$clm)
## Warning: NAs introducidos por coerción
datos$sexo <- trimws(datos$sexo)
datos$sexo <- ifelse(datos$sexo == "masculino", 1, ifelse(datos$sexo == "femenino", 0, NA))
datos$region <- trimws(datos$region)
datos$region <- case_when(
  datos$region == "suroeste" ~ 1,
  datos$region == "sureste" ~ 2,
  datos$region == "noroeste" ~ 3,
  datos$region == "noreste" ~ 4
)
datos$fumador <- trimws(datos$fumador)
datos$fumador <- ifelse(datos$fumador == "no", 0, ifelse(datos$fumador == "yes", 1, NA))
head(datos)
##   edad sexo    imc hijos fumador region       clm  X
## 1   19    0 27.900     0       1      1 16884.924 NA
## 2   18    1 33.770     1       0      2  1725.552 NA
## 3   28    1 33.000     3       0      2  4449.462 NA
## 4   33    1 22.705     0       0      3 21984.471 NA
## 5   NA    1 28.880     0       0      3  3866.855 NA
## 6   31    0 25.740     0       0      2  3756.622 NA
summary(datos)
##       edad            sexo             imc            hijos      
##  Min.   :18.00   Min.   :0.0000   Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   1st Qu.:0.0000   1st Qu.:26.22   1st Qu.:0.000  
##  Median :39.00   Median :1.0000   Median :30.30   Median :1.000  
##  Mean   :39.23   Mean   :0.5052   Mean   :30.62   Mean   :1.095  
##  3rd Qu.:51.00   3rd Qu.:1.0000   3rd Qu.:34.59   3rd Qu.:2.000  
##  Max.   :64.00   Max.   :1.0000   Max.   :53.13   Max.   :5.000  
##  NA's   :72                       NA's   :39                     
##     fumador           region           clm              X         
##  Min.   :0.0000   Min.   :1.000   Min.   : 1122   Min.   : 1.000  
##  1st Qu.:0.0000   1st Qu.:2.000   1st Qu.: 4747   1st Qu.: 3.000  
##  Median :0.0000   Median :2.000   Median : 9378   Median : 6.000  
##  Mean   :0.2048   Mean   :2.484   Mean   :13278   Mean   : 5.563  
##  3rd Qu.:0.0000   3rd Qu.:3.000   3rd Qu.:16776   3rd Qu.: 8.000  
##  Max.   :1.0000   Max.   :4.000   Max.   :63770   Max.   :10.000  
##                                   NA's   :41      NA's   :308
##Ahora, si se hubieran cambiado todos los datos no numéricos a NA, se hubiera cambiado casi toda la base
##Se hubiera hecho de la siguiente manera:
## datos <- datos %>% mutate(across(everything(), ~ ifelse(!is.na(as.numeric(.)), as.numeric(.), NA)))
sum(is.na(datos))
## [1] 460
##usando duplicated se pueden detectar valores duplicados en el dataframe
duplicados <- datos[duplicated(datos), ]
sum(duplicated(datos))
## [1] 0
duplicados
## [1] edad    sexo    imc     hijos   fumador region  clm     X      
## <0 rows> (or 0-length row.names)
##Se detectaron 0 valores duplicados
##Para eliminarlos, en caso de que hubiera, se usa:
datos_sin_duplicados <- unique(datos)
##Se propone el siguiente identificador
datos$identificador <- paste(datos$edad, datos$sexo, datos$region, sep = "_")
head(datos)
##   edad sexo    imc hijos fumador region       clm  X identificador
## 1   19    0 27.900     0       1      1 16884.924 NA        19_0_1
## 2   18    1 33.770     1       0      2  1725.552 NA        18_1_2
## 3   28    1 33.000     3       0      2  4449.462 NA        28_1_2
## 4   33    1 22.705     0       0      3 21984.471 NA        33_1_3
## 5   NA    1 28.880     0       0      3  3866.855 NA        NA_1_3
## 6   31    0 25.740     0       0      2  3756.622 NA        31_0_2
##Se observa que existen filas con edad=NA, por lo que se ve afectado su identificador
##Se utilizarán técnicas para llenar los registros NA con algún valor que no afecte 
## (O lo más mínimo) al estudio estadístico de los datos
## Reemplazar NA en variables numéricas con la mediana o media según corresponda
## Primero, se usa la media en las siguientes variables porque tenemos una gran cantidad de datos y
## Generalmente, los datos no tienen outliers (registros que distan mucho de la media)
datos$edad <- ifelse(is.na(datos$edad), mean(datos$edad, na.rm = TRUE), datos$edad)
datos$hijos <- ifelse(is.na(datos$hijos), mean(datos$hijos, na.rm = TRUE), datos$hijos)

##Se usa la mediana en los siguientes porque puede haber outliers y son datos continuos
datos$imc <- ifelse(is.na(datos$imc), mean(datos$imc, na.rm = TRUE), datos$imc)
datos$clm <- ifelse(is.na(datos$clm), median(datos$clm, na.rm = TRUE), datos$clm)

# Reemplazar NA en variables categóricas con la moda o un valor específico
# Para Sexo, Fumador y Región, usamos la moda (valor más frecuente)
table(datos$sexo)
## 
##   0   1 
## 662 676
table(datos$fumador)
## 
##    0    1 
## 1064  274
table(datos$region)
## 
##   1   2   3   4 
## 325 364 325 324
datos$fumador <- ifelse(is.na(datos$fumador), 0, datos$fumador)

##Se notó una clara tendencia hacia el resultdo 0 en fumador
##Pero no en las demás, que están distribuidas más o menos uniformemente (se observaron las frecuencias con table)

##Por ello, se colocarán los valores aleatoriamente siguiendo una distribución uniforme
set.seed(123)
datos$sexo <- ifelse(is.na(datos$sexo), 
                     sample(c(0, 1), sum(is.na(datos$sexo)), replace = TRUE), 
                     datos$sexo)

set.seed(123)
datos$region <- ifelse(is.na(datos$region), 
                       sample(c(1,2,3,4), sum(is.na(datos$region)), replace = TRUE), 
                       datos$region)

summary(datos)
##       edad            sexo             imc            hijos      
##  Min.   :18.00   Min.   :0.0000   Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   1st Qu.:0.0000   1st Qu.:26.40   1st Qu.:0.000  
##  Median :39.23   Median :1.0000   Median :30.59   Median :1.000  
##  Mean   :39.23   Mean   :0.5052   Mean   :30.62   Mean   :1.095  
##  3rd Qu.:51.00   3rd Qu.:1.0000   3rd Qu.:34.40   3rd Qu.:2.000  
##  Max.   :64.00   Max.   :1.0000   Max.   :53.13   Max.   :5.000  
##                                                                  
##     fumador           region           clm              X         
##  Min.   :0.0000   Min.   :1.000   Min.   : 1122   Min.   : 1.000  
##  1st Qu.:0.0000   1st Qu.:2.000   1st Qu.: 4855   1st Qu.: 3.000  
##  Median :0.0000   Median :2.000   Median : 9378   Median : 6.000  
##  Mean   :0.2048   Mean   :2.484   Mean   :13158   Mean   : 5.563  
##  3rd Qu.:0.0000   3rd Qu.:3.000   3rd Qu.:16108   3rd Qu.: 8.000  
##  Max.   :1.0000   Max.   :4.000   Max.   :63770   Max.   :10.000  
##                                                   NA's   :308     
##  identificador     
##  Length:1338       
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
##Ejercicio 2
ggplot(datos, aes(x = edad)) +
  geom_histogram(binwidth = 5, color = "black", fill = "lightblue", alpha = 0.7) +
  labs(title = "Histograma de la Edad", x = "Edad", y = "Frecuencia") +
  theme_minimal()

ggplot(datos, aes(x = imc)) +
  geom_histogram(binwidth = 5, color = "black", fill = "lightblue", alpha = 0.7) +
  labs(title = "Histograma del Índice de Masa Corporal (IMC)", x = "IMC", y = "Frecuencia") +
  theme_minimal()

ggplot(datos, aes(x = hijos)) +
  geom_histogram(binwidth = 5, color = "black", fill = "lightblue", alpha = 0.7) +
  labs(title = "Histograma de la Cantidad de Hijos", x = "Cantidad de Hijos", y = "Frecuencia") +
  theme_minimal()

ggplot(datos, aes(x = clm)) +
  geom_histogram(binwidth = 5, color = "black", fill = "lightblue", alpha = 0.7) +
  labs(title = "Histograma del monto de reclamaión", x = "Monto de Reclamación", y = "Frecuencia") +
  theme_minimal()  

## Considero que no es lo más viable, relizar el histograma, ya que en variables con comportamiento contínuo
## Sería mejor categorizar las variables, o en todo caso, utilizar un gráfico de densidad o de dispersión

media_clm_por_sexo <- datos %>%
  group_by(sexo) %>%
  summarise(media_monto_reclamacion = mean(clm, na.rm = TRUE))

media_clm_por_sexo
## # A tibble: 2 × 2
##    sexo media_monto_reclamacion
##   <dbl>                   <dbl>
## 1     0                  12378.
## 2     1                  13922.
fumador_sexo <- datos %>%
  group_by(sexo, fumador) %>%
  summarise(media_monto_reclamacion = mean(clm, na.rm = TRUE))
## `summarise()` has grouped output by 'sexo'. You can override using the
## `.groups` argument.
fumador_sexo
## # A tibble: 4 × 3
## # Groups:   sexo [2]
##    sexo fumador media_monto_reclamacion
##   <dbl>   <dbl>                   <dbl>
## 1     0       0                   8810.
## 2     0       1                  29352.
## 3     1       0                   8119.
## 4     1       1                  32791.
region_recla <- datos %>%
  group_by(region) %>%
  summarise(media_monto_reclamacion = mean(clm, na.rm = TRUE)) %>%
  arrange(desc(media_monto_reclamacion))

region_recla
## # A tibble: 4 × 2
##   region media_monto_reclamacion
##    <dbl>                   <dbl>
## 1      2                  14425.
## 2      4                  13528.
## 3      1                  12326.
## 4      3                  12204.
datos <- datos %>%
  mutate(obesidad = ifelse(imc > 30, "Sí", "No"))

head(datos)
##       edad sexo    imc hijos fumador region       clm  X identificador obesidad
## 1 19.00000    0 27.900     0       1      1 16884.924 NA        19_0_1       No
## 2 18.00000    1 33.770     1       0      2  1725.552 NA        18_1_2       Sí
## 3 28.00000    1 33.000     3       0      2  4449.462 NA        28_1_2       Sí
## 4 33.00000    1 22.705     0       0      3 21984.471 NA        33_1_3       No
## 5 39.22512    1 28.880     0       0      3  3866.855 NA        NA_1_3       No
## 6 31.00000    0 25.740     0       0      2  3756.622 NA        31_0_2       No
top_10_obesos <- datos %>%
  filter(obesidad == "Sí") %>%
  select(edad, sexo, hijos, clm, region) %>%
  arrange(desc(clm)) %>%
  head(10)

top_10_obesos
##    edad sexo hijos      clm region
## 1    54    0     0 63770.43      2
## 2    45    1     0 62592.87      2
## 3    52    1     3 60021.40      3
## 4    31    0     1 58571.07      4
## 5    33    0     0 55135.40      3
## 6    60    1     0 52590.83      1
## 7    28    1     1 51194.56      1
## 8    64    1     2 49577.66      2
## 9    59    1     1 48970.25      2
## 10   44    0     0 48885.14      2