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, reemplace con NA.

#Verifica valores vacíos
any(practica2 == "", na.rm = TRUE)
## [1] FALSE
# Cuenta las celdas vacías en cada columna, ignorando los NA.
colSums(practica2 == "", na.rm = TRUE) 
##    edad    sexo     imc   hijos fumador  region     clm 
##       0       0       0       0       0       0       0
# Limpiar la base, cambiando valores problemáticos no numéricos a NA para poder trabajar
practica2l <- practica2 %>%
  mutate(across(c(edad, imc, clm), ~ as.numeric(as.character(.))))
## Warning: There were 3 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `across(c(edad, imc, clm), ~as.numeric(as.character(.)))`.
## Caused by warning:
## ! NAs introducidos por coerción
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 2 remaining warnings.
#Verifica si hay celdas vacías en el dataframe 'practica2', ignorando los NA
any(practica2 == "", na.rm = TRUE)
## [1] FALSE
#Una vez que remplazamos valores podemos proseguir

b.Verifique que las variables tengan el fomato adeacuado para trabajar.

str(practica2l)
## tibble [1,338 × 7] (S3: tbl_df/tbl/data.frame)
##  $ edad   : num [1:1338] 19 18 28 33 NA 31 46 37 37 60 ...
##  $ sexo   : chr [1:1338] "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : num [1:1338] 27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : num [1:1338] 0 1 3 0 0 0 1 3 2 0 ...
##  $ fumador: chr [1:1338] "yes" "no" "no" "no" ...
##  $ region : chr [1:1338] "suroeste" "sureste" "sureste" "noroeste" ...
##  $ clm    : num [1:1338] 16885 1726 4449 21984 3867 ...

¿Hay manera de detectar valores duplicados?, en caso negativo, ¿qué podría proponer como identificador, para evitar duplicados en el data set?

Sí, sí es posible detectar valores duplicados en un conjunto de datos utilizando la librería janitor, y puedes hacer esto de una manera bastante sencilla. La función llamada get_dupes(), que te permite detectar y visualizar las filas duplicadas en tu dataset

#Verifica qué duplicados existen
practica2l%>%
  janitor::get_dupes()
## No variable names specified - using all columns.
## # A tibble: 2 × 8
##    edad sexo        imc hijos fumador region     clm dupe_count
##   <dbl> <chr>     <dbl> <dbl> <chr>   <chr>    <dbl>      <int>
## 1    19 masculino  30.6     0 no      noroeste 1640.          2
## 2    19 masculino  30.6     0 no      noroeste 1640.          2
#Eliminacion de valores duplicados
practica2L<- practica2l%>%
  distinct()
#Comparacion
dim(practica2l)
## [1] 1338    7
dim(practica2L)
## [1] 1337    7

Observamos que existía un valor duplicado en el data frame, por lo que fue importante realizar este

  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é?

El reemplazo con interpolación es el método más sugerido para manejar valores faltantes porque permite estimar los valores ausentes de manera coherente, utilizando la información disponible de los datos cercanos. A diferencia de otros métodos como eliminar filas o reemplazar por valores constantes, la interpolación preserva la tendencia y variabilidad del conjunto de datos, evitando distorsiones en el análisis.

#Reemplazar datos con la media
practica2L_mean<-data.frame(sapply(practica2L,
                                function(x) ifelse(is.na(x),
                                                   mean(x, na.rm=T),x)))

