Integrantes:

  • Llamoca Leon Israel Ebeneser

  • Díaz Guevara Juan Carlos

  • Cuadros Ramirez Kevin William

  • Herencia Cazani Brenda Anali

  • Quillatupa Quintana Lucia Dayli

1. Objetivo general

Realizar un análisis factorial para identificar los factores ocultos que influencian el riesgo de incumplimiento y la capacidad de pago en los préstamos P2P de la plataforma Bondora con el fin de que el banco gestione mejor el riesgo crediticio y cumpla con las expectativas de los prestatarios.

1.1 Objetivos Específicos

  • Analizar el cumplimiento de los requisitos necesarios para efectuar el análisis factorial mediante índices estadísticos y asegurar que los datos sean apropiados para el análisis factorial.

  • Comparar diferentes métodos de rotación en el análisis factorial para evaluar cómo cada enfoque afecta la interpretación y claridad de los factores identificados, contribuyendo a una comprensión más profunda de las dinámicas interrelacionadas en el entorno financiero P2P.

  • Interpretar los factores extraídos en función de las cargas factoriales, lo que proporcionará una comprensión clara de lo que representa cada factor en términos de las variables originales.

  • Visualizar los datos transformados con el fin de detectar valores anómalos e identificar posibles conglomerados.

2. Procedencia de los datos

Los datos se obtuvieron de la plataforma Bondora en la cual se realizan préstamos entre dos personas (P2P) y ésta actúa de intermediaria. Los estudios que se realizaron con ellos son de Riesgo Crediticio la cual busca favorecer a los prestatarios minimizando el riesgo de incumplimiento de cada decisión y obtener el rendimiento que compense el riesgo.

3. Descripción de Variables

Variable Descripción Tipo Escala de medida
Age Edad del solicitante del préstamo Numérico Razón
Amount Monto del préstamo otorgado Numérico Razón
Interest Tasa de interés del préstamo (%) Numérico Razón
LoanDuration Duración del préstamo en meses Numérico Razón
IncomeTotal Ingresos totales del solicitante Numérico Razón
LiabilitiesTotal Total de pasivos del solicitante Numérico Razón
DebtToIncome Ratio de deuda a ingresos Numérico Razón
FreeCash Flujo de caja libre disponible Numérico Razón
PrincipalBalance Saldo principal pendiente del préstamo Numérico Razón
InterestAndPenaltyBalance Balance de intereses y penalizaciones pendientes Numérico Razón
PreviousRepaymentsBeforeLoan Pagos realizados antes del préstamo Numérico Razón
Default Indica si el préstamo ha caído en mora Categórico Nominal

4. Cargar el conjunto de datos

library(pacman) 
p_load(readxl, knitr, dplyr, corrplot, matrixcalc, GGally, gganimate,
       ggplot2, funModeling, ggcorrplot, aplpack, psych)

datos<-read_excel("data.xlsx")
datos <- na.omit(datos)
names(datos)=c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","y")
attach(datos)
knitr::kable(head(datos, 10))
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 y
61 115.0408 30 12 10500 0 0 0 0.00 0.00 0.0000 0
48 140.6057 25 1 10800 0 0 0 0.00 0.00 258.6256 0
58 319.5409 25 20 7000 0 0 0 116.35 414.07 0.0000 1
23 57.5205 45 15 11600 0 0 0 0.00 0.00 0.0000 0
25 319.5436 30 12 6800 0 0 0 0.00 0.00 0.0000 0
22 300.4314 30 24 9500 0 0 0 0.00 0.00 0.0000 0
47 191.7445 32 20 7200 0 0 0 0.00 0.00 0.0000 0
23 31.9518 20 6 11000 0 0 0 0.00 0.00 0.0000 0
23 31.9498 20 12 11000 0 0 0 0.00 0.00 0.0000 0
38 319.5583 25 12 7700 0 0 0 0.00 0.00 0.0000 0

