Integrantes:
Llamoca Leon Israel Ebeneser
Díaz Guevara Juan Carlos
Cuadros Ramirez Kevin William
Herencia Cazani Brenda Anali
Quillatupa Quintana Lucia Dayli
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.
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.
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.
| 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 |
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.
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)
}
datos <- remove_outliers(datos)
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
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
k <- floor(nrow(datos) / tamaño_muestra)
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)
muestra_sis <-muestra_sis [,-12]
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)
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
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.
corrplot(r,method="circle")
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.
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
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
det(R)
## [1] 0.1085184
El determinante es 0.1085184 < 0.4; por lo que se puede afirmar que las variables se encuentran intercorrelacionadas.
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.
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.
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
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.
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
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.
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.
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.
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
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.
library(ade4)
s.corcircle(facto2$loadings[,1:2])
fa.diagram(facto2)
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.
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
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.
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.
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.
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.