Carga de Librerías

library(dplyr)
library(zoo)
library(ggplot2)

Primera Parte: Carga y Preparación de Datos

Carga de Datos Iniciales

datosiniciales <- read.csv("C:/Users/taroj/Documents/Actuaria_Octavo Semestre/COMPUTO CIENTIFICO/Practica 2/data_prac_2 1.csv")
str(datosiniciales)
## '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 ...

Detección y Manejo de Datos Faltantes

# Conocer si hay datos faltantes, nulos o vacios 
any(is.na(datosiniciales))
## [1] TRUE
colSums(datosiniciales == "")
##    edad    sexo     imc   hijos fumador  region     clm       X 
##      53       0      24       0       0       0      27      NA
# Reemplazar cadenas vacías con valores NA
datosiniciales[] <- lapply(datosiniciales, function(x) ifelse(x == "", NA, x))

# Cambiar las variables a numéricas
datosiniciales[c("edad", "imc", "clm", "hijos")] <- lapply(datosiniciales[c("edad", "imc", "clm", "hijos")], as.numeric)

Identificación de Datos Duplicados

# Identificamos datos duplicados
# También podemos proponer un identificador único para evitar duplicados en el conjunto de datos
duplicados <- duplicated(datosiniciales)
sum(duplicados)
## [1] 0
dim(datosiniciales)
## [1] 1338    8

Imputación de Valores No Disponibles

# Aplicar interpolación a las variables numéricas
datos_interpol <- data.frame(
  lapply(datosiniciales, function(x) {
    if(is.numeric(x)) {
      na.approx(x, na.rm = FALSE)  # Aplicar interpolación solo a las columnas numéricas
    } else {
      x  # Mantener las columnas no numéricas sin cambios
    }
  })
)

# Resumen estadístico de las variables imputadas
summary_interpol <- summary(datos_interpol[c("edad", "imc", "clm")])
summary_interpol
##       edad            imc             clm       
##  Min.   :18.00   Min.   :15.96   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.24   1st Qu.: 4784  
##  Median :39.00   Median :30.40   Median : 9410  
##  Mean   :39.27   Mean   :30.62   Mean   :13265  
##  3rd Qu.:51.00   3rd Qu.:34.56   3rd Qu.:16813  
##  Max.   :64.00   Max.   :53.13   Max.   :63770

Nota: La interpolación es adecuada si los valores faltantes se encuentran dispersos y puedes asumir continuidad en las variables numéricas.

Segunda Parte: Análisis de Datos

a. Histograma de Variables Numéricas

# Seleccionar las variables numéricas (edad, imc, clm)
variables_numericas <- datos_interpol[, c("edad", "imc", "clm")]

# Crear histograma para IMC
ggplot(datos_interpol, aes(x = imc)) +
  geom_histogram(binwidth = 2, fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Distribución del IMC", x = "IMC", y = "Frecuencia") +
  theme_minimal()

¿Es significativo para un análisis univariante?
El histograma es útil para analizar la distribución de una variable individual, pero si queremos ver relaciones entre variables, gráficos como boxplots o densidades podrían ser más útiles.

b. Media de Monto de Reclamación por Sexo

media_sexo <- aggregate(clm ~ sexo, data = datos_interpol, FUN = mean)
print(media_sexo)
##        sexo      clm
## 1  femenino 12517.00
## 2 masculino 13998.26

c. Media de Monto de Reclamación por Fumador y Sexo

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  8193.213
## 4     yes masculino 32873.799

d. Región con Mayor Monto Promedio de Reclamación

region_max <- aggregate(clm ~ region, data = datos_interpol, FUN = mean)
region_max[which.max(region_max$clm), ]
##    region      clm
## 3 sureste 14588.32

e. Creación de Columna “Obesidad”

datos_interpol$obesidad <- ifelse(datos_interpol$imc > 30, "Sí", "No")

f. Top 10 de Personas Obesas

top_obesos <- datos_interpol %>%
  filter(obesidad == "Sí") %>%
  select(edad, sexo, hijos, clm, region) %>%
  arrange(desc(clm)) %>%
  head(10)

print(top_obesos)
##    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

Conclusiones

El análisis realizado nos ha permitido identificar patrones importantes en los datos de seguros:

  1. El histograma de IMC muestra la distribución de esta variable en nuestra población.
  2. Se observan diferencias en los montos de reclamación según el sexo de los asegurados.
  3. La combinación de sexo y condición de fumador también muestra variaciones significativas en los montos de reclamación.
  4. Hemos identificado la región con el mayor monto promedio de reclamaciones.
  5. Se ha creado una categorización de obesidad basada en el IMC.
  6. El análisis del top 10 de personas obesas con mayores reclamaciones proporciona información valiosa para la gestión de riesgos.

Estos hallazgos pueden ser útiles para ajustar modelos de pricing y gestión de riesgos en el contexto actuarial.