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
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.