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