Para una mejor visibilidad de los graficos, se cambiara las etiquetas por variables xi, en donde i es el numero que cada una de las etiquetas, respectivamente.

  • Age (Edad): x1
  • Amount (Monto): x2
  • Interest (Interés): x3
  • Loan Duration (Duración del Préstamo): x4
  • Income Total (Ingresos Totales): x5
  • Liabilities Total (Total de Pasivos): x6
  • Debt to Income (Deuda a Ingresos): x7
  • Free Cash (Efectivo Libre): x8
  • Principal Balance (Saldo Principal): x9
  • Interest and Penalty Balance (Saldo de Interés y Penalizaciones): x10
  • Previous Repayments Before Loan (Pagos Previos Antes del Préstamo): x11
  • Default (Incumplimiento): x12

5. Función para eliminar valores atípicos

remove_outliers <- function(df) {
  for (col in names(df)) {
    Q1 <- quantile(df[[col]], 0.25, na.rm = TRUE)
    Q3 <- quantile(df[[col]], 0.75, na.rm = TRUE)
    IQR <- Q3 - Q1
    lower_bound <- Q1 - 1.5 * IQR
    upper_bound <- Q3 + 1.5 * IQR
    df <- df[df[[col]] >= lower_bound & df[[col]] <= upper_bound, ]
  }
  return(df)
}

Eliminar valores atípicos de todas las variables

datos <- remove_outliers(datos)

6. Definir parámetros para el cálculo del tamaño de la muestra

El muestreo sistemático se aplicó en este estudio debido a su eficiencia y simplicidad, ideal para manejar grandes bases de datos como la de préstamos P2P en Bondora. Esta técnica permite una recopilación de datos organizada y eficiente, asegurando una cobertura uniforme de la población sin requerir un marco de muestreo exhaustivo. Además, al evitar el ordenamiento de datos que podría introducir sesgos, como orden cronológico o por características específicas, el muestreo sistemático garantiza la representatividad de la muestra, donde solo se establece un punto de inicio y un intervalo fijo para la selección, un aspecto crucial para el análisis factorial que busca comprender los factores latentes.

N <- nrow(datos)
Z <- 1.96
p <- 0.5
e <- 0.05

N: tamaño de la población después de limpieza Z: valor crítico para 95% de nivel de confianza p: proporción estimada (máxima variabilidad) e: error de muestreo

Calcular tamaño de muestra

n <- (N * Z^2 * p * (1 - p)) / (e^2 * (N - 1) + Z^2 * p * (1 - p))
tamaño_muestra <- ceiling(n) 
tamaño_muestra
## [1] 380

El tamaño de muestra calculado es 380

Calcular el intervalo de muestreo

k <- floor(nrow(datos) / tamaño_muestra)

Seleccionar una muestra sistemática

set.seed(500) 
start <- sample(1:k, 1)
indices <- seq(start, by = k, length.out = tamaño_muestra)
muestra_sis <- datos[indices, ]
head(muestra_sis)

Excluyendo la variable y

muestra_sis <-muestra_sis [,-12]

Analísis Descriptivo de la Muestra

str(muestra_sis)
## tibble [380 × 11] (S3: tbl_df/tbl/data.frame)
##  $ x1 : num [1:380] 31 27 26 35 38 31 46 31 47 21 ...
##  $ x2 : num [1:380] 1500 4000 2600 1500 1000 ...
##  $ x3 : num [1:380] 57.1 26.7 17.8 18.9 24.9 ...
##  $ x4 : num [1:380] 60 60 18 60 60 60 60 60 36 36 ...
##  $ x5 : num [1:380] 1110 930 1474 1640 1100 ...
##  $ x6 : num [1:380] 451 405 555 1404 528 ...
##  $ x7 : num [1:380] 7.25 28.03 15.56 23.34 2.96 ...
##  $ x8 : num [1:380] 680 390 745 192 539 ...
##  $ x9 : num [1:380] 0 0 0 0 0 ...
##  $ x10: num [1:380] 0 0 0 0 0 ...
##  $ x11: num [1:380] 283 0 0 0 0 ...
##  - attr(*, "na.action")= 'omit' Named int [1:19361] 893 897 900 1108 1113 1124 1142 1150 2303 2323 ...
##   ..- attr(*, "names")= chr [1:19361] "893" "897" "900" "1108" ...
profiling_num(muestra_sis)

Vector de medias

