“PERUBANK” Es una institución financiera que cuenta con miles de clientes en todo el territorio nacional, esta organización brinda un conjunto de servicios a personas o empresas. En uno de sus servicios sobre préstamos personales en su cartera de clientes se registra y se hace seguimiento de los prestamos ofrecidos a tales clientes. Para la institución es importante evaluar la morosidad de los prestamos brindados, por lo que registra los datos y el seguimiento que se realiza durante un periodo. Los datos de “Ejemplo_banco_missing.csv” corresponden a los registros de los clientes que solicitaron un préstamo y si este fue cancelado o terminó en mora, en este ejemplo las variables que se toman en cuenta son: • Sexo: El género del cliente • Fono: Si el cliente tiene teléfono personal • Edad: Edad del cliente • Hijos: Número de hijos del cliente • Garante: Si el cliente cuenta con garante • Aval: Si el cliente avala algún préstamo • Meses: Meses que el cliente registra en la institución • Renta: Renta del cliente • Mora: Resultado del prestamos (si fue mora o no)
#Cargar
banco<-read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Estadistica-R/master/Ejemplo_banco_missing.csv",
sep = ";" , stringsAsFactors = TRUE)
head(banco)
## sexo fono edad hijos garante aval meses renta mora
## 1 Masculino Si 44 3 Si Si 63 Fija No
## 2 Masculino Si 77 4 Si No 62 Fija Si
## 3 Masculino No 59 5 No Si 59 Fija Si
## 4 Masculino No 35 5 Si Si 58 Fija Si
## 5 Masculino Si 65 0 No Si 56 Fija No
## 6 Femenino Si 66 1 No No 54 Fija No
which(colSums(is.na(banco))!=0)
## edad hijos meses
## 3 4 7
library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
##
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
##
## sleep
library(mice)
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
missingraf=aggr(banco,numbers=T)
summary(missingraf)
##
## Missings per variable:
## Variable Count
## sexo 0
## fono 0
## edad 5
## hijos 2
## garante 0
## aval 0
## meses 2
## renta 0
## mora 0
##
## Missings in combinations of variables:
## Combinations Count Percent
## 0:0:0:0:0:0:0:0:0 91 91
## 0:0:0:0:0:0:1:0:0 2 2
## 0:0:0:1:0:0:0:0:0 2 2
## 0:0:1:0:0:0:0:0:0 5 5
matrixplot(banco)
banco[38:4,]
## sexo fono edad hijos garante aval meses renta mora
## 38 Femenino No 57 5 Si Si 43 Fija Si
## 37 No NA 0 Si Si 44 Fija No
## 36 Masculino No 67 2 No Si 45 Fija No
## 35 Masculino No 65 5 Si Si 45 Fija Si
## 34 Masculino Si 68 1 No No 46 Fija No
## 33 Masculino No 66 0 No Si 46 Fija No
## 32 Masculino No 66 0 Si Si 46 Fija No
## 31 Masculino Si 64 4 No Si 46 Fija Si
## 30 Masculino Si 66 0 No Si 47 Fija No
## 29 Masculino Si 61 1 Si Si 47 Fija No
## 28 Femenino Si 69 1 Si No 48 Fija No
## 27 Masculino Si 69 3 No No 48 Fija No
## 26 Masculino No 68 3 No Si 48 Fija No
## 25 Masculino Si 75 1 No No 49 No
## 24 Masculino No 74 0 Si Si 49 Fija No
## 23 Masculino Si 61 0 No Si 49 Fija No
## 22 Masculino No 61 0 Si Si 49 Fija No
## 21 Femenino No 76 0 No Si 50 Fija No
## 20 Masculino No NA 1 Si No 50 Fija No
## 19 Masculino Si 68 1 No Si 50 Fija No
## 18 Masculino Si 73 0 Si Si 51 Fija No
## 17 Masculino No 73 4 Si Si 51 Fija Si
## 16 Masculino Si 72 5 Si 51 Fija Si
## 15 Si 69 0 No No 51 Fija No
## 14 Masculino Si 61 0 Si Si 51 Fija No
## 13 Masculino Si 60 0 No Si 51 Fija No
## 12 Femenino Si 76 0 Si No 52 Fija No
## 11 Femenino Si 52 0 Si Si 52 Variable No
## 10 Masculino No 75 1 Si Si 53 Fija Si
## 9 Masculino Si 74 0 No Si 53 Fija No
## 8 Masculino No 73 0 No No 53 Fija No
## 7 Femenino Si 73 5 Si Si 53 Fija Si
## 6 Femenino Si 66 1 No No 54 Fija No
## 5 Masculino Si 65 0 No Si 56 Fija No
## 4 Masculino No 35 5 Si Si 58 Fija Si
#con libreria mice
library(mice)
md.pattern(banco, rotate.names =TRUE)
## sexo fono garante aval renta mora hijos meses edad
## 91 1 1 1 1 1 1 1 1 1 0
## 5 1 1 1 1 1 1 1 1 0 1
## 2 1 1 1 1 1 1 1 0 1 1
## 2 1 1 1 1 1 1 0 1 1 1
## 0 0 0 0 0 0 2 2 5 9
library(visdat)
## Warning: package 'visdat' was built under R version 4.3.2
vis_dat(banco)
vis_miss(banco)
##2.1 Eliminar filas o columnas co missing(es recomendale optar por eliminar columnas si el % de missing esta por arriba del 15 % <para alguns expertos 30%>) solo para este ejemplo se va a eliminar filas:
banco_corregido1 <- na.omit(banco)
str(banco_corregido1)
## 'data.frame': 91 obs. of 9 variables:
## $ sexo : Factor w/ 3 levels "","Femenino",..: 3 3 3 3 3 2 2 3 3 3 ...
## $ fono : Factor w/ 2 levels "No","Si": 2 2 1 1 2 2 2 1 2 1 ...
## $ edad : int 44 77 59 35 65 66 73 73 74 75 ...
## $ hijos : int 3 4 5 5 0 1 5 0 0 1 ...
## $ garante: Factor w/ 2 levels "No","Si": 2 2 1 2 1 1 2 1 1 2 ...
## $ aval : Factor w/ 3 levels "","No","Si": 3 2 3 3 3 2 3 2 3 3 ...
## $ meses : int 63 62 59 58 56 54 53 53 53 53 ...
## $ renta : Factor w/ 3 levels "","Fija","Variable": 2 2 2 2 2 2 2 2 2 2 ...
## $ mora : Factor w/ 2 levels "No","Si": 1 2 2 2 1 1 2 1 1 2 ...
## - attr(*, "na.action")= 'omit' Named int [1:9] 20 37 42 43 58 62 84 87 97
## ..- attr(*, "names")= chr [1:9] "20" "37" "42" "43" ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido1))!= 0)
## named integer(0)
#2.2 Aplicando técnicas de imputación Imputación por medidas de tendencia central
library(DMwR2)
## Warning: package 'DMwR2' was built under R version 4.3.2
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
##
## Attaching package: 'DMwR2'
## The following object is masked from 'package:VIM':
##
## kNN
library(DMwR2)
banco_corregido2<-centralImputation(banco) #DMwR, mediana (númerico), moda(no númerico)
str(banco_corregido2)
## 'data.frame': 100 obs. of 9 variables:
## $ sexo : Factor w/ 3 levels "","Femenino",..: 3 3 3 3 3 2 2 3 3 3 ...
## $ fono : Factor w/ 2 levels "No","Si": 2 2 1 1 2 2 2 1 2 1 ...
## $ edad : int 44 77 59 35 65 66 73 73 74 75 ...
## $ hijos : num 3 4 5 5 0 1 5 0 0 1 ...
## $ garante: Factor w/ 2 levels "No","Si": 2 2 1 2 1 1 2 1 1 2 ...
## $ aval : Factor w/ 3 levels "","No","Si": 3 2 3 3 3 2 3 2 3 3 ...
## $ meses : num 63 62 59 58 56 54 53 53 53 53 ...
## $ renta : Factor w/ 3 levels "","Fija","Variable": 2 2 2 2 2 2 2 2 2 2 ...
## $ mora : Factor w/ 2 levels "No","Si": 1 2 2 2 1 1 2 1 1 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido2))!= 0)
## named integer(0)
##Utilizando otra librería para imputar datos
library(VIM)
banco_corregido3 <- initialise(banco, method = "median") #media (continuos) mediana (discretos),moda(no númerico)
str(banco_corregido3)
## 'data.frame': 100 obs. of 9 variables:
## $ sexo : Factor w/ 3 levels "","Femenino",..: 3 3 3 3 3 2 2 3 3 3 ...
## $ fono : Factor w/ 2 levels "No","Si": 2 2 1 1 2 2 2 1 2 1 ...
## $ edad : int 44 77 59 35 65 66 73 73 74 75 ...
## $ hijos : num 3 4 5 5 0 1 5 0 0 1 ...
## $ garante: Factor w/ 2 levels "No","Si": 2 2 1 2 1 1 2 1 1 2 ...
## $ aval : Factor w/ 3 levels "","No","Si": 3 2 3 3 3 2 3 2 3 3 ...
## $ meses : num 63 62 59 58 56 54 53 53 53 53 ...
## $ renta : Factor w/ 3 levels "","Fija","Variable": 2 2 2 2 2 2 2 2 2 2 ...
## $ mora : Factor w/ 2 levels "No","Si": 1 2 2 2 1 1 2 1 1 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido3))!= 0)
## named integer(0)
##Utilizando otra librería para imputar datos
library(VIM)
banco_corregido3 <- initialise(banco, method ="median") #media (continuos) mediana (discretos),moda(no númerico)
str(banco_corregido3)
## 'data.frame': 100 obs. of 9 variables:
## $ sexo : Factor w/ 3 levels "","Femenino",..: 3 3 3 3 3 2 2 3 3 3 ...
## $ fono : Factor w/ 2 levels "No","Si": 2 2 1 1 2 2 2 1 2 1 ...
## $ edad : int 44 77 59 35 65 66 73 73 74 75 ...
## $ hijos : num 3 4 5 5 0 1 5 0 0 1 ...
## $ garante: Factor w/ 2 levels "No","Si": 2 2 1 2 1 1 2 1 1 2 ...
## $ aval : Factor w/ 3 levels "","No","Si": 3 2 3 3 3 2 3 2 3 3 ...
## $ meses : num 63 62 59 58 56 54 53 53 53 53 ...
## $ renta : Factor w/ 3 levels "","Fija","Variable": 2 2 2 2 2 2 2 2 2 2 ...
## $ mora : Factor w/ 2 levels "No","Si": 1 2 2 2 1 1 2 1 1 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido3))!= 0)
## named integer(0)
##Imputación utilizando vecinos más cercanos
library(DMwR2)
banco_corregido4<-knnImputation(banco, k=10)
str(banco_corregido4)
## 'data.frame': 100 obs. of 9 variables:
## $ sexo : Factor w/ 3 levels "","Femenino",..: 3 3 3 3 3 2 2 3 3 3 ...
## $ fono : Factor w/ 2 levels "No","Si": 2 2 1 1 2 2 2 1 2 1 ...
## $ edad : num 44 77 59 35 65 66 73 73 74 75 ...
## $ hijos : num 3 4 5 5 0 1 5 0 0 1 ...
## $ garante: Factor w/ 2 levels "No","Si": 2 2 1 2 1 1 2 1 1 2 ...
## $ aval : Factor w/ 3 levels "","No","Si": 3 2 3 3 3 2 3 2 3 3 ...
## $ meses : num 63 62 59 58 56 54 53 53 53 53 ...
## $ renta : Factor w/ 3 levels "","Fija","Variable": 2 2 2 2 2 2 2 2 2 2 ...
## $ mora : Factor w/ 2 levels "No","Si": 1 2 2 2 1 1 2 1 1 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido4))!= 0)
## named integer(0)