1. Realice una revisión de los datos nulos, vacíos o si tienen algún otro carácter:

  1. En caso de presentar valores diferentes a tipo numérico (las variables que apliquen), reemplace con NA.
datos <- read.csv('data_prac_2.csv',header = T,sep=',',dec = '.',
                na.strings = c('&&','null','$$',' '), stringsAsFactors = T)
  1. Verifique que las variables tengan el fomato adecuado para trabajar.
str(datos)
## 'data.frame':    1338 obs. of  7 variables:
##  $ edad   : int  19 18 28 33 NA 31 46 37 37 60 ...
##  $ sexo   : Factor w/ 2 levels "femenino","masculino": 1 2 2 2 2 1 1 1 2 1 ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : int  0 1 3 0 0 0 1 3 2 0 ...
##  $ fumador: Factor w/ 2 levels "no","s\xed": 2 1 1 1 1 1 1 1 1 1 ...
##  $ region : Factor w/ 4 levels "noreste","noroeste",..: 4 3 3 2 2 3 3 2 1 2 ...
##  $ clm    : num  16885 1726 4449 21984 3867 ...
datos$fumador <- lapply(datos$fumador, function(x) ifelse(x=='no','no','si'))
datos$fumador <- factor(datos$fumador, levels = c('si','no'))
str(datos)
## 'data.frame':    1338 obs. of  7 variables:
##  $ edad   : int  19 18 28 33 NA 31 46 37 37 60 ...
##  $ sexo   : Factor w/ 2 levels "femenino","masculino": 1 2 2 2 2 1 1 1 2 1 ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : int  0 1 3 0 0 0 1 3 2 0 ...
##  $ fumador: Factor w/ 2 levels "si","no": 1 2 2 2 2 2 2 2 2 2 ...
##  $ region : Factor w/ 4 levels "noreste","noroeste",..: 4 3 3 2 2 3 3 2 1 2 ...
##  $ clm    : num  16885 1726 4449 21984 3867 ...
  1. ¿Hay manera de detectar valores duplicados?, en caso negativo, ¿qué podría proponer como identificador, para evitar duplicados en el data set?

R: Sí, usaremos la siguiente linea para saber si hay datos negativos.

En caso de que si haya, haremos que omita los duplicados.

datos |> 
  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
datos <- datos |> 
  distinct()
  1. 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é?
colSums(is.na(datos))
##    edad    sexo     imc   hijos fumador  region     clm 
##      72       0      39       0       0       0      41

Haremos un data frame con todas las variables numéricas.

datos_n <- datos |> 
  select(where(is.numeric))

Realizar el reemplazo con la moda, mediana, media, media recortada e interpolación.

## Con la Moda
datos_mode <- data.frame(lapply(datos_n, function(x) ifelse(is.na(x),mfv(x,na_rm = T),x)))

## Con la Mediana
datos_median <- data.frame(lapply(datos_n,function(x) ifelse(is.na(x),median(x,na.rm=T),x)))

## Con la Media
datos_mean <- data.frame(lapply(datos_n,function(x) ifelse(is.na(x),mean(x,na.rm=T),x)))

## Con la Media Recortada
datos_mean_rec <- data.frame(lapply(datos_n,function(x) ifelse(is.na(x),mean(x,na.rm=T,trim=0.1),x)))

## Con Interpolacion
datos_interpol  <- data.frame(lapply(datos_n, function(x) ifelse(is.na(x),na.approx(x,na.rm=T),x)))


## Tabla resumen:
summary(datos)
##       edad              sexo          imc            hijos       fumador  
##  Min.   :18.00   femenino :662   Min.   :15.96   Min.   :0.000   si: 274  
##  1st Qu.:27.00   masculino:675   1st Qu.:26.22   1st Qu.:0.000   no:1063  
##  Median :39.00                   Median :30.30   Median :1.000            
##  Mean   :39.24                   Mean   :30.62   Mean   :1.096            
##  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:324   1st Qu.: 4750  
##  sureste :364   Median : 9382  
##  suroeste:325   Mean   :13287  
##                 3rd Qu.:16781  
##                 Max.   :63770  
##                 NA's   :41
summary(datos_mode)
##       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.: 4762  
##  Median :38.00   Median :30.59   Median :1.000   Median : 9305  
##  Mean   :38.13   Mean   :30.66   Mean   :1.096   Mean   :13254  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16587  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_median)
##       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.: 4878  
##  Median :39.00   Median :30.30   Median :1.000   Median : 9382  
##  Mean   :39.23   Mean   :30.61   Mean   :1.096   Mean   :13167  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16115  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_mean)
##       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.: 4878  
##  Median :39.24   Median :30.59   Median :1.000   Median : 9705  
##  Mean   :39.24   Mean   :30.62   Mean   :1.096   Mean   :13287  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16115  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_mean_rec)
##       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.: 4878  
##  Median :39.05   Median :30.45   Median :1.000   Median : 9705  
##  Mean   :39.23   Mean   :30.61   Mean   :1.096   Mean   :13219  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16115  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
summary(datos_interpol)
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.22   1st Qu.:0.000   1st Qu.: 4796  
##  Median :39.00   Median :30.40   Median :1.000   Median : 9411  
##  Mean   :39.29   Mean   :30.62   Mean   :1.096   Mean   :13274  
##  3rd Qu.:51.00   3rd Qu.:34.58   3rd Qu.:2.000   3rd Qu.:16819  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770

En lo personal recomiendo la interpolación por ser un método un poco más riguroso a la hora de realizar el reemplazo, aunque una media recortada no es una mala opción por los tipos de datos que tenemos.

