Cargar Base
Limpiar Memoria
rm(list=ls())
source(list.files(pattern = "LIBRERIAS.R"))
## Warning: replacing previous import 'vctrs::data_frame' by 'tibble::data_frame'
## when loading 'dplyr'
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## Loading required package: lattice
##
## Attaching package: 'BSDA'
## The following objects are masked from 'package:carData':
##
## Vocab, Wool
## The following object is masked from 'package:datasets':
##
## Orange
## Warning: package 'gmodels' was built under R version 4.0.4
df <- read.csv("Insumos/Dafault_Depurada.csv")
head(df)
## ID LIMIT_BAL SEX EDUCATION MARRIAGE AGE PAY_0 PAY_2 PAY_3 PAY_4 PAY_5 PAY_6
## 1 1 20000 F Pregrado Casado 24 2 2 -1 -1 -2 -2
## 2 2 120000 F Pregrado Soltero 26 -1 2 0 0 0 2
## 3 3 90000 F Pregrado Soltero 34 0 0 0 0 0 0
## 4 4 50000 F Pregrado Casado 37 0 0 0 0 0 0
## 5 5 50000 M Pregrado Casado 57 -1 0 -1 0 0 0
## 6 6 50000 M Posgrado Soltero 37 0 0 0 0 0 0
## BILL_AMT1 BILL_AMT2 BILL_AMT3 BILL_AMT4 BILL_AMT5 BILL_AMT6 PAY_AMT1 PAY_AMT2
## 1 3913 3102 689 0 0 0 0 689
## 2 2682 1725 2682 3272 3455 3261 0 1000
## 3 29239 14027 13559 14331 14948 15549 1518 1500
## 4 46990 48233 49291 28314 28959 29547 2000 2019
## 5 8617 5670 35835 20940 19146 19131 2000 36681
## 6 64400 57069 57608 19394 19619 20024 2500 1815
## PAY_AMT3 PAY_AMT4 PAY_AMT5 PAY_AMT6 default
## 1 0 0 0 0 1
## 2 1000 1000 0 2000 1
## 3 1000 1000 1000 5000 0
## 4 1200 1100 1069 1000 0
## 5 10000 9000 689 679 0
## 6 657 1000 1000 800 0
df$SEX=as.factor(df$SEX)
df$EDUCATION=as.factor(df$EDUCATION)
df$MARRIAGE=as.factor(df$MARRIAGE)
summary(df)
## ID LIMIT_BAL SEX EDUCATION MARRIAGE
## Min. : 1 Min. : 10000 F:17855 Bachiller: 4873 Casado :13477
## 1st Qu.: 7474 1st Qu.: 50000 M:11746 Otros : 123 Otros : 318
## Median :14953 Median : 140000 Posgrado :10581 Soltero:15806
## Mean :14972 Mean : 167551 Pregrado :14024
## 3rd Qu.:22463 3rd Qu.: 240000
## Max. :30000 Max. :1000000
## AGE PAY_0 PAY_2 PAY_3
## Min. :21.00 Min. :-2.00000 Min. :-2.0000 Min. :-2.0000
## 1st Qu.:28.00 1st Qu.:-1.00000 1st Qu.:-1.0000 1st Qu.:-1.0000
## Median :34.00 Median : 0.00000 Median : 0.0000 Median : 0.0000
## Mean :35.46 Mean :-0.01493 Mean :-0.1313 Mean :-0.1634
## 3rd Qu.:41.00 3rd Qu.: 0.00000 3rd Qu.: 0.0000 3rd Qu.: 0.0000
## Max. :79.00 Max. : 8.00000 Max. : 8.0000 Max. : 8.0000
## PAY_4 PAY_5 PAY_6 BILL_AMT1
## Min. :-2.0000 Min. :-2.000 Min. :-2.0000 Min. :-165580
## 1st Qu.:-1.0000 1st Qu.:-1.000 1st Qu.:-1.0000 1st Qu.: 3528
## Median : 0.0000 Median : 0.000 Median : 0.0000 Median : 22259
## Mean :-0.2183 Mean :-0.264 Mean :-0.2876 Mean : 50957
## 3rd Qu.: 0.0000 3rd Qu.: 0.000 3rd Qu.: 0.0000 3rd Qu.: 66623
## Max. : 8.0000 Max. : 8.000 Max. : 8.0000 Max. : 964511
## BILL_AMT2 BILL_AMT3 BILL_AMT4 BILL_AMT5
## Min. :-69777 Min. :-157264 Min. :-170000 Min. :-81334
## 1st Qu.: 2970 1st Qu.: 2652 1st Qu.: 2329 1st Qu.: 1780
## Median : 21050 Median : 20035 Median : 19005 Median : 18091
## Mean : 48942 Mean : 46803 Mean : 43123 Mean : 40236
## 3rd Qu.: 63497 3rd Qu.: 59830 3rd Qu.: 54271 3rd Qu.: 50072
## Max. :983931 Max. :1664089 Max. : 891586 Max. :927171
## BILL_AMT6 PAY_AMT1 PAY_AMT2 PAY_AMT3
## Min. :-339603 Min. : 0 Min. : 0 Min. : 0
## 1st Qu.: 1278 1st Qu.: 1000 1st Qu.: 825 1st Qu.: 390
## Median : 17118 Median : 2100 Median : 2007 Median : 1800
## Mean : 38858 Mean : 5650 Mean : 5895 Mean : 5198
## 3rd Qu.: 49121 3rd Qu.: 5005 3rd Qu.: 5000 3rd Qu.: 4500
## Max. : 961664 Max. :873552 Max. :1684259 Max. :896040
## PAY_AMT4 PAY_AMT5 PAY_AMT6 default
## Min. : 0 Min. : 0 Min. : 0 Min. :0.0000
## 1st Qu.: 298 1st Qu.: 259 1st Qu.: 138 1st Qu.:0.0000
## Median : 1500 Median : 1500 Median : 1500 Median :0.0000
## Mean : 4829 Mean : 4795 Mean : 5181 Mean :0.2231
## 3rd Qu.: 4014 3rd Qu.: 4042 3rd Qu.: 4000 3rd Qu.:0.0000
## Max. :621000 Max. :426529 Max. :528666 Max. :1.0000
Analisis de la Varaible Edad
Promedio_Edad=mean(df$AGE)
print(Promedio_Edad)
## [1] 35.46407
Histograma
En estadĆstica, un histograma es una representación grĆ”fica de una variable en forma de barras, donde la superficie de cada barra es proporcional a la frecuencia de los valores representados
hist(x=df$AGE,main="Edad del cliente",col="green")
Deteccion de Datos Atipicos
Grafico de Puntos
plot(df$AGE,type = "b",col="darkred")
podemos ver que la mayor mayor concentracion de datos se da entre 20-65 aƱos. hay datos que se salen de esta concentracion, pueden ser datos atipicos.
Boxplot
Es un mĆ©todo estandarizado para representar grĆ”ficamente una serie de datos numĆ©ricos a travĆ©s de sus cuartiles. De esta manera, el diagrama de caja muestra a simple vista la mediana y los cuartiles de los datos,ā pudiendo tambiĆ©n representar los valores atĆpicos de estos.
boxplot(df$AGE,horizontal = T,col = "darkblue")
Limites del Rango Intercuantil
Edades Atipicas
edad_Atipica=boxplot.stats(df$AGE)$out# Datos atipicos
edad_Atipica=as.data.frame(edad_Atipica)
proporcion
(nrow(edad_Atipica)/nrow(df))*100
## [1] 0.9087531
0.9% es el porcentaje de datos atipicos
Edad promedio de edades atipicas
mean(edad_Atipica$edad_Atipica)
## [1] 64.46468
hist(edad_Atipica$edad_Atipica)
min(edad_Atipica$edad_Atipica)
## [1] 61
Base sin edad Atipica
df_Sin_Edad_atipica=df[df$AGE< 61,]
Promedio sin Atipico
Promedio_Sin_edad_A=mean(df_Sin_Edad_atipica$AGE)
print(Promedio_Sin_edad_A) # No es normal
## [1] 35.19811
print(Promedio_Edad) # Datos Atipicos
## [1] 35.46407
Histograma sin Edad Atipicas
hist(df_Sin_Edad_atipica$AGE,col="green")
**Grafica de puntos
plot(df_Sin_Edad_atipica$AGE,col="red")
boxplot
boxplot(df_Sin_Edad_atipica$AGE,col="green")
Test de Normalidad
Test de Visual-qqplot*
qqnorm(df_Sin_Edad_atipica$AGE,pch=1)
qqline(df_Sin_Edad_atipica$AGE,col="steelblue",lwd=8)
Otra forma
podemos sospechar que la distribuccion de la edad no es normal
comprobar:
Ho= Variable Edad proviene de una DIstribucion Normal Ha= Variable Edad No proviene de una DIstribucion Normal
Se evalua con un alfa de Significacia del 5%, en 95 de confinza estoy afirmando la Hipetesis
P valor de la Prueba (1-100%)
Si p valor > 5%, Se acepta la Normalidad o Ho si P>5%, los datos no son Normales.
Jarque Bera
options(scipen=999)
jb.norm.test(df_Sin_Edad_atipica$AGE,nrepl = 2000)
##
## Jarque-Bera test for normality
##
## data: df_Sin_Edad_atipica$AGE
## JB = 1978.3, p-value < 0.00000000000000022
Shapiro
sf.test(df_Sin_Edad_atipica$AGE[1:5000])
##
## Shapiro-Francia normality test
##
## data: df_Sin_Edad_atipica$AGE[1:5000]
## W = 0.95272, p-value < 0.00000000000000022
Prube de Kurtosis
kurtosis.norm.test(df_Sin_Edad_atipica$AGE,nrepl = 2000)
##
## Kurtosis test for normality
##
## data: df_Sin_Edad_atipica$AGE
## T = 2.5704, p-value < 0.00000000000000022
Conclusion: No existe Evidencia para AceptarH0, Vemos que el P valor en las tres prubeas es menor a 5%; es decir la variable edad no es Normal
Prueba No Parametrico
SIGN.test(df_Sin_Edad_atipica$AGE,me=35.19,alternative = "two.side",conf.level = 0.95)
##
## One-sample Sign-Test
##
## data: df_Sin_Edad_atipica$AGE
## s = 29332, p-value = 0.0000000000000006661
## alternative hypothesis: true median is not equal to 0
## 95 percent confidence interval:
## 34 34
## sample estimates:
## median of x
## 34
##
## Achieved and Interpolated Confidence Intervals:
##
## Conf.Level L.E.pt U.E.pt
## Lower Achieved CI 0.9495 34 34
## Interpolated CI 0.9500 34 34
## Upper Achieved CI 0.9509 34 34
Segun la Prueba No parametrica el verdadero promedio de la poblacion son 34 aƱos.
data=data.frame(df_Sin_Edad_atipica$AGE[1:1000])
names(data)[1]="x"
library(boot)
##
## Attaching package: 'boot'
## The following object is masked from 'package:lattice':
##
## melanoma
## The following object is masked from 'package:car':
##
## logit
meanfun= function(data,i){
d=data[i,]
return(median(d))
}
bo = boot(data[,"x",drop=FALSE],statistic =
meanfun,R=1000)
bo
##
## ORDINARY NONPARAMETRIC BOOTSTRAP
##
##
## Call:
## boot(data = data[, "x", drop = FALSE], statistic = meanfun, R = 1000)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 33 0.049 0.5453406
## Intervalo de confianza
boot.ci(bo,conf = 0.95,type = "bca")
## Warning in norm.inter(t, adj.alpha): extreme order statistics used as endpoints
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 1000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = bo, conf = 0.95, type = "bca")
##
## Intervals :
## Level BCa
## 95% (32, 33 )
## Calculations and Intervals on Original Scale
## Warning : BCa Intervals used Extreme Quantiles
## Some BCa intervals may be unstable
Analisis de Variables Categoricas
glimpse(df)
## Rows: 29,601
## Columns: 25
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17...
## $ LIMIT_BAL <dbl> 20000, 120000, 90000, 50000, 50000, 50000, 500000, 100000...
## $ SEX <fct> F, F, F, F, M, M, M, F, F, M, F, F, F, M, M, F, M, M, F, ...
## $ EDUCATION <fct> Pregrado, Pregrado, Pregrado, Pregrado, Pregrado, Posgrad...
## $ MARRIAGE <fct> Casado, Soltero, Soltero, Casado, Casado, Soltero, Solter...
## $ AGE <int> 24, 26, 34, 37, 57, 37, 29, 23, 28, 35, 34, 51, 41, 30, 2...
## $ PAY_0 <int> 2, -1, 0, 0, -1, 0, 0, 0, 0, -2, 0, -1, -1, 1, 0, 1, 0, 0...
## $ PAY_2 <int> 2, 2, 0, 0, 0, 0, 0, -1, 0, -2, 0, -1, 0, 2, 0, 2, 0, 0, ...
## $ PAY_3 <int> -1, 0, 0, 0, -1, 0, 0, -1, 2, -2, 2, -1, -1, 2, 0, 0, 2, ...
## $ PAY_4 <int> -1, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -1, -1, 0, 0, 0, 2, -1...
## $ PAY_5 <int> -2, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, -1, 0, 0, 0, 2, -1...
## $ PAY_6 <int> -2, 2, 0, 0, 0, 0, 0, -1, 0, -1, -1, 2, -1, 2, 0, 0, 2, -...
## $ BILL_AMT1 <dbl> 3913, 2682, 29239, 46990, 8617, 64400, 367965, 11876, 112...
## $ BILL_AMT2 <dbl> 3102, 1725, 14027, 48233, 5670, 57069, 412023, 380, 14096...
## $ BILL_AMT3 <dbl> 689, 2682, 13559, 49291, 35835, 57608, 445007, 601, 12108...
## $ BILL_AMT4 <dbl> 0, 3272, 14331, 28314, 20940, 19394, 542653, 221, 12211, ...
## $ BILL_AMT5 <dbl> 0, 3455, 14948, 28959, 19146, 19619, 483003, -159, 11793,...
## $ BILL_AMT6 <dbl> 0, 3261, 15549, 29547, 19131, 20024, 473944, 567, 3719, 1...
## $ PAY_AMT1 <dbl> 0, 0, 1518, 2000, 2000, 2500, 55000, 380, 3329, 0, 2306, ...
## $ PAY_AMT2 <dbl> 689, 1000, 1500, 2019, 36681, 1815, 40000, 601, 0, 0, 12,...
## $ PAY_AMT3 <dbl> 0, 1000, 1000, 1200, 10000, 657, 38000, 0, 432, 0, 50, 85...
## $ PAY_AMT4 <dbl> 0, 1000, 1000, 1100, 9000, 1000, 20239, 581, 1000, 13007,...
## $ PAY_AMT5 <dbl> 0, 0, 1000, 1069, 689, 1000, 13750, 1687, 1000, 1122, 373...
## $ PAY_AMT6 <dbl> 0, 2000, 5000, 1000, 679, 800, 13770, 1542, 1000, 0, 66, ...
## $ default <int> 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, ...
Sexo
sex=table(df$SEX)
barplot(sex,main="Distribuccion por Sexo",col = "green")
(sex/nrow(df))*100
##
## F M
## 60.31891 39.68109
EDUCATION
edu=table(df$EDUCATION)
barplot(edu,main="Distribuccion por Nivel de Estudio",col = "green")
(edu/nrow(df))*100
##
## Bachiller Otros Posgrado Pregrado
## 16.4622817 0.4155265 35.7454140 47.3767778
Tablas de contingencia
(table(df$SEX,df$EDUCATION)/nrow(df))*100
##
## Bachiller Otros Posgrado Pregrado
## F 9.7800750 0.2736394 21.0398297 29.2253640
## M 6.6822067 0.1418871 14.7055843 18.1514138
Pruebas de hipótesis: independencia de Chi-cuadrada
tabla_sex_edu=table(df$SEX,df$EDUCATION,useNA = "no")
tabla_sex_edu
##
## Bachiller Otros Posgrado Pregrado
## F 2895 81 6228 8651
## M 1978 42 4353 5373
Probar estadisticamente
H0= Las variables Sexo y Educacion son independientes Ha= Las variables Sexo y Educacion son dependientes
si Pvalor < 0.05 con un alfa =0.0, se rechaza H0
chisq.test(tabla_sex_edu)
##
## Pearson's Chi-squared test
##
## data: tabla_sex_edu
## X-squared = 23.634, df = 3, p-value = 0.00002978
De acuerdo a los resultados anteriores, se acepta Ha, la Hipotesis que plantea que ambas variables estan asiadas entre si, con un nivel de confianza del 95%
Pruebas de contigencia con respecto al default Categorico vs Categorico
df$default=as.factor(df$default)
default=table(df$default)
barplot(default,main="Distribuccion por Nivel de Estudio",col = "green")
default/nrow(df)
##
## 0 1
## 0.7768656 0.2231344
(prop.table(table(df$SEX,df$default),2))
##
## 0 1
## F 0.6136285 0.5668433
## M 0.3863715 0.4331567
tabla_sex_de=table(df$SEX,df$default,useNA = "no")
tabla_sex_de
##
## 0 1
## F 14111 3744
## M 8885 2861
chisq.test(tabla_sex_de)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla_sex_de
## X-squared = 46.729, df = 1, p-value = 0.000000000008151
Otra Forma de Tablas
CrossTable(df$SEX,df$default,prop.chisq=TRUE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 29601
##
##
## | df$default
## df$SEX | 0 | 1 | Row Total |
## -------------|-----------|-----------|-----------|
## F | 14111 | 3744 | 17855 |
## | 4.155 | 14.465 | |
## | 0.790 | 0.210 | 0.603 |
## | 0.614 | 0.567 | |
## | 0.477 | 0.126 | |
## -------------|-----------|-----------|-----------|
## M | 8885 | 2861 | 11746 |
## | 6.316 | 21.989 | |
## | 0.756 | 0.244 | 0.397 |
## | 0.386 | 0.433 | |
## | 0.300 | 0.097 | |
## -------------|-----------|-----------|-----------|
## Column Total | 22996 | 6605 | 29601 |
## | 0.777 | 0.223 | |
## -------------|-----------|-----------|-----------|
##
##
Cuantitaviva VS Categorica
names(df)
## [1] "ID" "LIMIT_BAL" "SEX" "EDUCATION" "MARRIAGE" "AGE"
## [7] "PAY_0" "PAY_2" "PAY_3" "PAY_4" "PAY_5" "PAY_6"
## [13] "BILL_AMT1" "BILL_AMT2" "BILL_AMT3" "BILL_AMT4" "BILL_AMT5" "BILL_AMT6"
## [19] "PAY_AMT1" "PAY_AMT2" "PAY_AMT3" "PAY_AMT4" "PAY_AMT5" "PAY_AMT6"
## [25] "default"
# comparar si el promedio del Saldo en igual en ambos grupos
x_F=df[df$SEX=="F",]
Promedio_Saldo_F= mean(x_F$LIMIT_BAL)
print(Promedio_Saldo_F)
## [1] 170166.1
x_M=df[df$SEX=="M",]
Promedio_Saldo_M= mean(x_M$LIMIT_BAL)
print(Promedio_Saldo_M)
## [1] 163574.6
COMPARACION DE DOS MUESTRAS
test= t.test(x_F$LIMIT_BAL,x_M$LIMIT_BAL)
print(test)
##
## Welch Two Sample t-test
##
## data: x_F$LIMIT_BAL and x_M$LIMIT_BAL
## t = 4.1982, df = 23642, p-value = 0.00002701
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 3514.012 9668.947
## sample estimates:
## mean of x mean of y
## 170166.1 163574.6
p-value es < 0.05 podemos afirmar que las muestras difieren en su media, es decir, los dos variables son diferentes
Grafico
boxplot(x_F$LIMIT_BAL,x_M$LIMIT_BAL)
medias = c(Promedio_Saldo_F,Promedio_Saldo_M)
points(medias,pch=18,col="red")
Mora vs Saldo
# comparar si el promedio del Saldo en igual en ambos grupos
x_F=df[df$default=="0",]
Promedio_Saldo_F= mean(x_F$LIMIT_BAL)
print(Promedio_Saldo_F)
## [1] 178300
x_M=df[df$default=="1",]
Promedio_Saldo_M= mean(x_M$LIMIT_BAL)
print(Promedio_Saldo_M)
## [1] 130125.3
Test
test= t.test(x_F$LIMIT_BAL,x_M$LIMIT_BAL)
print(test)
##
## Welch Two Sample t-test
##
## data: x_F$LIMIT_BAL and x_M$LIMIT_BAL
## t = 28.928, df = 12000, p-value < 0.00000000000000022
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 44910.32 51438.99
## sample estimates:
## mean of x mean of y
## 178300.0 130125.3
p-value es < 0.05 podemos afirmar que las muestras difieren en su media, es decir, los dos variables son diferentes
boxplot(x_F$LIMIT_BAL,x_M$LIMIT_BAL,names = c("No Mora","Mora"))
medias = c(Promedio_Saldo_F,Promedio_Saldo_M)
points(medias,pch=18,col="red")