str(practica2L_mean)
## 'data.frame':    1337 obs. of  7 variables:
##  $ edad   : chr  "19" "18" "28" "33" ...
##  $ sexo   : chr  "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : chr  "27.9" "33.77" "33" "22.705" ...
##  $ hijos  : chr  "0" "1" "3" "0" ...
##  $ fumador: chr  "yes" "no" "no" "no" ...
##  $ region : chr  "suroeste" "sureste" "sureste" "noroeste" ...
##  $ clm    : chr  "16884.924" "1725.5523" "4449.462" "21984.47061" ...
#Convertir a variables numericas
practica2L_mean[,c(1,3:4,7)]<-lapply(practica2L_mean[,c(1,3:4,7)], as.numeric)
#Comparacion de ambos dataframe
summary(practica2L)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.22   1st Qu.:0.000  
##  Median :39.00   Mode  :character   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                     
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4750  
##  Mode  :character   Mode  :character   Median : 9382  
##                                        Mean   :13287  
##                                        3rd Qu.:16781  
##                                        Max.   :63770  
##                                        NA's   :41
summary(practica2L_mean)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.40   1st Qu.:0.000  
##  Median :39.24   Mode  :character   Median :30.59   Median :1.000  
##  Mean   :39.24                      Mean   :30.62   Mean   :1.096  
##  3rd Qu.:51.00                      3rd Qu.:34.40   3rd Qu.:2.000  
##  Max.   :64.00                      Max.   :53.13   Max.   :5.000  
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4878  
##  Mode  :character   Mode  :character   Median : 9705  
##                                        Mean   :13287  
##                                        3rd Qu.:16115  
##                                        Max.   :63770
#Reemplazar con la moda
practica2L_mode<-data.frame(lapply(practica2L,
                              function(x) ifelse(is.na(x),
                                                 mfv(x, na_rm=T),x)))
#Comprobar estructura del dataframe
str(practica2L_mode)
## 'data.frame':    1337 obs. of  7 variables:
##  $ edad   : num  19 18 28 33 18 31 46 37 37 60 ...
##  $ sexo   : chr  "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : num  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 ...
#Comparacion de ambos dataframe
summary(practica2L)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.22   1st Qu.:0.000  
##  Median :39.00   Mode  :character   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                     
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4750  
##  Mode  :character   Mode  :character   Median : 9382  
##                                        Mean   :13287  
##                                        3rd Qu.:16781  
##                                        Max.   :63770  
##                                        NA's   :41
summary(practica2L_mode)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:25.00   Class :character   1st Qu.:26.40   1st Qu.:0.000  
##  Median :38.00   Mode  :character   Median :30.59   Median :1.000  
##  Mean   :38.13                      Mean   :30.66   Mean   :1.096  
##  3rd Qu.:51.00                      3rd Qu.:34.40   3rd Qu.:2.000  
##  Max.   :64.00                      Max.   :53.13   Max.   :5.000  
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4762  
##  Mode  :character   Mode  :character   Median : 9305  
##                                        Mean   :13254  
##                                        3rd Qu.:16587  
##                                        Max.   :63770
#Reemplazar datos con la la mediana
practica2L_median<-data.frame(sapply(practica2L,
                                function(x) ifelse(is.na(x),
                                                   median(x, na.rm=T),x)))

#Comprobar estructura del dataframe
str(practica2L_median)
## 'data.frame':    1337 obs. of  7 variables:
##  $ edad   : chr  "19" "18" "28" "33" ...
##  $ sexo   : chr  "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : chr  "27.9" "33.77" "33" "22.705" ...
##  $ hijos  : chr  "0" "1" "3" "0" ...
##  $ fumador: chr  "yes" "no" "no" "no" ...
##  $ region : chr  "suroeste" "sureste" "sureste" "noroeste" ...
##  $ clm    : chr  "16884.924" "1725.5523" "4449.462" "21984.47061" ...
#Convertir a variables numericas
practica2L_median[,c(1,3:4,7)]<-lapply(practica2L_mean[,c(1,3:4,7)], as.numeric)

str(practica2L_median)
## 'data.frame':    1337 obs. of  7 variables:
##  $ edad   : num  19 18 28 33 39.2 ...
##  $ sexo   : chr  "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : num  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 ...
#Comparacion de ambos dataframe
summary(practica2L)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.22   1st Qu.:0.000  
##  Median :39.00   Mode  :character   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                     
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4750  
##  Mode  :character   Mode  :character   Median : 9382  
##                                        Mean   :13287  
##                                        3rd Qu.:16781  
##                                        Max.   :63770  
##                                        NA's   :41
summary(practica2L_median)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.40   1st Qu.:0.000  
##  Median :39.24   Mode  :character   Median :30.59   Median :1.000  
##  Mean   :39.24                      Mean   :30.62   Mean   :1.096  
##  3rd Qu.:51.00                      3rd Qu.:34.40   3rd Qu.:2.000  
##  Max.   :64.00                      Max.   :53.13   Max.   :5.000  
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4878  
##  Mode  :character   Mode  :character   Median : 9705  
##                                        Mean   :13287  
##                                        3rd Qu.:16115  
##                                        Max.   :63770

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?

