setwd("~/Rstudio/8Semestre/Practica2CC")
#SUbimos base
dataPrac<- read.csv("~/Rstudio/8Semestre/Practica2CC/data_prac_2 1.csv")
dataPracCuantos datos faltantes hay?
## [1] 308
Verificamos cuantos datos vacios tenemos por columna
## 'data.frame': 1338 obs. of 8 variables:
## $ edad : chr "19" "18" "28" "33" ...
## $ sexo : chr "femenino" "masculino" "masculino" "masculino" ...
## $ imc : chr "27.9" "33.77" "33" "22.705" ...
## $ 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 : chr "16884.924" "1725.5523" "4449.462" "21984.47061" ...
## $ X : int NA NA NA NA NA NA NA NA NA NA ...
Podemos ver que si hay datos faltantes
# Convertir columnas numéricas correctamente
dataPrac$edad <- as.numeric(dataPrac$edad)
dataPrac$imc <- as.numeric(dataPrac$imc)
dataPrac$clm <- as.numeric(dataPrac$clm)
# Cambiar las variables categóricas a factores
dataPrac$sexo <- as.factor(dataPrac$sexo)
dataPrac$fumador <- as.factor(dataPrac$fumador)
dataPrac$region <- as.factor(dataPrac$region)
# Eliminar la columna "X", ya que no es necesaria para el estudio
dataPrac <- dataPrac %>% select(-X)
# Convertir a numérico y reemplazar valores no numéricos con NA
dataPrac$edad <- as.numeric(as.character(dataPrac$edad))
dataPrac$imc <- as.numeric(as.character(dataPrac$imc))
dataPrac$clm <- as.numeric(as.character(dataPrac$clm))## 'data.frame': 1338 obs. of 7 variables:
## $ edad : num 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","yes": 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 ...
## 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 yes: 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
# Detectar valores duplicados
duplicados <- dataPrac %>% duplicated()
# Contar cuántas filas duplicadas hay
sum(duplicados) ## [1] 1
# Eliminar filas duplicadas
dataPrac <- dataPrac %>% distinct()
# Verificar estructura después de eliminar duplicados
str(dataPrac)## 'data.frame': 1337 obs. of 7 variables:
## $ edad : num 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","yes": 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 ...
# Reemplazo con la Media
datos_mean <- data.frame(lapply(dataPrac, function(x)
ifelse(is.na(x), mean(x, na.rm = TRUE), x)))
# Reemplazo con la Mediana
datos_median <- data.frame(lapply(dataPrac, function(x)
ifelse(is.na(x), median(x, na.rm = TRUE), x)))
# Reemplazo con la Moda (para valores categóricos)
library(modeest)
datos_mode <- data.frame(lapply(dataPrac, function(x)
ifelse(is.na(x), mfv(x, na_rm = TRUE), x)))
# Resumen Estadístico de las Variables NuméricasPara el método de la media
## edad sexo imc hijos
## Min. :18.00 Min. :1.000 Min. :15.96 Min. :0.000
## 1st Qu.:27.00 1st Qu.:1.000 1st Qu.:26.40 1st Qu.:0.000
## Median :39.24 Median :2.000 Median :30.59 Median :1.000
## Mean :39.24 Mean :1.505 Mean :30.62 Mean :1.096
## 3rd Qu.:51.00 3rd Qu.:2.000 3rd Qu.:34.40 3rd Qu.:2.000
## Max. :64.00 Max. :2.000 Max. :53.13 Max. :5.000
## fumador region clm
## Min. :1.000 Min. :1.000 Min. : 1122
## 1st Qu.:1.000 1st Qu.:2.000 1st Qu.: 4878
## Median :1.000 Median :3.000 Median : 9705
## Mean :1.205 Mean :2.516 Mean :13287
## 3rd Qu.:1.000 3rd Qu.:3.000 3rd Qu.:16115
## Max. :2.000 Max. :4.000 Max. :63770
Para el método de la mediana
## edad sexo imc hijos
## Min. :18.00 Min. :1.000 Min. :15.96 Min. :0.000
## 1st Qu.:27.00 1st Qu.:1.000 1st Qu.:26.40 1st Qu.:0.000
## Median :39.00 Median :2.000 Median :30.30 Median :1.000
## Mean :39.23 Mean :1.505 Mean :30.61 Mean :1.096
## 3rd Qu.:51.00 3rd Qu.:2.000 3rd Qu.:34.40 3rd Qu.:2.000
## Max. :64.00 Max. :2.000 Max. :53.13 Max. :5.000
## fumador region clm
## Min. :1.000 Min. :1.000 Min. : 1122
## 1st Qu.:1.000 1st Qu.:2.000 1st Qu.: 4878
## Median :1.000 Median :3.000 Median : 9382
## Mean :1.205 Mean :2.516 Mean :13167
## 3rd Qu.:1.000 3rd Qu.:3.000 3rd Qu.:16115
## Max. :2.000 Max. :4.000 Max. :63770
Para el método de la moda
## edad sexo imc hijos
## Min. :18.00 Min. :1.000 Min. :15.96 Min. :0.000
## 1st Qu.:25.00 1st Qu.:1.000 1st Qu.:26.40 1st Qu.:0.000
## Median :38.00 Median :2.000 Median :30.59 Median :1.000
## Mean :38.13 Mean :1.505 Mean :30.66 Mean :1.096
## 3rd Qu.:51.00 3rd Qu.:2.000 3rd Qu.:34.40 3rd Qu.:2.000
## Max. :64.00 Max. :2.000 Max. :53.13 Max. :5.000
## fumador region clm
## Min. :1.000 Min. :1.000 Min. : 1122
## 1st Qu.:1.000 1st Qu.:2.000 1st Qu.: 4762
## Median :1.000 Median :3.000 Median : 9305
## Mean :1.205 Mean :2.516 Mean :13254
## 3rd Qu.:1.000 3rd Qu.:3.000 3rd Qu.:16587
## Max. :2.000 Max. :4.000 Max. :63770
Sugiero utilizar la mediana, ya no se ve afectada por los valores extremos o atípicos y, por lo tanto, proporciona una mejor estimación de la tendencia central en presencia de sesgo.
# Agregar las variables categóricas desde la base original (dataPrac)
datos_interpol <- data.frame(lapply(dataPrac, function(x)
ifelse(is.na(x), na.approx(x, na.rm = FALSE), x)))
datos_interpol <- datos_interpol %>%
mutate(
sexo = dataPrac$sexo,
fumador = dataPrac$fumador,
region = dataPrac$region,
hijos = dataPrac$hijos
)# Generar el histograma para la variable IMC
ggplot(datos_interpol, aes(x = imc)) +
geom_histogram (binwidth = 2, fill = "blue", color = "black", alpha = 0.7) + # Histograma con bins de tamaño 2
labs(title = "Distribución del IMC", x = "IMC", y = "Frecuencia") + # Títulos y etiquetas
theme_minimal()¿El grafico es significativo para un análisis univariante? Sí, un histograma es una herramienta muy útil y significativa para un análisis univariante, especialmente cuando se busca analizar la distribución de una variable numérica como el IMC
## sexo clm
## 1 femenino 12517.00
## 2 masculino 14016.57
media_fumador_sexo <- aggregate(clm ~ fumador + sexo, data = datos_interpol, FUN = mean)
print(media_fumador_sexo)## fumador sexo clm
## 1 no femenino 8934.788
## 2 yes femenino 29555.859
## 3 no masculino 8205.914
## 4 yes masculino 32873.799
# Asegúrate de tener la librería ggplot2 cargada
library(ggplot2)
# Crear la gráfica de barras para mostrar la media de 'clm' por 'fumador' y 'sexo'
ggplot(media_fumador_sexo, aes(x = fumador, y = clm, fill = sexo)) +
geom_bar(stat = "identity", position = "dodge") + # Barras para cada combinación
labs(title = "Media del Monto de Reclamación por Fumador y Sexo",
x = "Fumador",
y = "Media del Monto de Reclamación") +
scale_fill_manual(values = c("blue", "pink")) + # Colores personalizados para 'sexo'
theme_minimal() # Tema minimalistaregion_max <- aggregate(clm ~ region, data = datos_interpol, FUN = mean)
region_max[which.max(region_max$clm), ]# Asegúrate de tener la librería ggplot2 cargada
library(ggplot2)
# Crear la gráfica de barras para mostrar la media de 'clm' por 'region'
ggplot(region_max, aes(x = region, y = clm, fill = region)) +
geom_bar(stat = "identity") + # Barras con altura proporcional a la media
labs(title = "Media del Monto de Reclamación por Región",
x = "Región",
y = "Media del Monto de Reclamación") +
theme_minimal() + # Tema minimalista
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar las etiquetas del eje x si las regiones son largas##Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.
datos_interpol <- datos_interpol %>%
mutate(obesidad = ifelse(imc > 30, "Obesidad", "No Obesidad"))
head(datos_interpol)topobesos<- datos_interpol %>%
filter(obesidad == "Obesidad") %>%
select(edad, sexo, hijos, clm, region) %>%
arrange(desc(clm)) %>%
head(10)
print(topobesos)## 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
# Crear el gráfico de barras para obesidad por región
ggplot(datos_interpol, aes(x = region, fill = obesidad)) +
geom_bar(position = "dodge") + # Barras separadas por obesidad
labs(title = "Distribución de Obesidad por Región",
x = "Región",
y = "Número de Personas") +
scale_fill_manual(values = c("lightblue", "salmon")) + # Colores para las categorías de obesidad
theme_minimal() # Tema minimalista