2. Teniendo la base funcional, emplee el data set con reemplazamiento mediante interpolación, para realizar lo siguiente:

  1. 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?.
#Actualizo mi base
datos_f <- data.frame(sexo= datos$sexo, fumador=datos$fumador,region=datos$region,datos_interpol)

## Edad
ggplot(datos_f, aes(edad, colour=sexo)) + geom_histogram(fill='azure3') + 
theme_classic()+labs(title = 'Edades por sexo',y='Total', x='Edad') + 
scale_color_manual(values = c('magenta2','blue'))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## IMC
ggplot(datos_f, aes(imc, fill=sexo, colour= fumador)) + geom_histogram() + 
theme_classic() + labs(title = 'IMC por sexo/fumador', y='Total',x='IMC') + 
scale_fill_manual(values = c('magenta2','blue')) + 
scale_color_manual(values = c('black','gold'))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## No de Hijos
ggplot(datos_f, aes(hijos, colour=fumador)) + geom_histogram(fill = 'azure2') + 
theme_classic() + labs(title = 'No. de Hijos de fumador o no fumador', 
        y='Total',x='No. de Hijos') + 
scale_color_manual(values = c('chocolate4', 'chartreuse4'))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## Reclamacionbes
ggplot(datos_f, aes(clm, fill=fumador)) + geom_histogram() + theme_classic() + 
labs(title = 'Monto de las Reclamaciones por fumador o no fumador', y='Total', 
     x='Reclamaciones') + scale_fill_manual(values = c('magenta2','blue'))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Si puede ser el más significativo para iniciar un análisis, ya que con este grafico podemos tener un primer acercamiento para ver como se comportan. Además, poniendoles filtros para seccionar podemos obtener mucho más información.

  1. Calcule la media de monto de reclamación por sexo.
rec_sex <- datos_f |> 
  group_by(sexo) |>
  summarise(rec_promedio = mean(clm)) |>
  arrange(desc(rec_promedio))
rec_sex
## # A tibble: 2 × 2
##   sexo      rec_promedio
##   <fct>            <dbl>
## 1 masculino       14017.
## 2 femenino        12517.
  1. Calcule la media de monto de reclamación por fumador y sexo.
rec_fum_sex <- datos_f |> 
  group_by(fumador,sexo) |>
  summarise(rec_promedio = mean(clm)) |>
  arrange(desc(rec_promedio))
## `summarise()` has grouped output by 'fumador'. You can override using the
## `.groups` argument.
rec_fum_sex
## # A tibble: 4 × 3
## # Groups:   fumador [2]
##   fumador sexo      rec_promedio
##   <fct>   <fct>            <dbl>
## 1 si      masculino       32874.
## 2 si      femenino        29556.
## 3 no      femenino         8935.
## 4 no      masculino        8206.
ggplot(rec_fum_sex, aes(x=sexo, y= rec_promedio, fill = fumador )) + 
geom_bar(stat = 'identity', position = 'dodge') + theme_classic() + 
labs( title ='Reclamacion promedio por sexo', 
      subtitle = 'Filtrado por si es o no fumador', y='Recl. Prom')+ 
scale_fill_manual(values = c('chocolate4','chartreuse'))

  1. Identifique la región con mayor monto promedio de reclamación.
rec_reg <- datos_f |> 
  group_by(region) |>
  summarise(rec_promedio = mean(clm)) |>
   arrange(desc(rec_promedio))
rec_reg
## # A tibble: 4 × 2
##   region   rec_promedio
##   <fct>           <dbl>
## 1 sureste        14588.
## 2 noreste        13577.
## 3 noroeste       12418.
## 4 suroeste       12354.

La región con mayor monto promedio de reclamación es la sureste con \(14,588.32\)

  1. Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.
datos_f <- datos_f |> 
  mutate(Clasificación = ifelse(imc>30,'Obesidad',''))
head(datos_f,5)
##        sexo fumador   region edad    imc hijos       clm Clasificación
## 1  femenino      si suroeste   19 27.900     0 16884.924              
## 2 masculino      no  sureste   18 33.770     1  1725.552      Obesidad
## 3 masculino      no  sureste   28 33.000     3  4449.462      Obesidad
## 4 masculino      no noroeste   33 22.705     0 21984.471              
## 5 masculino      no noroeste   32 28.880     0  3866.855
  1. Identifique el top 10 de personas obesas indicando: edad, sexo, hijos, monto de reclamación y región
top_chubby <- datos_f |>
  select(imc,edad,sexo,hijos,clm,region) |>
  arrange(desc(imc))
head(top_chubby,10)
##      imc edad      sexo hijos       clm   region
## 1  53.13   18 masculino     0  1163.463  sureste
## 2  52.58   22 masculino     1 44501.398  sureste
## 3  50.38   23 masculino     1  2438.055  sureste
## 4  49.06   58 masculino     0 11381.325  sureste
## 5  47.74   52 masculino     1  9748.911  sureste
## 6  47.60   37  femenino     2 46113.511 suroeste
## 7  47.52   47 masculino     1  8083.920  sureste
## 8  47.41   54  femenino     0 63770.428  sureste
## 9  46.75   52  femenino     5 12592.534  sureste
## 10 46.70   54  femenino     2 11538.421 suroeste
## Usuemos la consulta anterior para graficar. 
top <- head(top_chubby,10)
ggplot(top, aes(edad,imc, colour=sexo)) + geom_point() + theme_classic() + 
labs(title = 'Top 10 personas ', subtitle = 'Por IMC filtrado por sexo', 
  x='Edad', y='IMC') + scale_color_manual(values = c('magenta2','blue'))