# Carga de la base de datos
data <- read.csv("data_prac_2.csv", stringsAsFactors = FALSE)

# Exploración inicial
glimpse(data)
## Rows: 1,338
## Columns: 8
## $ edad    <chr> "19", "18", "28", "33", "", "31", "46", "37", "37", "60", "25"…
## $ sexo    <chr> "femenino", "masculino", "masculino", "masculino", "masculino"…
## $ imc     <chr> "27.9", "33.77", "33", "22.705", "28.88", "25.74", "33.44", "2…
## $ hijos   <int> 0, 1, 3, 0, 0, 0, 1, 3, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,…
## $ fumador <chr> "yes", "no", "no", "no", "no", "no", "no", "no", "no", "no", "…
## $ region  <chr> "suroeste", "sureste", "sureste", "noroeste", "noroeste", "sur…
## $ clm     <chr> "16884.924", "1725.5523", "4449.462", "21984.47061", "3866.855…
## $ X       <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
# Identificación de valores problemáticos
data %>% select(edad, imc, hijos, clm) %>% summarise_all(~sum(!is.numeric(.), na.rm = TRUE))
##   edad imc hijos clm
## 1    1   1     0   1
# Conversión de variables numéricas y manejo de valores erróneos
data <- data %>% 
  mutate(across(c(edad, imc, hijos, clm), ~ suppressWarnings(as.numeric(.))))