medias<-colMeans(muestra_sis)
medias=round(medias,2)
medias
##      x1      x2      x3      x4      x5      x6      x7      x8      x9     x10 
##   38.55 1761.62   28.47   41.37 1148.74  463.19   14.79  187.67  573.32  150.37 
##     x11 
##  330.01
  • Edad (x1): El promedio de edad de los solicitantes de préstamo es aproximadamente 38.55 años.
  • Monto del préstamo (x2): El monto promedio de los préstamos solicitados es de 1761.62 euros.
  • Tasa de interés (x3): La tasa de interés promedio aplicada a los préstamos es del 28.47%.
  • Duración del préstamo (x4): La duración media de los préstamos es de 41.37 meses.
  • Ingresos totales (x5): Los ingresos promedio de los solicitantes de préstamos son de 1148.74 euros.
  • Total de pasivos (x6): El total de pasivos promedio es de 463.19 euros.
  • Ratio de deuda a ingresos (x7): Este ratio promedio es de 14.79%.
  • Efectivo libre (x8): El flujo de caja libre promedio disponible es de 187.67 euros.
  • Saldo principal (x9): El saldo principal pendiente del préstamo promedio es de 573.32 euros.
  • Saldo de interés y penalizaciones (x10): El balance promedio de intereses y penalizaciones pendientes es de 150.37 euros.
  • Pagos previos antes del préstamo (x11): El promedio de pagos realizados antes de los préstamos es de 330.01 euros.

Matriz de Correlación

library(ggcorrplot)
r<-cor(muestra_sis)
r
##              x1          x2          x3            x4          x5            x6
## x1   1.00000000  0.02611009  0.01157819  0.0142169795  0.12679360  0.0147766969
## x2   0.02611009  1.00000000  0.06402194  0.1483483903  0.21050576  0.1290530497
## x3   0.01157819  0.06402194  1.00000000 -0.0476359904  0.26860940  0.0309833433
## x4   0.01421698  0.14834839 -0.04763599  1.0000000000  0.01622141 -0.0007801563
## x5   0.12679360  0.21050576  0.26860940  0.0162214096  1.00000000  0.3230557906
## x6   0.01477670  0.12905305  0.03098334 -0.0007801563  0.32305579  1.0000000000
## x7  -0.19030888  0.25676725  0.04605116 -0.1466268703 -0.20593401  0.4065685811
## x8  -0.13593589  0.05444843  0.03143553 -0.1870794175  0.07954266  0.2751839565
## x9   0.11689239  0.34962411  0.06277284  0.2700951962  0.22390150 -0.0449061697
## x10  0.11948385  0.20217082  0.10403974  0.2087283302  0.15261080 -0.0069182835
## x11  0.07374420 -0.04045183 -0.04940886  0.0600649957  0.07475270 -0.0282389806
##              x7          x8          x9          x10         x11
## x1  -0.19030888 -0.13593589  0.11689239  0.119483848  0.07374420
## x2   0.25676725  0.05444843  0.34962411  0.202170821 -0.04045183
## x3   0.04605116  0.03143553  0.06277284  0.104039741 -0.04940886
## x4  -0.14662687 -0.18707942  0.27009520  0.208728330  0.06006500
## x5  -0.20593401  0.07954266  0.22390150  0.152610801  0.07475270
## x6   0.40656858  0.27518396 -0.04490617 -0.006918284 -0.02823898
## x7   1.00000000  0.28032675 -0.18257772 -0.065515736 -0.17547011
## x8   0.28032675  1.00000000 -0.27192561 -0.124296598 -0.21597936
## x9  -0.18257772 -0.27192561  1.00000000  0.720264377  0.12902331
## x10 -0.06551574 -0.12429660  0.72026438  1.000000000  0.06707895
## x11 -0.17547011 -0.21597936  0.12902331  0.067078950  1.00000000
  • x7 y x2 tienen una correlación baja positiva (~0.256), indicando una relación lineal positiva pero débil.

  • x1 y x7 muestran una correlación negativa moderada (~-0.19), lo que sugiere una relación lineal negativa más fuerte pero no extrema.

  • x9 y x10 muestran una correlación alta positiva (~0.72), lo que indica una fuerte relación lineal positiva.

Grafico de correlacion en forma de circulos

corrplot(r,method="circle")

Determinante de la matriz de correlación

r=cor(muestra_sis)
det(r)
## [1] 0.1085184

La determinate de la matriz de correlaciones es 0.1085184, como la determinante es menor a 0.5 entonces las variables estan intercorrelacionadas.

