base <- read.csv("data_prac_2 1.csv", stringsAsFactors = FALSE)
glimpse(base)
## 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…
View(base)
# Verificar valores no numéricos 
base %>% 
  select(edad, imc, hijos, clm) %>% 
  summarise_all(~sum(!is.numeric(.), na.rm = TRUE))
##   edad imc hijos clm
## 1    1   1     0   1
# Convertir datos no numéricos a NA
base <- base %>%
  mutate(across(c(edad, imc, hijos, clm), ~ suppressWarnings(as.numeric(.))))
# Filtrar y mostrar los registros con valores NA después de la conversión
base %>% 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(base))
## 
## FALSE  TRUE 
## 10244   460
# Convertir las variables categóricas en factores (tipo factor)
base <- base %>%
  mutate(sexo = as.factor(sexo),
         fumador = as.factor(fumador),
         region = as.factor(region))
glimpse(base)
## 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…
# Eliminar registros duplicados en el conjunto de datos
base <- distinct(base)

# Crear una nueva columna 'id' que combina edad, sexo y región
base <- base %>% 
  mutate(id = paste(edad, sexo, region, sep = "_"))
# Completar valores numéricos faltantes con la media
base <- base %>% 
  mutate(imc = ifelse(is.na(imc), mean(imc, na.rm = TRUE), imc),
  clm = ifelse(is.na(clm), mean(clm, na.rm = TRUE), clm))

# Función para calcular la moda
moda <- function(x) names(sort(table(x), decreasing = TRUE))[1]

# Reemplazar los valores faltantes en las variables categóricas con la moda
base <- base %>% 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)
)

# Generar un resumen estadístico de las variables numéricas
summary(select(base, 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
#Reemplazar los valores faltantes con la media es útil para variables numéricas cuando los datos no tienen valores atípicos, porque que mantiene la tendencia central sin distorsionar mucho los resultados. Para variables categóricas, reemplazar con la moda es efectivo, ya que conserva la categoría más frecuente y no altera la distribución. 
# (a) Histograma para visualizar la distribución del IMC
ggplot(base, aes(x = imc)) +
  geom_histogram(binwidth = 2, fill = "lightblue", alpha = 0.7) +
  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
base %>% 
  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 estado de fumador y género
base %>% 
  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) Identificación de la región con mayor promedio de reclamaciones
region_mayor_clm <- base %>% 
  group_by(region) %>% summarise(media_clm = mean(clm, na.rm = TRUE)) %>%
  arrange(desc(media_clm)) %>% slice(1)
print(region_mayor_clm)
## # A tibble: 1 × 2
##   region media_clm
##    <int>     <dbl>
## 1      3    14564.
# (e) Creación de una nueva variable categórica sobre obesidad
base <- base %>% 
  mutate(Obesidad = ifelse(imc > 30, "Sí", "No"))

# (f) Top 10 personas obesas 
top_10_obesos <- base %>% 
  filter(Obesidad == "Sí") %>% 
  select(edad, sexo, hijos, clm, region,imc) %>%
  arrange(desc(imc)) %>% 
  head(10)
print(top_10_obesos)
##    edad sexo hijos       clm region   imc
## 1    18    2     0  1163.463      3 53.13
## 2    22    2     1 44501.398      3 52.58
## 3    23    2     1  2438.055      3 50.38
## 4    58    2     0 11381.325      3 49.06
## 5    52    2     1  9748.911      3 47.74
## 6    37    1     2 46113.511      4 47.60
## 7    47    2     1  8083.920      3 47.52
## 8    54    1     0 63770.428      3 47.41
## 9    52    1     5 12592.534      3 46.75
## 10   54    1     2 11538.421      4 46.70