##1. Realice una revisión de los datos nulos, vacíos o si tienen algún otro carácter:
##a) Cargamos la base de datos y cambiamos los valores a NA
data_prac_2 <- read.csv2("data_prac_2 1.csv", header = T, sep = ",", dec = ".", na.strings = c("null", "$$", "&&"), stringsAsFactors = FALSE)
data_prac_2$X <- NULL ##Eliminamos la variable que estaba por error
##c) Vamos a ver si tenemos datos duplicados
data_prac_2 %>%
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
##tuvimos 1 dato duplicado, lo mejor es hacer un ID para cada persona
##d) Vamos a reemplazar los valores no disponibles con las técnicas usadas
##i) Reemplazamos los datos faltantes por la media--------------------------------------
data_prac_2_mean <- data.frame(lapply(data_prac_2,
function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x)))
summary(select(data_prac_2_mean, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
## 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.23 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
##ii) Reemplazamos los datos faltantes por la mediana-----------------------------------
data_prac_2_median <- data.frame(lapply(data_prac_2,
function(x) ifelse(is.na(x), median(x, na.rm = TRUE), x)))
summary(select(data_prac_2_median, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
## 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.30 Median :1.000 Median : 9378
## Mean :39.21 Mean :30.61 Mean :1.095 Mean :13158
## 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
##iii) Reemplazamos los datos faltantes por la media recortada------------------------
data_prac_2_mean_rec <- data.frame(lapply(data_prac_2,
function(x) ifelse(is.na(x), mean(x, na.rm = TRUE, trim = .1), x)))
summary(select(data_prac_2_mean_rec, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
## 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.03 Median :30.45 Median :1.000 Median : 9674
## Mean :39.21 Mean :30.61 Mean :1.095 Mean :13210
## 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
##iv) Reemplazar datos faltantes por la moda -----------------------------------------
data_prac_2_mode <- data.frame(lapply(data_prac_2,
function(x) ifelse(is.na(x), mfv(x, na_rm = TRUE), x)))
summary(select(data_prac_2_mode, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
## 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.: 4439
## Median :38.00 Median :30.59 Median :1.000 Median : 8983
## Mean :38.14 Mean :30.66 Mean :1.095 Mean :12921
## 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
##v) Ahora vamos a hacer interpolacion------------------------------------------------
data_prac_2_interpol <- data.frame(lapply(data_prac_2,
function(x) ifelse(is.na(x), na.approx(x, na.rm = TRUE), x)))
summary(select(data_prac_2_interpol, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
## edad imc hijos clm
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:27.00 1st Qu.:26.24 1st Qu.:0.000 1st Qu.: 4784
## Median :39.00 Median :30.40 Median :1.000 Median : 9410
## Mean :39.27 Mean :30.62 Mean :1.095 Mean :13265
## 3rd Qu.:51.00 3rd Qu.:34.56 3rd Qu.:2.000 3rd Qu.:16813
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
##La técnica que mas se recomienda para el reemplazo de datos faltantes (NA) es la de interpolación, seguida de la media recortada y después la mediana.
##b) Vamos a checar si las variables que tenemos estan en el formato adecuado para trabajar
names(data_prac_2) ##Saber que variables tenemos en la base de datos
## [1] "edad" "sexo" "imc" "hijos" "fumador" "region" "clm"
str(data_prac_2) ##saber de que tipo son nuestras variables
## 'data.frame': 1338 obs. of 7 variables:
## $ edad : int 19 18 28 33 NA 31 46 37 37 60 ...
## $ sexo : chr "femenino" "masculino" "masculino" "masculino" ...
## $ imc : num 27.9 33.8 33 22.7 28.9 ...
## $ hijos : int 0 1 3 0 0 0 1 3 2 0 ...
## $ fumador: chr "yes" "no" "no" "no" ...
## $ region : chr "suroeste" "sureste" "sureste" "noroeste" ...
## $ clm : num 16885 1726 4449 21984 3867 ...
##2. Teniendo la base funcional, emplee el data set con reemplazamiento mediante interpolación, para realizar lo siguiente:
##(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?.
##Vamos a seleccionar solo las variables numericas del data frame
data_prac_2_interpol_hist <- data_prac_2_interpol %>%
select(edad, imc, clm, hijos) %>%
pivot_longer(cols = everything(), names_to = "variable", values_to = "valor")
# Graficar histogramas
ggplot(data_prac_2_interpol_hist, aes(x = valor)) +
geom_histogram(bins = 30, fill = "red", color = "white") +
facet_wrap(~ variable, scales = "free") +
labs(title = "Histogramas de Variables Numéricas", x = "Valores", y = "Frecuencia") +
theme_minimal()

##Facet_wrap sirve para hacer un histograma por cada variable
##Este gráfico si podría ser el mas significativo, ya que nos da la frecuencia de cada una de nuestras variables numericas dentro de la base de datos que se ha utilizado.
##(b) Calcule la media de monto de reclamación por sexo.
clm_por_sexo <- data_prac_2_interpol %>%
group_by(sexo) %>%
summarise(media_clm = mean(clm, na.rm = TRUE))%>%
arrange(desc(media_clm))
head(clm_por_sexo)
## # A tibble: 2 × 2
## sexo media_clm
## <chr> <dbl>
## 1 masculino 13998.
## 2 femenino 12517.
##(c) Calcule la media de monto de reclamación por fumador y sexo.
clm_por_sexo_fumador <- data_prac_2_interpol %>%
group_by(sexo,fumador) %>%
summarise(media_clm_sex_fum = mean(clm, na.rm = TRUE))%>%
arrange(desc(media_clm_sex_fum))
## `summarise()` has grouped output by 'sexo'. You can override using the
## `.groups` argument.
head(clm_por_sexo_fumador)
## # A tibble: 4 × 3
## # Groups: sexo [2]
## sexo fumador media_clm_sex_fum
## <chr> <chr> <dbl>
## 1 masculino yes 32874.
## 2 femenino yes 29556.
## 3 femenino no 8935.
## 4 masculino no 8193.
##(d) Identifique la región con mayor monto promedio de reclamación.
clm_por_region <- data_prac_2_interpol %>%
group_by(region) %>%
summarise(media_clm_por_region = mean(clm, na.rm = TRUE))%>%
arrange(desc(media_clm_por_region))
head(clm_por_region)
## # A tibble: 4 × 2
## region media_clm_por_region
## <chr> <dbl>
## 1 sureste 14588.
## 2 noreste 13577.
## 3 noroeste 12385.
## 4 suroeste 12354.
##El sureste es la region con mayor monto promedio de reclamación, con una cifra de: 14588.32
##(e) Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.
data_prac_2_interpol <- data_prac_2_interpol %>%
mutate(obesidad = ifelse(imc > 30, "Sí", "No")) ##Utilizamos la funcion mutate para crear la variable obesidad.
##(f) Identifique el top 10 de personas obesas indicando: edad, sexo, hijos, monto de reclamación y región.
top_personas_obesas <- data_prac_2_interpol %>%
filter(obesidad == "Sí") %>% # Filtrar solo a las personas obesas
select(edad, sexo, hijos, clm, region) %>% # Seleccionar las columnas que se nos piden
arrange(desc(clm)) # Ordenar de mayor a menor por monto de reclamación
head(top_personas_obesas, 10) # Nos imprime las 10 primeras personas obesas con mayor monto de reclamacion
## edad sexo hijos clm region
## 1 54 femenino 0 63770.43 sureste
## 2 45 masculino 0 62592.87 sureste
## 3 52 masculino 3 60021.40 noroeste
## 4 31 femenino 1 58571.07 noreste
## 5 33 femenino 0 55135.40 noroeste
## 6 60 masculino 0 52590.83 suroeste
## 7 28 masculino 1 51194.56 suroeste
## 8 64 masculino 2 49577.66 sureste
## 9 59 masculino 1 48970.25 sureste
## 10 44 femenino 0 48885.14 sureste