# Identificación de valores faltantes
data %>% filter(if_any(c(edad, imc, hijos, clm), is.na))
##     edad      sexo    imc hijos fumador   region       clm  X
## 1     NA masculino 28.880     0      no noroeste  3866.855 NA
## 2     NA  femenino 30.780     1      no  noreste 10797.336 NA
## 3     NA  femenino 31.920     1     yes  noreste 37701.877 NA
## 4     NA masculino 17.385     1      no noroeste  2775.192 NA
## 5     NA masculino 36.670     1     yes  noreste 39774.276 NA
## 6     NA masculino 35.200     1     yes  sureste 38709.176 NA
## 7     NA  femenino 25.935     1      no noroeste  4133.642 NA
## 8     61  femenino     NA     2      no suroeste 14235.072 NA
## 9     NA  femenino 39.805     0      no  noreste  2755.021 NA
## 10    NA  femenino 34.800     2     yes suroeste 39836.519 NA
## 11    53  femenino 24.795     1      no noroeste        NA NA
## 12    61  femenino 29.920     3     yes  sureste        NA NA
## 13    29  femenino 27.940     1     yes  sureste        NA NA
## 14    49  femenino 27.170     0      no  sureste        NA NA
## 15    NA  femenino 23.370     2      no noroeste  6686.431 NA
## 16    18 masculino 23.750     0      no  noreste        NA NA
## 17    19 masculino 25.555     0      no noroeste        NA NA
## 18    NA  femenino 27.830     3      no  sureste 19749.383 NA
## 19    NA masculino 41.895     3     yes  noreste 43753.337 NA
## 20    NA masculino 41.230     1      no  noreste  6610.110 NA
## 21    NA masculino 24.640     0     yes  sureste 19515.542 NA
## 22    NA masculino 30.020     0      no noroeste 24476.479 NA
## 23    NA masculino 24.320     3     yes  noreste 24869.837 NA
## 24    18 masculino     NA     1      no  sureste  1719.436 NA
## 25    NA  femenino 21.560     1      no  sureste  9855.131  6
## 26    46  femenino     NA     2      no  noreste  9432.925 NA
## 27    NA masculino 22.990     0      no  noreste        NA  1
## 28    47 masculino     NA     1     yes  sureste 21978.677 NA
## 29    56  femenino 37.510     2      no  sureste        NA  9
## 30    NA masculino 26.600     0      no suroeste  8444.474  4
## 31    NA masculino 35.860     0      no  sureste  8124.408  8
## 32    NA masculino 36.480     2     yes noroeste 42760.502  5
## 33    NA  femenino 28.785     0      no  noreste 11658.379 10
## 34    19  femenino 21.700     0     yes suroeste        NA 10
## 35    NA  femenino 21.890     2      no  sureste  3180.510  2
## 36    56  femenino     NA     3      no  noreste 13430.265 NA
## 37    42  femenino     NA     2      no noroeste  8017.061 NA
## 38    NA  femenino 33.155     1      no  noreste  7639.417  5
## 39    19 masculino     NA     0      no suroeste  1261.859 NA
## 40    NA  femenino 22.610     0      no noroeste  3176.816  3
## 41    24  femenino     NA     3      no noroeste  4618.080 NA
## 42    48 masculino     NA     4      no  noreste 10736.871 NA
## 43    64 masculino 25.600     2      no suroeste        NA  6
## 44    18  femenino     NA     0      no  sureste  1631.668 NA
## 45    64  femenino     NA     0      no noroeste 14692.669 NA
## 46    NA masculino 30.030     1      no  sureste  4074.454  3
## 47    NA masculino 35.860     0     yes  sureste 46599.108  2
## 48    NA masculino 32.775     1     yes  noreste 39125.332  4
## 49    NA masculino 30.590     0      no  noreste  2727.395  3
## 50    NA  femenino 29.165     0      no  noreste  7323.735  3
## 51    NA masculino 26.900     0      no suroeste  5969.723  4
## 52    NA masculino 31.730     0      no  noreste  2254.797  9
## 53    26 masculino     NA     0      no  noreste  2897.323 NA
## 54    56 masculino 26.695     1     yes noroeste        NA  4
## 55    40  femenino     NA     0      no suroeste  5910.944 NA
## 56    NA masculino 29.735     0      no noroeste  1769.532 10
## 57    55  femenino 30.140     2      no  sureste        NA  7
## 58    NA  femenino 30.495     0      no noroeste 11840.775 10
## 59    NA  femenino 36.630     3      no  sureste 10381.479  4
## 60    NA  femenino 38.095     2      no  noreste 15230.324  4
## 61    NA  femenino 28.380     1     yes  sureste 19521.968  6
## 62    49 masculino     NA     2      no  sureste  9304.702 NA
## 63    51  femenino     NA     1      no suroeste  9880.068 NA
## 64    NA masculino 34.400     0     yes suroeste 36197.699  6
## 65    NA masculino 23.210     1     yes  sureste 22218.115 10
## 66    19 masculino 30.250     0     yes  sureste        NA  9
## 67    37 masculino 30.875     3      no noroeste        NA  2
## 68    NA masculino 31.350     1      no noroeste  2643.269  4
## 69    NA masculino 32.110     1      no  noreste 11763.001  8
## 70    NA masculino 33.660     0      no  sureste  2498.414  2
## 71    31 masculino 30.875     0      no  noreste        NA  3
## 72    NA  femenino 37.730     0      no  sureste  5397.617  4
## 73    NA masculino 26.070     1     yes  sureste 38245.593  7
## 74    NA masculino 25.840     2     yes noroeste 23807.241 10
## 75    63 masculino 30.800     0      no suroeste        NA  1
## 76    62 masculino 21.400     0      no suroeste        NA  8
## 77    NA masculino 35.530     0      no noroeste  1646.430  9
## 78    18  femenino 37.290     1      no  sureste        NA 10
## 79    NA  femenino 36.860     1      no  noreste 31620.001  1
## 80    NA masculino 30.200     1      no suroeste  9724.530  2
## 81    25  femenino 23.465     0      no  noreste        NA  7
## 82    19 masculino     NA     0      no suroeste  1242.816 NA
## 83    21 masculino 20.235     3      no  noreste        NA  2
## 84    38  femenino     NA     1      no  sureste  5976.831 NA
## 85    47 masculino 19.570     1      no noroeste        NA  6
## 86    20 masculino     NA     2      no  sureste  2566.471 NA
## 87    43 masculino 32.600     2      no suroeste        NA  4
## 88    NA  femenino 39.160     0      no  sureste  1633.044  9
## 89    NA masculino 31.635     0      no noroeste  9174.136  4
## 90    NA  femenino 25.300     0      no suroeste 11070.535  7
## 91    20  femenino     NA     0      no  sureste  1880.070 NA
## 92    49 masculino     NA     2     yes suroeste 23306.547 NA
## 93    NA  femenino 37.100     0      no suroeste 10713.644  3
## 94    18 masculino     NA     0     yes  noreste 34617.841 NA
## 95    59 masculino     NA     0      no noroeste 12129.614 NA
## 96    NA masculino 28.880     3      no  noreste  6748.591  2
## 97    58 masculino     NA     0      no suroeste 11365.952 NA
## 98    24 masculino     NA     0      no suroeste  1977.815 NA
## 99    51 masculino     NA     1      no suroeste  9391.346 NA
## 100   NA masculino 38.190     0      no  noreste 14410.932  7
## 101   19  femenino     NA     1      no noroeste        NA NA
## 102   NA  femenino 23.370     3      no  noreste  8252.284  7
## 103   26  femenino     NA     1      no suroeste  3410.324 NA
## 104   NA  femenino 22.990     0     yes  sureste 27037.914  2
## 105   49 masculino     NA     1      no suroeste  8703.456 NA
## 106   40  femenino     NA     2     yes noroeste        NA NA
## 107   NA masculino 29.700     0      no  sureste  4399.731  7
## 108   55  femenino 40.810     3      no  sureste        NA  4
## 109   NA  femenino 17.400     1      no suroeste  2585.269 10
## 110   39 masculino     NA     2     yes suroeste 40103.890 NA
## 111   33  femenino     NA     1      no suroeste  4766.022 NA
## 112   NA masculino 26.125     2      no  noreste  7729.646  1
## 113   21 masculino     NA     0      no  noreste  2104.113 NA
## 114   53 masculino     NA     0      no  sureste  9504.310 NA
## 115   51  femenino 38.060     0     yes  sureste        NA  5
## 116   NA  femenino 23.540     2      no  sureste 10107.221  2
## 117   20 masculino     NA     0      no  noreste  1984.453 NA
## 118   NA  femenino     NA     0      no suroeste  2457.502 NA
## 119   NA  femenino 40.660     0      no  noreste  9875.680  8
## 120   41 masculino     NA     1      no noroeste  6664.686 NA
## 121   41  femenino     NA     1      no  sureste  6781.354 NA
## 122   24  femenino     NA     3      no suroeste  4234.927 NA
## 123   59  femenino     NA     3      no suroeste 14007.222 NA
## 124   49  femenino 34.770     1      no noroeste        NA  5
## 125   NA masculino 31.730     3     yes  noreste 36189.102  7
## 126   19 masculino 21.755     0      no noroeste        NA  2
## 127   45  femenino 25.175     2      no  noreste        NA  6
## 128   NA  femenino 23.180     0      no  noreste  2731.912  2
## 129   NA  femenino 31.825     2      no  noreste 16069.085  2
## 130   36  femenino 25.840     0      no noroeste        NA  1
## 131   36 masculino 31.500     0      no suroeste        NA  6
## 132   NA  femenino 32.780     2     yes  sureste        NA  6
## 133   41 masculino 28.800     1      no suroeste        NA  9
## 134   NA  femenino 30.020     0      no noroeste  5272.176  1
## 135   NA masculino 46.530     1      no  sureste  2927.065  8
## 136   NA masculino 22.990     2     yes noroeste 17361.766  7
## 137   63 masculino 21.660     1      no noroeste        NA  4
## 138   54  femenino 31.900     1      no  sureste        NA  1
## 139   47  femenino 32.000     1      no suroeste        NA  3
## 140   NA  femenino 30.400     0     yes noroeste        NA  3
## 141   54  femenino 31.240     0      no  sureste        NA  1
## 142   NA masculino 32.340     2      no  sureste  6338.076  1
## 143   28  femenino 33.110     0      no  sureste        NA  6
## 144   55 masculino 37.715     3      no noroeste        NA 10
## 145   22  femenino 30.400     0      no  noreste        NA  4
## 146   NA masculino 42.900     1      no suroeste  4536.259  5
table(is.na(data))
## 
## FALSE  TRUE 
## 10244   460
# Conversión de variables categóricas a factores
data <- data %>% 
  mutate(across(c(sexo, fumador, region), as.factor))