Estandarización de datos

datos.es <- scale(muestra_sis)
head(datos.es, 6)
##               x1         x2         x3        x4          x5          x6
## [1,] -0.62148793 -0.1958995  2.4191861  1.078094 -0.06360921 -0.03491894
## [2,] -0.95063833  1.6760784 -0.1533833  1.078094 -0.35916452 -0.16597210
## [3,] -1.03292593  0.6277708 -0.9024127 -1.352186  0.53406931  0.26184018
## [4,] -0.29233753 -0.1958995 -0.8077272  1.078094  0.80663698  2.68325766
## [5,] -0.04547473 -0.5702951 -0.3047109  1.078094 -0.08002895  0.18483397
## [6,] -0.62148793 -0.5702951  0.2236676  1.078094  0.24836584 -0.20875333
##              x7         x8         x9        x10         x11
## [1,] -0.3934397 1.86291311 -0.6149857 -0.4757266 -0.08778827
## [2,]  0.6910757 0.76753239 -0.6149857 -0.4757266 -0.62138299
## [3,]  0.0402621 2.10945330 -0.6149857 -0.4757266 -0.62138299
## [4,]  0.4463030 0.01700497 -0.6149857 -0.4757266 -0.62138299
## [5,] -0.6173362 1.33199960 -0.6149857 -0.4757266 -0.62138299
## [6,] -0.6256867 2.59776194 -0.6149857 -0.4757266 -0.62138299

7. Aplicando el Análisis Factorial (AF)

7.1 Fase de Preparación

R <- cor(datos.es)
corr.test(R)
## Call:corr.test(x = R)
## Correlation matrix 
##        x1    x2    x3    x4    x5    x6    x7    x8    x9   x10   x11
## x1   1.00 -0.19 -0.11  0.01  0.11 -0.28 -0.50 -0.41  0.16  0.12  0.14
## x2  -0.19  1.00 -0.11  0.10  0.06 -0.03  0.21 -0.08  0.33  0.19 -0.28
## x3  -0.11 -0.11  1.00 -0.25  0.30 -0.12 -0.06 -0.01 -0.07 -0.04 -0.22
## x4   0.01  0.10 -0.25  1.00 -0.12 -0.36 -0.43 -0.53  0.45  0.35  0.12
## x5   0.11  0.06  0.30 -0.12  1.00  0.19 -0.44 -0.06  0.17  0.07  0.00
## x6  -0.28 -0.03 -0.12 -0.36  0.19  1.00  0.58  0.51 -0.50 -0.46 -0.34
## x7  -0.50  0.21 -0.06 -0.43 -0.44  0.58  1.00  0.56 -0.55 -0.44 -0.49
## x8  -0.41 -0.08 -0.01 -0.53 -0.06  0.51  0.56  1.00 -0.68 -0.55 -0.53
## x9   0.16  0.33 -0.07  0.45  0.17 -0.50 -0.55 -0.68  1.00  0.91  0.19
## x10  0.12  0.19 -0.04  0.35  0.07 -0.46 -0.44 -0.55  0.91  1.00  0.08
## x11  0.14 -0.28 -0.22  0.12  0.00 -0.34 -0.49 -0.53  0.19  0.08  1.00
## Sample Size 
## [1] 11
## Probability values (Entries above the diagonal are adjusted for multiple tests.) 
##       x1   x2   x3   x4   x5   x6   x7   x8   x9  x10 x11
## x1  0.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00   1
## x2  0.58 0.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00   1
## x3  0.75 0.75 0.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00   1
## x4  0.99 0.77 0.45 0.00 1.00 1.00 1.00 1.00 1.00 1.00   1
## x5  0.75 0.87 0.37 0.74 0.00 1.00 1.00 1.00 1.00 1.00   1
## x6  0.40 0.93 0.73 0.28 0.58 0.00 1.00 1.00 1.00 1.00   1
## x7  0.12 0.54 0.85 0.19 0.17 0.06 0.00 1.00 1.00 1.00   1
## x8  0.21 0.82 0.97 0.09 0.85 0.11 0.07 0.00 1.00 1.00   1
## x9  0.64 0.32 0.83 0.16 0.62 0.12 0.08 0.02 0.00 0.00   1
## x10 0.72 0.58 0.91 0.28 0.84 0.16 0.17 0.08 0.00 0.00   1
## x11 0.67 0.41 0.52 0.73 0.99 0.30 0.13 0.09 0.58 0.81   0
## 
##  To see confidence intervals of the correlations, print with the short=FALSE option
  1. Verificando si el determinante de R < 0.4 para realizar el AF
