De la base de datos proporcionada con las variables (edad, sexo, índice masa corpo- ral, hijos, fumador, región y monto reclamación), use el archivo Rmd, para realizar lo siguiente: 1. Realice una revisión de los datos nulos, vacíos o si tienen algún otro carácter: (a) En caso de presentar valores diferentes a tipo numérico (las vairables que apliquen), reemplace con NA. (b) Verifique que las variables tengan el fomato adecuado para trabajar. (c) ¿Hay manera de detectar valores duplicados?, en caso negativo, ¿qué podría proponer como identificador, para evitar duplicados en el data set? (d) Reemplace los valores no disponibles con las técnicas usadas, y haga una tabla resumen sobre los resultados (summary) de las variables numéricas, ¿cuál técnica sugiere usar y por qué?

Comenzamos cargando nuestra base de datos y haciendo limpieza remplazando los caracteres no validos por valores nulos

setwd("/home/davidm/Documentos/Programación/R/Comp_C")
datos <- read.csv("data_prac_2.csv", header = T, sep = ",", dec = ".",
                na.strings = c("$$", "null", "&&"), stringsAsFactors = T)

Despues le damos un vistazo estadistico a nuestra base y posteriormente revisamos los datos duplicados y vacios. Creamos una base unicamente para trabajar con nuestros datos de una forma numerica

summary(datos)
##       edad              sexo          imc            hijos        fumador    
##  Min.   :18.00   femenino :662   Min.   :15.96   Min.   :0.000   no   :1064  
##  1st Qu.:27.00   masculino:676   1st Qu.:26.22   1st Qu.:0.000   s\xed: 274  
##  Median :39.00                   Median :30.30   Median :1.000               
##  Mean   :39.23                   Mean   :30.62   Mean   :1.095               
##  3rd Qu.:51.00                   3rd Qu.:34.59   3rd Qu.:2.000               
##  Max.   :64.00                   Max.   :53.13   Max.   :5.000               
##  NA's   :72                      NA's   :39                                  
##       region         clm       
##  noreste :324   Min.   : 1122  
##  noroeste:325   1st Qu.: 4747  
##  sureste :364   Median : 9378  
##  suroeste:325   Mean   :13278  
##                 3rd Qu.:16776  
##                 Max.   :63770  
##                 NA's   :41
sum(duplicated(datos))
## [1] 1
sum(is.na(datos))
## [1] 152
dat <- datos%>%
  select(clm,where(is.numeric))
View(dat)

Revisamos los registros duplicados y los eliminamos al mismo tiempo verificamos las dimenciones de la base original y la nueva con la que estaremos trabajando

dat%>%
  janitor::get_dupes()
## No variable names specified - using all columns.
##        clm edad   imc hijos dupe_count
## 1 1639.563   19 30.59     0          2
## 2 1639.563   19 30.59     0          2
dat <- datos%>%
  distinct()
dim(dat)
## [1] 1337    7
dim(datos)
## [1] 1338    7

Verificamos las clases de nuestros datos para saber si son los correctos o habla que modificarlos

class(dat$edad)
## [1] "integer"
class(dat$sexo)
## [1] "factor"
class(dat$imc)
## [1] "numeric"
class(dat$hijos)
## [1] "integer"
class(dat$fumador)
## [1] "factor"
class(dat$region)
## [1] "factor"
class(dat$clm)
## [1] "numeric"

Aparentemente todos son correctos. Posteriormente generamos varias bases con modificaciones especificas para entender el comportamiento de los datos y que representacion nos es mas favorable

Eliminando los datos vacios

datos_vacios <- datos%>%
  na.omit()
sum(is.na(datos_vacios))
## [1] 0

Remplazando datos faltantes con medias

datos_mean <- data.frame(lapply(dat,
                                function(x) ifelse(is.na(x),
                                                   mean(x, na.rm = T), x)))
