PRIMERA TAREA
Juliana María Daniela Castillo Rodríguez
2024-03-10
A continución se muestra el desarrollo de la tarea propuesta para la base de datos
¨Credit Score Classification Dataset¨.
Punto 1. Realice el ajuste correspondiente a la base para su buena aplicación en el
programa Rstudio.
Inicialmente se realiza la carga de todas las librerías necesarias para desarrollar el
trabajo.
library(readr)
library(ggplot2)
library(estadistica)
library(skimr)
library(moments)
A continuación se realiza la carga de la base de datos.
Classification = read_csv("Credit Score Classification Dataset.csv")
Una vez caragada la base se modifican las variables que son de tipo carácter a factor.
Classification=as.data.frame(unclass(Classification),
stringsAsFactors = TRUE)
Luego de realizar ésta modificación se procede a revisar que la modificación se haya
aplicado correctamente.
str(Classification)
## 'data.frame': 164 obs. of 8 variables:
## $ Age : num 25 30 35 40 45 50 26 31 36 41 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 2 1 2 1 2
1 2 1 2 ...
## $ Income : num 50000 100000 75000 125000 100000 150000
40000 60000 80000 105000 ...
## $ Education : Factor w/ 5 levels "Associate's Degree",..: 2 5
3 4 2 5 1 2 5 3 ...
## $ Marital.Status : Factor w/ 2 levels "Married","Single": 2 1 1 2
1 1 2 2 1 2 ...
## $ Number.of.Children: num 0 2 1 0 3 0 0 0 2 0 ...
## $ Home.Ownership : Factor w/ 2 levels "Owned","Rented": 2 1 1 1 1
1 2 2 1 1 ...
## $ Credit.Score : Factor w/ 3 levels "Average","High",..: 2 2 2 2
2 2 1 1 2 2 ...
Al momento de analizar los conjuntos de datos que contiene la base y ver los
conjuntos que se requieren para el presente análisis, se procede a depurar la base de
datos.
Classification=Classification[,-c(2,4,5,6)]
y se realiza el resumen estadístico de la base.
skim(Classification)
Data summary
Name Classification
Number of rows 164
Number of columns 4
_______________________
Column type frequency:
factor 2
numeric 2
________________________
Group variables None
Variable type: factor
skim_variable n_missing complete_rate ordered n_unique top_counts
Home.Ownership 0 1 FALSE 2 Own: 111, Ren: 53
Credit.Score 0 1 FALSE 3 Hig: 113, Ave: 36, Low: 15
Variable type: numeric
skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Age 0 1 37.98 8.48 25 30.75 37 45 53 ▇▇▅▆▆
Income 0 1 83765.24 32457.31 25000 57500.00 83750 105000 162500 ▅▇▇▅▂
Punto 2. ¿Cuál es la distribución de edades en el conjunto de datos? Proporciona un
histograma y calcula la edad promedio.¿Se puede identificar datos atípicos?. Realice un
diagrama de boxplot.
Inicialmente se aplica el método de Sturges para revisar los grupos que se van a
formar.
n.ag=nrow(Classification)
n.ag
## [1] 164
Clase.ag=1+3.33*log10(n.ag)
Clase.ag=round(Clase.ag,0)
Clase.ag
## [1] 8
Una vez aplicado Sturges se procede a realizar el histograma de edad de la base.
ggplot(Classification, aes(x=Age))+
geom_histogram(bins = Clase.ag,
color="black",
lwd=0.1,
linetype=1,
position ="identity",
fill="peachpuff3")+
labs(title = "Histograma de edad",
x="Edad",
y="Frecuencia absoluta")
Se calcula el sesgo para ver la distribución de edades en el conjunto de datos.
skewness(Classification$Age)
## [1] 0.1646797
Se puede observar que el sesgo es mayor a 0 lo que indica un sesgo positivo lo cual
podemos confirmar gráficamente con el histograma.
Se realiza el cálculo de la edad promedio con ayuda de la media.
media_ag=mean(Classification$Age)
media_ag
## [1] 37.97561
Se procede a aplicar la función boxplot.stats con el fin de revisar si hay datos atípicos.
boxplot.stats(Classification$Age)
## $stats
## [1] 25.0 30.5 37.0 45.0 53.0
##
## $n
## [1] 164
##
## $conf
## [1] 35.21103 38.78897
##
## $out
## numeric(0)
Se observa que no hay presencia de datos atípicos y se procede a realizar el diagrama
de caja y bigote para confirmarlo gráficamente.
ggplot(Classification, aes(x=Age,
y=""))+
geom_boxplot()+
labs(title = "Diagrama de Caja y Bigote de la edad",
x="Edad")+
geom_vline(xintercept = media_ag,
color="indianred3",
size=1)
Punto 3. ¿Cuál es la distribución de edades en el conjunto de datos en las puntuaciones
de crédito? Proporciona un histograma edad por cada puntuación de crédito y calcula la
edad promedio correspondiente.¿Se puede identificar datos atípicos? Realice un
diagrama de boxplot.
Inicialmente se deben dividir los datos de la puntuación de crédito en las edades, para
esto usaremos la función split para dividir la base en las puntuaciones de crédito.
df.CS=split(Classification, Classification$Credit.Score)
df.CS
## $Average
## Age Income Home.Ownership Credit.Score
## 7 26 40000 Rented Average
## 8 31 60000 Rented Average
## 14 32 55000 Rented Average
## 20 33 50000 Rented Average
## 26 34 45000 Rented Average
## 30 25 55000 Rented Average
## 36 26 45000 Rented Average
## 37 31 65000 Rented Average
## 43 32 57500 Rented Average
## 49 33 52500 Rented Average
## 55 34 47500 Rented Average
## 59 25 57500 Rented Average
## 62 25 60000 Rented Average
## 68 26 47500 Rented Average
## 69 31 67500 Rented Average
## 75 32 57500 Rented Average
## 81 33 52500 Rented Average
## 87 34 47500 Rented Average
## 91 25 57500 Rented Average
## 94 25 62500 Rented Average
## 100 26 50000 Rented Average
## 101 31 70000 Rented Average
## 107 32 57500 Rented Average
## 113 33 52500 Rented Average
## 119 34 47500 Rented Average
## 123 25 57500 Rented Average
## 126 25 60000 Rented Average
## 129 28 75000 Rented Average
## 132 26 55000 Owned Average
## 134 29 68000 Owned Average
## 136 25 55000 Rented Average
## 142 26 45000 Rented Average
## 143 31 65000 Rented Average
## 149 32 57500 Rented Average
## 155 33 52500 Rented Average
## 161 34 47500 Rented Average
##
## $High
## Age Income Home.Ownership Credit.Score
## 1 25 50000 Rented High
## 2 30 100000 Owned High
## 3 35 75000 Owned High
## 4 40 125000 Owned High
## 5 45 100000 Owned High
## 6 50 150000 Owned High
## 9 36 80000 Owned High
## 10 41 105000 Owned High
## 11 46 90000 Owned High
## 12 51 135000 Owned High
## 15 37 70000 Owned High
## 16 42 95000 Owned High
## 17 47 85000 Owned High
## 18 52 125000 Owned High
## 21 38 65000 Owned High
## 22 43 80000 Owned High
## 23 48 70000 Owned High
## 24 53 115000 Owned High
## 27 39 60000 Owned High
## 28 44 75000 Owned High
## 29 49 65000 Owned High
## 31 30 105000 Owned High
## 32 35 80000 Owned High
## 33 40 130000 Owned High
## 34 45 105000 Owned High
## 35 50 155000 Owned High
## 38 36 85000 Owned High
## 39 41 110000 Owned High
## 40 46 95000 Owned High
## 41 51 140000 Owned High
## 44 37 72500 Owned High
## 45 42 100000 Owned High
## 46 47 90000 Owned High
## 47 52 130000 Owned High
## 50 38 67500 Owned High
## 51 43 92500 Owned High
## 52 48 82500 Owned High
## 53 53 122500 Owned High
## 56 39 62500 Owned High
## 57 44 87500 Owned High
## 58 49 77500 Owned High
## 60 30 112500 Owned High
## 61 35 85000 Owned High
## 63 30 117500 Owned High
## 64 35 90000 Owned High
## 65 40 142500 Owned High
## 66 45 110000 Owned High
## 67 50 160000 Owned High
## 70 36 90000 Owned High
## 71 41 115000 Owned High
## 72 46 97500 Owned High
## 73 51 145000 Owned High
## 76 37 75000 Owned High
## 77 42 105000 Owned High
## 78 47 95000 Owned High
## 79 52 135000 Owned High
## 82 38 67500 Owned High
## 83 43 92500 Owned High
## 84 48 85000 Owned High
## 85 53 125000 Owned High
## 88 39 62500 Owned High
## 89 44 87500 Owned High
## 90 49 77500 Owned High
## 92 30 112500 Owned High
## 93 35 85000 Owned High
## 95 30 117500 Owned High
## 96 35 90000 Owned High
## 97 40 142500 Owned High
## 98 45 115000 Owned High
## 99 50 162500 Owned High
## 102 36 95000 Owned High
## 103 41 120000 Owned High
## 104 46 102500 Owned High
## 105 51 150000 Owned High
## 108 37 77500 Owned High
## 109 42 110000 Owned High
## 110 47 97500 Owned High
## 111 52 137500 Owned High
## 114 38 67500 Owned High
## 115 43 95000 Owned High
## 116 48 87500 Owned High
## 117 53 127500 Owned High
## 120 39 62500 Owned High
## 121 44 87500 Owned High
## 122 49 77500 Owned High
## 124 30 112500 Owned High
## 125 35 85000 Owned High
## 127 30 117500 Owned High
## 128 35 90000 Owned High
## 130 33 82000 Owned High
## 131 31 95000 Rented High
## 133 32 85000 Rented High
## 135 34 105000 Rented High
## 137 30 105000 Owned High
## 138 35 80000 Owned High
## 139 40 130000 Owned High
## 140 45 105000 Owned High
## 141 50 155000 Owned High
## 144 36 85000 Owned High
## 145 41 110000 Owned High
## 146 46 95000 Owned High
## 147 51 140000 Owned High
## 150 37 72500 Owned High
## 151 42 100000 Owned High
## 152 47 90000 Owned High
## 153 52 130000 Owned High
## 156 38 67500 Owned High
## 157 43 92500 Owned High
## 158 48 82500 Owned High
## 159 53 122500 Owned High
## 162 39 62500 Owned High
## 163 44 87500 Owned High
## 164 49 77500 Owned High
##
## $Low
## Age Income Home.Ownership Credit.Score
## 13 27 35000 Rented Low
## 19 28 30000 Rented Low
## 25 29 25000 Rented Low
## 42 27 37500 Rented Low
## 48 28 32500 Rented Low
## 54 29 27500 Rented Low
## 74 27 37500 Rented Low
## 80 28 32500 Rented Low
## 86 29 27500 Rented Low
## 106 27 37500 Rented Low
## 112 28 32500 Rented Low
## 118 29 27500 Rented Low
## 148 27 37500 Rented Low
## 154 28 32500 Rented Low
## 160 29 27500 Rented Low
Punto 3.a. Puntuación de crédito alta:
Con la función head tomo únicamente lo que se encuentra en el conjunto de datos de
puntuación de credito alta.
head(df.CS$High)
## Age Income Home.Ownership Credit.Score
## 1 25 50000 Rented High
## 2 30 100000 Owned High
## 3 35 75000 Owned High
## 4 40 125000 Owned High
## 5 45 100000 Owned High
## 6 50 150000 Owned High
Para realizar el histograma inicialmente se aplica el método de Sturges para revisar
los grupos que se van a formar.
n.H=nrow(df.CS$High)
n.H
## [1] 113
Clase.H=1+3.33*log10(n.H)
Clase.H=round(Clase.H,0)
Clase.H
## [1] 8
Una vez aplicado Sturges se procede a realizar el histograma de edad para la
puntuación de crédito alta, para esto primero debe definir la subbase.
High=df.CS$High
Y se realiza el histograma.
ggplot(High, aes(x=Age))+
geom_histogram(bins = Clase.H,
color="black",
lwd=0.1,
linetype=1,
position ="identity",
fill="darkolivegreen3")+
labs(title = "Histograma de edad para puntuación de crédito alto",
x="Edad",
y="Frecuencia absoluta")
Se calcula el sesgo para ver la distribución de edades en el conjunto de datos.
skewness(High$Age)
## [1] -0.1996772
Se puede observar que el sesgo es menor a 0 lo que indica un sesgo negativo lo cual
podemos confirmar gráficamente con el histograma.
Se realiza el cálculo de la edad promedio con ayuda de la media.
media_AH=mean(High$Age)
media_AH
## [1] 41.99115
Se procede a aplicar la función boxplot.stats con el fin de revisar si hay datos atípicos.
boxplot.stats(High$Age)
## $stats
## [1] 25 37 42 48 53
##
## $n
## [1] 113
##
## $conf
## [1] 40.36503 43.63497
##
## $out
## numeric(0)
Se observa que no hay presencia de datos atípicos y se procede a realizar el diagrama
de caja y bigote para confirmarlo gráficamente.
ggplot(High, aes(x=Age,
y=""))+
geom_boxplot()+
labs(title = "Diagrama de Caja y Bigote de la edad para puntuación de
crédito alto",
x="Edad")+
geom_vline(xintercept = media_AH,
color="indianred3",
size=1)
Punto 3.b. Puntuación de crédito media:
Con la función head tomo únicamente lo que se encuentra en el conjunto de datos de
puntuación de credito media.
head(df.CS$Average)
## Age Income Home.Ownership Credit.Score
## 7 26 40000 Rented Average
## 8 31 60000 Rented Average
## 14 32 55000 Rented Average
## 20 33 50000 Rented Average
## 26 34 45000 Rented Average
## 30 25 55000 Rented Average
Para realizar el histograma inicialmente se aplica el método de Sturges para revisar
los grupos que se van a formar.
n.Av=nrow(df.CS$Average)
n.Av
## [1] 36
Clase.Av=1+3.33*log10(n.Av)
Clase.Av=round(Clase.Av,0)
Clase.Av
## [1] 6
Una vez aplicado Sturges se procede a realizar el histograma de edad para la
puntuación de crédito media para esto primero debe definir la subbase.
Average=df.CS$Average
Y se realiza el histograma.
ggplot(Average, aes(x=Age))+
geom_histogram(bins = Clase.Av,
color="black",
lwd=0.1,
linetype=1,
position ="identity",
fill="khaki1")+
labs(title = "Histograma de edad para puntuación de crédito medio",
x="Edad",
y="Frecuencia absoluta")
Se calcula el sesgo para ver la distribución de edades en el conjunto de datos.
skewness(Average$Age)
## [1] -0.1683962
Se puede observar que el sesgo es menor a 0 lo que indica un sesgo negativo lo cual
podemos confirmar gráficamente con el histograma.
Se realiza el cálculo de la edad promedio con ayuda de la media.
media_AAv=mean(Average$Age)
media_AAv
## [1] 29.52778
Se procede a aplicar la función boxplot.stats con el fin de revisar si hay datos atípicos.
boxplot.stats(Average$Age)
## $stats
## [1] 25 26 31 33 34
##
## $n
## [1] 36
##
## $conf
## [1] 29.15667 32.84333
##
## $out
## numeric(0)
Se observa que no hay presencia de datos atípicos y se procede a realizar el diagrama
de caja y bigote para confirmarlo gráficamente.
ggplot(Average, aes(x=Age,
y=""))+
geom_boxplot()+
labs(title = "Diagrama de Caja y Bigote de la edad para puntuación de
crédito medio",
x="Edad")+
geom_vline(xintercept = media_AAv,
color="indianred3",
size=1)
Punto 3.b. Puntuación de crédito baja:
Con la función head tomo únicamente lo que se encuentra en el conjunto de datos de
puntuación de credito baja.
head(df.CS$Low)
## Age Income Home.Ownership Credit.Score
## 13 27 35000 Rented Low
## 19 28 30000 Rented Low
## 25 29 25000 Rented Low
## 42 27 37500 Rented Low
## 48 28 32500 Rented Low
## 54 29 27500 Rented Low
Para realizar el histograma inicialmente se aplica el método de Sturges para revisar
los grupos que se van a formar.
n.L=nrow(df.CS$Low)
n.L
## [1] 15
Clase.L=1+3.33*log10(n.L)
Clase.L=round(Clase.L,0)
Clase.L
## [1] 5
Una vez aplicado Sturges se procede a realizar el histograma de edad para la
puntuación de crédito baja, para esto primero debe definir la subbase.
Low=df.CS$Low
Y se realiza el histograma.
ggplot(Low, aes(x=Age))+
geom_histogram(bins = Clase.L,
color="black",
lwd=0.1,
linetype=1,
position ="identity",
fill="pink")+
labs(title = "Histograma de edad para puntuación de crédito bajo",
x="Edad",
y="Frecuencia absoluta")
Se calcula el sesgo para ver la distribución de edades en el conjunto de datos.
skewness(Low$Age)
## [1] 0
Se puede observar que el sesgo es de 0 lo que indica un sesgo asimetrico lo cual
podemos confirmar gráficamente con el histograma.
Se realiza el cálculo de la edad promedio con ayuda de la media.
media_L=mean(Low$Age)
media_L
## [1] 28
Se procede a aplicar la función boxplot.stats con el fin de revisar si hay datos atípicos.
boxplot.stats(Low$Age)
## $stats
## [1] 27 27 28 29 29
##
## $n
## [1] 15
##
## $conf
## [1] 27.18409 28.81591
##
## $out
## numeric(0)
Se observa que no hay presencia de datos atípicos y se procede a realizar el diagrama
de caja y bigote para confirmarlo gráficamente.
ggplot(Low, aes(x=Age,
y=""))+
geom_boxplot()+
labs(title = "Diagrama de Caja y Bigote de la edad para puntuación de
crédito bajo",
x="Edad")+
geom_vline(xintercept = media_L,
color="indianred3",
size=1)
Punto 4. ¿Cómo se distribuye la propiedad de la vivienda en la base? Proporciona un
gráfico que destaque la proporción de propietarios y no propietarios.
Inicialmente se crea una tabla para ver la frecuencia de la propiedad de vivienda.
THO=table(Classification$Home.Ownership)
THO
##
## Owned Rented
## 111 53
Con la información anterior se crea una tabla de proporción.
THOP=round(prop.table(THO),3)*100
THOP
##
## Owned Rented
## 67.7 32.3
Ahora se crea un data frame para ideintificar las variables.
df.THOP=data.frame(THOP)
df.THOP
## Var1 Freq
## 1 Owned 67.7
## 2 Rented 32.3
Y se crea un gráfica circular.
ggplot(df.THOP,aes(y=Freq,
x="",
fill=Var1))+
geom_bar(stat = "identity")+
coord_polar(theta = "y")+
labs(title = "Diagrama circular de propiedad ",
x="",
y="Proporción de propietarios y no propietarios",
fill="Vivienda")+
geom_text(aes(label=paste0("P(X)=",Freq)),
position=position_stack(vjust=0.5))+
scale_fill_manual(labels=c("Owned"="Propietarios",
"Rented"="No propietarios"),
values=c("pink","steelblue"))
Punto 5. Calcular las medidas de tendencia central,variación y de posición de la variable
de ingresos. ¿Qué indican estos valores sobre la distribución de ingresos en la base?
5.a. Medidas de tendencia central:
5.a.1. Media:
Se calcula la media de la variable ingresos con la función mean.
media_i=mean(Classification$Income)
media_i
## [1] 83765.24
5.a.2. Mediana:
Se calcula la mediana de la variable ingresos con la función median.
mediana_i=median(Classification$Income)
mediana_i
## [1] 83750
5.a.3. Moda:
Se calcula la moda de la variable ingresos con la función moda.
moda(Classification$Income)
## variable.x
## 1 85000
5.a.4. Histograma:
Se aplica método de Sturges para revisar los grupos que se van a formar.
n.i=nrow(Classification)
n.i
## [1] 164
Clase.i=1+3.33*log10(n.i)
Clase.i=round(Clase.i,0)
Clase.i
## [1] 8
Y se grafica el histograma
ggplot(Classification, aes(x=Income))+
geom_histogram(bins = Clase.i,
color="black",
lwd=0.1,
linetype=1,
position ="identity",
fill="lavenderblush2")+
labs(title = "Histograma de ingresos",
x="Ingresos",
y="Frecuencia absoluta")+
geom_vline(xintercept = media_i,
color="indianred3",
size=1)+
geom_vline(xintercept = mediana_i,
color="lightpink4",
size=1)+
geom_vline(xintercept = 85000,
color="olivedrab4",
size=1)
5.b. Medidas de variación:
5.b.1. Rango:
Se calcula el rango de la variable ingresos con la función range.
Rango=range(Classification$Income)
Rango=max(Classification$Income)-min(Classification$Income)
Rango
## [1] 137500
La medida de distancia entre el máximo dato y el mínimo dato es de 137500.
5.b.2. Varianza:
Se calcula la varianza de la variable ingresos con la función var.
var(Classification$Income)
## [1] 1053476760
5.b.3. Desviación estándar:
Se calcula la desviación estándar de la variable ingresos aplicando raíz cuadrada a la
varianza.
sqrt(var(Classification$Income))
## [1] 32457.31
5.b.4. Coeficiente de variación:
Se calcula el coeficiiente de variación de la variable ingresos con la función
coeficiente.variacion.
coeficiente.variacion(Classification$Income)*100
## coef_variacion_variable.x
## 38.63
El cv de 38.63% indica datos hetereogeneos, Por lo tanto la media no es
representativa según Martínez (2007).
5.c. Medidas de posición:
5.c.1. Cuartiles:
Se calculan los cuartiles de la variable ingresos con la función quantile, ésta
únicamente da los cuartiles más no los límites de los mismos.
quantile(Classification$Income)
## 0% 25% 50% 75% 100%
## 25000 57500 83750 105000 162500
Para los límites de los cuartiles uso la función boxplot.stats que también me muestra
en out los datos atípicos.
boxplot.stats(Classification$Income)
## $stats
## [1] 25000 57500 83750 105000 162500
##
## $n
## [1] 164
##
## $conf
## [1] 77889.58 89610.42
##
## $out
## numeric(0)
Y ahora grafico un diagrama de caja y bigote para confirmar gráficamente que no hay
presencia de datos atípicos.
ggplot(Classification, aes(x=Income,
y=""))+
geom_boxplot()+
labs(title = "Diagrama de Caja y Bigote de los ingresos",
x="Ingresos")+
geom_vline(xintercept = media_i,
color="indianred3",
size=1)
5.c.2. Sesgo:
Se calcula el sesgo de la variable ingresos con la función skewness.
skewness(Classification$Income)
## [1] 0.3087688
Se puede observar que el sesgo es mayor a 0 lo que indica un sesgo positivo lo cual
podemos confirmar gráficamente con el histograma y el diagrama de caja y bigote.
5.c.3. Curtosis:
Se calcula la curtosis de la variable ingresos con la función kurtosis.
kurtosis(Classification$Income)
## [1] 2.447062
Se puede observar que la curtosis es menor a 3 lo que indica un grado de
apuntamiento aplanado (planticurtosis) lo cual podemos confirmar gráficamente con
el histograma.