det(R)
## [1] 0.1085184

El determinante es 0.1085184 < 0.4; por lo que se puede afirmar que las variables se encuentran intercorrelacionadas.

  1. Verificando si el índice KMO > 0.5 para realizar el AF
KMO(R)$MSA
## [1] 0.4949526

El índice KMO es 0.4949526 cercano a 0.5, por lo que nos sugiere que procedamos con nuestro análisis factorial.

  1. Prueba de Esfericidad de Bartlett

H0:|R| = 1 (las correlaciones teóricas entre cada par de variables es nula)

H1:|R|!= 1 (las correlaciones teóricas entre cada par de variables no es nula)

cortest.bartlett(R, n = 380)
## $chisq
## [1] 831.7028
## 
## $p.value
## [1] 3.229372e-139
## 
## $df
## [1] 55

Con un nivel de significación de 0.05 se rechaza H0, se puede afirmar que se cumple el supuesto de que las correlaciones entre par de variables no es nula.

  1. Índices MSAi

Verificamos si alguna(s) variable(s) deben de permanecer en nuestro analísis, nos quedaremos con las variables donde el Índices MSAi > 0.5.

KMO(R)$MSAi
##        x1        x2        x3        x4        x5        x6        x7        x8 
## 0.6005145 0.4422538 0.4153810 0.6444733 0.3826589 0.3986452 0.3945767 0.6755869 
##        x9       x10       x11 
## 0.5623955 0.5514768 0.7221118

En vista de que algunos indices MSAi de las variables salen menos de 0.5 procederemos a retirar estas variables de nuestro análisis factorial, por lo tanto haremos una nueva correlación de los datos eliminando las variables x2,x3,x5,x6,x7

  1. Eliminando las variables con Índices MSAi < 0.5
R2 <- cor(datos.es[, -c(2,3,5,6,7)])
KMO(R2)$MSAi
##        x1        x4        x8        x9       x10       x11 
## 0.7290521 0.8043114 0.6079408 0.5503759 0.5373236 0.6680930
det(R2)
## [1] 0.3685125
KMO(R2)$MSA
## [1] 0.5760733
cortest.bartlett(R2, n = 382)
## $chisq
## [1] 377.5164
## 
## $p.value
## [1] 3.628612e-71
## 
## $df
## [1] 15

En vista de que los indices MSAi de las variables x2,x3,x5,x6,x7 salen menos de 0.5 procederemos a retirar esas variables de nuestro conjunto de datos “muestra_sis” y haremos una nueva correlación con las variables x1,x4,x8,x9,x10,x11. Como ahora el determinante es menor a 0.5 y todos los indices MSAi son mayores a 0.5 y también se cumple el supuesto de que las correlaciones entre par de variables no es nula, cumple las condiciones para realizar un análisis factorial.

7.2 Extracción de factores

facto1 <- principal(R2, nfactors = 2, rotate = "none", covar = FALSE); facto1
## Principal Components Analysis
## Call: principal(r = R2, nfactors = 2, rotate = "none", covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PC1   PC2   h2   u2 com
## x1   0.28 -0.37 0.22 0.78 1.9
## x4   0.49  0.07 0.24 0.76 1.0
## x8  -0.50  0.54 0.54 0.46 2.0
## x9   0.87  0.26 0.82 0.18 1.2
## x10  0.80  0.40 0.80 0.20 1.5
## x11  0.31 -0.68 0.55 0.45 1.4
## 
##                        PC1  PC2
## SS loadings           2.06 1.12
## Proportion Var        0.34 0.19
## Cumulative Var        0.34 0.53
## Proportion Explained  0.65 0.35
## Cumulative Proportion 0.65 1.00
## 
## Mean item complexity =  1.5
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.14 
## 
## Fit based upon off diagonal values = 0.65

7.3 Número de factores a extraer

  1. Regla de Kaiser
facto1$values
## [1] 2.0562964 1.1163922 0.9724285 0.8628400 0.7299373 0.2621056