sum(is.na(datos_mean))
## [1] 0
summary(datos_mean$clm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1122    4878    9705   13287   16115   63770

Medias recortadas

datos_rec <- data.frame(lapply(dat,
                               function(x) ifelse(is.na(x),
                                                  mean(x, na.rm = T, trim = .25), x)))
sum(is.na(datos_rec))
## [1] 0
summary(datos_rec$clm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1122    4878    9559   13173   16115   63770

Mediana

datos_med <- data.frame(lapply(dat,
                               function(x) ifelse(is.na(x),
                                                  median(x, na.rm = T), x)))

sum(is.na(datos_med$clm))
## [1] 0
summary(datos_mean$clm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1122    4878    9705   13287   16115   63770

Mediana

datos_interpol <- data.frame(lapply(dat, 
                                    function(x) ifelse(is.na(x),
                                                       na.approx(x, na.rm = T), x)))
sum(is.na(datos_interpol))
## [1] 0
summary(datos_interpol$clm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1122    4796    9411   13274   16819   63770

Moda

datos_moda <- data.frame(lapply(dat, 
                                function(x) ifelse(is.na(x),
                                                   mfv(x, na_rm = T), x)))
sum(is.na(datos_moda))
## [1] 0
summary(datos_moda$clm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1122    4762    9305   13254   16586   63770

Nos quedaremos con datos_interpol

head(datos_interpol)
##   edad sexo    imc hijos fumador region       clm
## 1   19    1 27.900     0       2      4 16884.924
## 2   18    2 33.770     1       1      3  1725.552
## 3   28    2 33.000     3       1      3  4449.462
## 4   33    2 22.705     0       1      2 21984.471
## 5   32    2 28.880     0       1      2  3866.855
## 6   31    1 25.740     0       1      3  3756.622

histograma para analizar las variables numéricas

datos_num <- datos_interpol %>%
  select(where(is.numeric)) %>%
  pivot_longer(cols = everything(), names_to = "variable", values_to = "valor")

ggplot(datos_num, aes(x = valor)) +
  geom_histogram(bins = 30, fill = "steelblue", color = "black", alpha = 0.7) +
  facet_wrap(~variable, scales = "free") +
  theme_minimal() +
  labs(title = "Histogramas de variables nunericas", x = "", y = "Frecuencia")

¿este sería el tipo de gráfico más significativo para su análisis uni- variante?Si, nos permite visualizar mejor el comportamiento de los datos

Calcule la media de monto de reclamación por sexo.

sexo_mean <- datos_interpol %>%
  group_by(sexo) %>%
  summarise(media_clm = mean(clm, na.rm = TRUE))
sexo_mean
## # A tibble: 2 × 2
##    sexo media_clm
##   <int>     <dbl>
## 1     1    12517.
## 2     2    14017.

Calcule la media de monto de reclamación por fumador y sexo.

sexo_fuma_mean <- datos_interpol %>%
  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.
sexo_fuma_mean
## # A tibble: 4 × 3
## # Groups:   fumador [2]
##   fumador  sexo media_clm
##     <int> <int>     <dbl>
## 1       1     1     8935.
## 2       1     2     8206.
## 3       2     1    29556.
## 4       2     2    32874.

Identifique la región con mayor monto promedio de reclamación.

region_max <- datos_interpol %>%
  group_by(region) %>%
  summarise(media_clm = mean(clm, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(media_clm))
head(region_max)
## # A tibble: 4 × 2
##   region media_clm
##    <int>     <dbl>
## 1      3    14588.
## 2      1    13577.
## 3      2    12418.
## 4      4    12354.

Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.

datos_interpol <- datos_interpol %>%
  mutate(obesidad = ifelse(imc > 30, "si", "no"))
head(datos_interpol)
##   edad sexo    imc hijos fumador region       clm obesidad
## 1   19    1 27.900     0       2      4 16884.924       no
## 2   18    2 33.770     1       1      3  1725.552       si
## 3   28    2 33.000     3       1      3  4449.462       si
## 4   33    2 22.705     0       1      2 21984.471       no
## 5   32    2 28.880     0       1      2  3866.855       no
## 6   31    1 25.740     0       1      3  3756.622       no

Identifique el top 10 de personas obesas indicando: edad, sexo, hijos, monto de reclamación y región.

top_obesos <- datos_interpol %>%
  filter(obesidad == "si") %>%
  select(edad, sexo, hijos, clm, region) %>%
  arrange(desc(clm))
head(top_obesos, 10)
##    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