El histograma es útil para el análisis univariante de variables numéricas, ya que muestra claramente la distribución de los datos. Sin embargo, no es el único gráfico útil. Otros, como los boxplots o gráficos de densidad, pueden proporcionar más detalles sobre la variabilidad, los outliers y la forma de la distribución, complementando el análisis.

#Reemplazar datos con INTERPOLACION
practica2L_inter<- data.frame(lapply(practica2L,
                                    function(x) ifelse(is.na(x),
                                                       na.approx(x, na.rm=T),
                                                       x)))

str(practica2L_inter)
## 'data.frame':    1337 obs. of  7 variables:
##  $ edad   : num  19 18 28 33 32 31 46 37 37 60 ...
##  $ sexo   : chr  "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : num  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 ...
#Comparacion de  ambos dataframe
summary(practica2L)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.22   1st Qu.:0.000  
##  Median :39.00   Mode  :character   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                     
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4750  
##  Mode  :character   Mode  :character   Median : 9382  
##                                        Mean   :13287  
##                                        3rd Qu.:16781  
##                                        Max.   :63770  
##                                        NA's   :41
summary(practica2L_inter)
##       edad           sexo                imc            hijos      
##  Min.   :18.00   Length:1337        Min.   :15.96   Min.   :0.000  
##  1st Qu.:27.00   Class :character   1st Qu.:26.22   1st Qu.:0.000  
##  Median :39.00   Mode  :character   Median :30.40   Median :1.000  
##  Mean   :39.29                      Mean   :30.62   Mean   :1.096  
##  3rd Qu.:51.00                      3rd Qu.:34.58   3rd Qu.:2.000  
##  Max.   :64.00                      Max.   :53.13   Max.   :5.000  
##    fumador             region               clm       
##  Length:1337        Length:1337        Min.   : 1122  
##  Class :character   Class :character   1st Qu.: 4796  
##  Mode  :character   Mode  :character   Median : 9411  
##                                        Mean   :13274  
##                                        3rd Qu.:16819  
##                                        Max.   :63770
#Edad
ggplot(practica2L_inter, aes(x = edad)) +
  geom_histogram(fill = "steelblue", color = "white") +  
  labs(title = "Gráfico Edad", x = "Edad", y = "Frecuencia") + 
  theme_light()  
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#CLM
ggplot(practica2L_inter, aes(x = clm)) +
  geom_histogram(fill = "orchid", color = "darkviolet") +  
  labs(title = "Gráfico CLM", x = "CLM", y = "Frecuencia") +  
  theme_light()  
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(practica2L_inter, aes(x = imc)) +
  geom_histogram(fill = "slategray3", color = "black") +
  labs(title = "Gráfico IMC", x = "IMC",y="Frecuencia") +
  theme_light()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#b)Calcule la media de monto de reclamación por sexo.
#Media de monto de reclamación por sexo.
mean_sex<- practica2L_inter%>%
  group_by(sexo)%>%
  summarise(media=mean(clm))
mean_sex
## # A tibble: 2 × 2
##   sexo       media
##   <chr>      <dbl>
## 1 femenino  12517.
## 2 masculino 14017.
#c)Calcule la media de monto de reclamación por fumador y sexo
#Media de monto de reclamación por sexo.
mean_sex_fum<- practica2L_inter%>%
  group_by(fumador,sexo)%>%
  summarise(media_sf=mean(clm), .groups = "drop")
mean_sex_fum
## # A tibble: 4 × 3
##   fumador sexo      media_sf
##   <chr>   <chr>        <dbl>
## 1 no      femenino     8935.
## 2 no      masculino    8206.
## 3 yes     femenino    29556.
## 4 yes     masculino   32874.