Determinar cuántos factores tomar basados en la regla de Kaiser

factores_a_tomar <- sum(facto1$values > 1)
factores_a_tomar
## [1] 2

Según la regla de Kaiser debemos de extraer dos factores ya que tenemos dos autovalores mayores a 1.

  1. Gráfico de Sedimentación
df_sedimentacion <- data.frame(Factor = 1:length(facto1$values), Valor = facto1$values)

library(ggplot2)
ggplot(df_sedimentacion, aes(x = Factor, y = Valor)) +
  geom_point(color = "#3498DB", size = 4) +  
  geom_line(color = "#3498DB") +  
  geom_hline(yintercept = 1, linetype = "dashed", color = "#C0392B", size = 1.2) +  
  geom_text(aes(label = round(Valor, 2)), vjust = -0.5, size = 5, color = "#2C3E50") +  
  scale_x_continuous(breaks = seq(1, length(facto1$values), by = 1)) +
  labs(title = "Gráfico de Sedimentación ", x = "Número de Factores", y = "Autovalor") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 65, hjust = 1),
        plot.title = element_text(face = "bold", color = "#C0392B", hjust = 0.5),  
        axis.title.x = element_text(color = "#C0392B"),  
        axis.title.y = element_text(color = "#C0392B"),  
        axis.text = element_text(color = "#2C3E50"),  
        panel.background = element_rect(fill = "#ECF0F1"),  
        legend.position = "none",  
        plot.margin = unit(c(1, 1, 1, 1), "lines"))  
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

En el gráfico, los primeros dos factores tienen valores más altos y muestran un descenso notable después del segundo punto. Esto sugiere que estos dos primeros factores capturan la mayor parte de la variabilidad en los datos.

Debido a que la regla de Kaiser y el valor obtenido en el gráfico de Sedimentación nos recomiendan 2 factores, extraeremos 2.

7.4 matriz de componentes

Matriz de componentes

facto1$loadings[,1:2]
##            PC1         PC2
## x1   0.2791281 -0.37220996
## x4   0.4900191  0.06915442
## x8  -0.5028622  0.53685878
## x9   0.8678181  0.26194186
## x10  0.7988110  0.40043615
## x11  0.3068997 -0.67519598

Debido a que en la matriz de componentes no se cumple la regla que más del 50% de las variables x1,x4,x8,x9,x10,x11 tengan una correlación con uno de los factores mayor a 0.7 y con el otro factor menores a 0.3, procederemos a rotar los factores, para ello emplearemos las rotaciones Varimax y Promax y conoceremos si difieren en la interrelación entre las variables mencionadas y los dos factores extraídos.

7.5 Rotaciones

VARIMAX

facto2 <- principal(R2, nfactors = 2, rotate = "varimax", covar = FALSE); facto2
## Principal Components Analysis
## Call: principal(r = R2, nfactors = 2, rotate = "varimax", covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##       RC1   RC2   h2   u2 com
## x1   0.09  0.46 0.22 0.78 1.1
## x4   0.47  0.15 0.24 0.76 1.2
## x8  -0.22 -0.70 0.54 0.46 1.2
## x9   0.90  0.14 0.82 0.18 1.1
## x10  0.89 -0.01 0.80 0.20 1.0
## x11 -0.02  0.74 0.55 0.45 1.0
## 
##                        RC1  RC2
## SS loadings           1.88 1.30
## Proportion Var        0.31 0.22
## Cumulative Var        0.31 0.53
## Proportion Explained  0.59 0.41
## Cumulative Proportion 0.59 1.00
## 
## Mean item complexity =  1.1
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.14 
## 
## Fit based upon off diagonal values = 0.65

Matriz de componentes

facto2$loadings[,1:2] 
##             RC1         RC2
## x1   0.08881481  0.45668883
## x4   0.47110855  0.15151834
## x8  -0.21832171 -0.70244098
## x9   0.89516480  0.14283507
## x10  0.89348016 -0.01188989
## x11 -0.01835775  0.74144457

PROMAX