glimpse(data)
## Rows: 1,338
## Columns: 8
## $ edad    <dbl> 19, 18, 28, 33, NA, 31, 46, 37, 37, 60, 25, 62, 23, 56, 27, 19…
## $ sexo    <fct> femenino, masculino, masculino, masculino, masculino, femenino…
## $ imc     <dbl> 27.900, 33.770, 33.000, 22.705, 28.880, 25.740, 33.440, 27.740…
## $ hijos   <dbl> 0, 1, 3, 0, 0, 0, 1, 3, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,…
## $ fumador <fct> yes, no, no, no, no, no, no, no, no, no, no, yes, no, no, yes,…
## $ region  <fct> suroeste, sureste, sureste, noroeste, noroeste, sureste, sures…
## $ clm     <dbl> 16884.924, 1725.552, 4449.462, 21984.471, 3866.855, 3756.622, …
## $ X       <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
# Eliminación de valores duplicados
data <- distinct(data)

# Creación de identificador único
data <- data %>% mutate(id = paste(edad, sexo, region, sep = "_"))
# Imputación de valores faltantes en variables numéricas (media)
data <- data %>% mutate(
  imc = ifelse(is.na(imc), mean(imc, na.rm = TRUE), imc),
  clm = ifelse(is.na(clm), mean(clm, na.rm = TRUE), clm)
)