facto3 <- principal(R2, nfactors = 2, rotate = "promax", covar = FALSE); facto3
## Principal Components Analysis
## Call: principal(r = R2, nfactors = 2, rotate = "promax", covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##       RC1   RC2   h2   u2 com
## x1   0.01  0.46 0.22 0.78 1.0
## x4   0.46  0.10 0.24 0.76 1.1
## x8  -0.10 -0.70 0.54 0.46 1.0
## x9   0.89  0.04 0.82 0.18 1.0
## x10  0.92 -0.12 0.80 0.20 1.0
## x11 -0.15  0.77 0.55 0.45 1.1
## 
##                        RC1  RC2
## SS loadings           1.87 1.31
## Proportion Var        0.31 0.22
## Cumulative Var        0.31 0.53
## Proportion Explained  0.59 0.41
## Cumulative Proportion 0.59 1.00
## 
##  With component correlations of 
##      RC1  RC2
## RC1 1.00 0.28
## RC2 0.28 1.00
## 
## Mean item complexity =  1
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.14 
## 
## Fit based upon off diagonal values = 0.65

Matriz de componentes

facto3$loadings[,1:2]
##             RC1         RC2
## x1   0.01003584  0.46233686
## x4   0.45660968  0.10186978
## x8  -0.09930373 -0.70159545
## x9   0.89338296  0.04341124
## x10  0.91913698 -0.11654108
## x11 -0.15054070  0.76957761

Al aplicar la rotación Varimax tenemos que el número de variables que cumplen la regla mayor a 0.7 y menor 0.3 es mas del 50% y las que cumplieron fueron: x8,x9,x10 y x11. En cuanto a la rotación Promax tenemos que el número de variables que cumplen la regla mayor a 0.7 y menor que 0.3 es mas del 50% y las que cumplieron fueron: x8,x9,x10 y x11. Por lo tanto, no hay diferencia en la elección del tipo de rotación al conocer la interrelación entre las variables x1,x4,x8,x9,x10,x11 y los dos factores extraídos.

Interpretación de factores al aplicar rotación Varimax

library(ade4)
s.corcircle(facto2$loadings[,1:2])

fa.diagram(facto2)

Interpretación de factores al aplicar rotación Promax

library(ade4)
s.corcircle(facto3$loadings[,1:2])

fa.diagram(facto3)

En este caso tanto para las dos rotaciones, la interpretación es casi la misma pues cada factor contiene las mismas variables.

Factor 1 : x9 (Saldo Principal Pendiente del Préstamo) y x10 (Saldo de Intereses y Penalizaciones Pendientes) tienen cargas muy altas de 0.9 en el factor RC1. Esto sugiere que ambos factores están fuertemente asociados con el RC1, indicando que este componente estaria asociado con el monto y los costos adicionales que implica el prestamo.

x4 (Duración del Préstamo) tiene una carga moderada de 0.5, implicando que la duración del préstamo también juega un papel en este factor, posiblemente relacionado a cómo la duración más larga del préstamo afecta la carga financiera total

Factor 2 :

x11 (Pagos Previos Antes del Préstamo) tiene una carga positiva de 0.7, lo que indica que pagos previos más altos están fuertemente relacionados con este factor, posiblemente reflejando un mejor historial de crédito o menor riesgo percibido por el prestamista.

x1 (Edad) muestra una carga positiva moderada de 0.5, sugiriendo que la edad del solicitante también contribuye a este factor, donde la edad podría estar asociada con la estabilidad financiera o experiencia crediticia.

x8(Flujo de Caja Libre Disponible) muestra una carga negativa de -0.7 indicando que existe una fuerte relación inversa con el factor, cuando el valor de la variable x8 disminuye, el valor de RC2 aumenta. Esto sugiere que individuos con menor flujo de caja libre enfrentan mayores cargas financieras directas.

7.6 Puntuaciones: Son los nuevos datos (transformados)

Para este caso debe salir una matriz 380x2