# Imputación de valores faltantes en variables categóricas (moda)
moda <- function(x) names(sort(table(x), decreasing = TRUE))[1]
data <- data %>% mutate(
  sexo = ifelse(is.na(sexo), moda(sexo), sexo),
  fumador = ifelse(is.na(fumador), moda(fumador), fumador),
  region = ifelse(is.na(region), moda(region), region)
)

# Resumen estadístico de variables numéricas
summary(select(data, edad, imc, hijos, clm))
##       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.: 4855  
##  Median :39.00   Median :30.59   Median :1.000   Median : 9674  
##  Mean   :39.23   Mean   :30.62   Mean   :1.095   Mean   :13278  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16108  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770  
##  NA's   :72
# (a) Distribución del Índice de Masa Corporal (IMC)
ggplot(data, aes(x = imc)) +
  geom_histogram(binwidth = 2, fill = "#2C3E50", color = "white", alpha = 0.8) +
  theme_minimal() +
  labs(title = "Distribución del Índice de Masa Corporal (IMC)",
       x = "IMC",
       y = "Frecuencia")

# (b) Media del monto de reclamación por sexo
data %>% group_by(sexo) %>% summarise(media_clm = mean(clm, na.rm = TRUE))
## # A tibble: 2 × 2
##    sexo media_clm
##   <int>     <dbl>
## 1     1    12514.
## 2     2    14026.
# (c) Media del monto de reclamación por fumador y sexo
data %>% group_by(fumador, sexo) %>% summarise(media_clm = mean(clm, na.rm = TRUE))
## `summarise()` has grouped output by 'fumador'. You can override using the
## `.groups` argument.
## # A tibble: 4 × 3
## # Groups:   fumador [2]
##   fumador  sexo media_clm
##     <int> <int>     <dbl>
## 1       1     1     8924.
## 2       1     2     8240.
## 3       2     1    29590.
## 4       2     2    32840.
# (d) Región con mayor monto promedio de reclamación
region_max <- data %>% group_by(region) %>% summarise(media_clm = mean(clm, na.rm = TRUE)) %>%
  arrange(desc(media_clm)) %>% slice(1)
print(region_max)
## # A tibble: 1 × 2
##   region media_clm
##    <int>     <dbl>
## 1      3    14564.
# (e) Creación de variable de obesidad
data <- data %>% mutate(obesidad = ifelse(imc > 30, "Sí", "No"))

# (f) Identificación del top 10 de reclamaciones en personas obesas
top_10_obesos <- data %>% filter(obesidad == "Sí") %>% 
  select(edad, sexo, hijos, clm, region) %>% 
  arrange(desc(clm)) %>% 
  head(10)
print(top_10_obesos)
##    edad sexo hijos      clm region
## 1    54    1     0 63770.43      3
## 2    45    2     0 62592.87      3
## 3    52    2     3 60021.40      2
## 4    31    1     1 58571.07      1
## 5    33    1     0 55135.40      2
## 6    60    2     0 52590.83      4
## 7    28    2     1 51194.56      4
## 8    64    2     2 49577.66      3
## 9    59    2     1 48970.25      3
## 10   44    1     0 48885.14      3
# Conclusiones sobre el tratamiento de valores faltantes y análisis
cat("Se implementó una estrategia de imputación basada en la media para variables numéricas y en la moda para variables categóricas, garantizando la coherencia de los datos. ",
    "Asimismo, se realizó un análisis exploratorio de las principales variables, proporcionando información clave sobre reclamaciones y factores asociados.")
## Se implementó una estrategia de imputación basada en la media para variables numéricas y en la moda para variables categóricas, garantizando la coherencia de los datos.  Asimismo, se realizó un análisis exploratorio de las principales variables, proporcionando información clave sobre reclamaciones y factores asociados.