facto3p <- principal(muestra_sis[, -c(2,3,5,6,7)], nfactors = 2, rotate = "varimax", covar = FALSE) #Por defecto usa el metodo de Regresión
pun <- facto3p$scores
head(pun,15)
##              RC1         RC2
##  [1,] -0.2702419 -1.14005925
##  [2,] -0.1821964 -0.99258902
##  [3,] -0.7808976 -1.86313401
##  [4,] -0.1897989 -0.35127806
##  [5,] -0.2090810 -0.97190414
##  [6,] -0.2086973 -1.86157198
##  [7,] -0.2073603  0.15801306
##  [8,]  2.8126285 -2.45384759
##  [9,] -0.5779251 -1.62619335
## [10,] -0.4981356 -0.82376729
## [11,]  0.8931411 -0.28540050
## [12,] -0.6984737 -0.08700316
## [13,] -0.1613682 -0.55086952
## [14,] -0.8408480 -0.49845731
## [15,]  1.5213564 -0.01641739
  • \(H_0\): correlación \(= 0\)
  • \(H_1\): correlación \(\neq 0\)
cor(pun)
##              RC1          RC2
## RC1 1.000000e+00 2.916269e-16
## RC2 2.916269e-16 1.000000e+00
cor.test(pun[,1], pun[,2]) 
## 
##  Pearson's product-moment correlation
## 
## data:  pun[, 1] and pun[, 2]
## t = 5.6699e-15, df = 378, p-value = 1
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.1006018  0.1006018
## sample estimates:
##          cor 
## 2.916269e-16

Como \(p\)-valor=1 \(> 0.05\),se demuestra que las puntuaciones no están correlacionadas.

Grafico de puntuaciones

plot(pun[,1], pun[,2],col="red",pch=20)
abline(h = 0, v = 0,col="purple")

En el grafico apreciamos que los puntos están distribuidos de manera dispersa sin una clara relación lineal entre RC1 y RC2. Esto visualmente refuerza los resultados de la matriz de correlaciones y la prueba de Pearson que los factores no están correlacionados. Cada punto en el gráfico representa una observación en el espacio de los factores. La falta de correlación entre los factores sugiere que estos representan dimensiones independientes de la variabilidad en los datos.

Por ultimo, el análisis factorial realizado ha conseguido extraer factores que no están correlacionados entre sí, lo que es un resultado adecuado y esperado en un buen análisis factorial.

Conclusiones

  • En nuestro estudio sobre el riesgo de préstamos P2P en la plataforma Bondora, se confirmó la idoneidad de los datos para el análisis factorial, justificado por un índice KMO > 0.5,hay una adecuada correlación entre variables, y una prueba de Esfericidad de Bartlett significativa. El análisis de la matriz de correlación mostró coeficientes significativos, validando que las interrelaciones entre variables son suficientemente fuertes para proceder con el análisis factorial. Estos resultados justifican el uso de esta técnica para explorar factores claves en el comportamiento de los prestatarios y el manejo del riesgo crediticio.

  • Antes de nuestros analísis se procedió a limpiar nuestra data de valores atípicos y valores faltantes (NA), también optamos por aplicar una selección de muestra sistemática el cual redujo nuestros datos para facilitar nuestro análísis.

  • En el análisis de los préstamos P2P de la plataforma Bondora, empleamos dos métodos de rotación, Varimax y Promax, para mejorar la interpretación de los factores extraídos. Los resultados mostraron que ambas rotaciones ofrecieron interpretaciones identicas de los factores, lo que indica que las dimensiones identificadas son robustas respecto al método de rotación utilizado. Podría ser útil destacar cómo la congruencia entre diferentes métodos de rotación puede servir como una herramienta de diagnóstico para confirmar la veracidad de los factores identificados.

  • Aplicamos el método de puntuaciones y demostramos que no estaban correlacionadas , pudimos observar en la gráfica de dispersión en el que los datos estan dispersos , con una relación poco fiable de los dos factores RC1 y RC2. Llegando a la conclusión pudimos darnos cuenta que en el análisis factorial aplicado no pudimos llegar a ninguna relación de los factores y que son independientes de la variabilidad de los datos.

Sugerencias

  • Estrategia de segmentación de clientes: basándose en nuestros factores identificados, las plataforma financiera Bondora pueden clasificar a los prestatarios en diferentes categorías de riesgo y ajustar con mayor precisión los términos de los préstamos (como las tasas de interés y los términos de los préstamos) para cada segmento.

  • Políticas de Préstamos: Sugerir a las plataforma financiera Bondora revisar y ajustar sus políticas de préstamos para reflejar los hallazgos del análisis factorial. Esto puede incluir ajustes en los montos máximos de préstamo y las estrategias de duración del préstamo para alinearlos con los perfiles de riesgo identificados.