Banks">
Vinueza Josselyn PDF
Vinueza Josselyn PDF
Vinueza Josselyn PDF
Vinueza Josselyn
2023-02-22
ANALISIS DISCRIMINANTE
Introducción
Este es un método de clasificación, que se utiliza para explicar la pertinencia de
distintos individuos a grupos alternativos a partir de los valores de un conjunto de
variables que describen a los individuos que se pretende clasificar. Cada individuo
pertenece solo a un grupo. La pertenencia a uno u otro grupo se introduce en el
análisis mediante una variable categórica que toma tantos valores como grupos
existentes. Esta variable, en el análisis discriminante (AD), es la variable explicativa.
A las variables que se utilizan para realizar la clasificación de los individuos se la
denomina variables clasificadoras. También llamadas como variables criterio o
variables predictoras, o variables explicativas. En el AD, la información de las
variables clasificadoras se sinteriza en unas funciones, llamadas funciones
discriminantes, que se usarán en el proceso de clasificación.
El AD se aplica para fines explicativos y predictivos:
• Aplicación explicativo, porque trata de determinar la contribución de cada
variable clasificadora a la clasificación correcta de cada uno de los individuos
print(datos.AD)
Por otra parte, en la mesa del director del banco hay dos nuevas solicitudes de un
préstamo instantáneo. El primero solicitante de un patrimonio neto de 10.1 (decenas
de miles de dólares), con deudas pendientes de 6.8 (decenas de miles de dólares).
Para el segundo solicitante, los valores de estas variables son: 9.7 y 2.2,
respectivamente.
¿Cómo se realizaría en este caso la aplicación del análisis discriminante?
Con la información sobre las variables de patrimonio neto y deudas pendientes se
trata de construir una función discriminante que clasifique con los menores errores
posibles a los clientes en dos grupos: fallido y no fallidos. Si se obtienen buenos
resultados en esta clasificación, en un paso posterior se utilizará la función
discriminante para determinar si se concede el préstamo a los dos nuevos solicitantes.
De esta forma, su a un nuevo solicitante se clasifica a priori o como fallido, no se le
concederá el préstamo solicitado.
X_I
## [1] 5
X_II
## [1] 9
𝑋‾1,𝐼 = 5; 𝑋‾1,𝐼𝐼 = 9
X2_II <-mean(datos.AD$Deuda.pendiente[datos.AD$grupo==2])
X2_I
## [1] 5
X2_II
## [1] 3
𝑋‾2,𝐼 = 5; 𝑋‾2,𝐼𝐼 = 3
Aplicación en R
library(ggplot2)
library(MASS)
# Representación gráfica
ggplot(datos.AD, aes(x=Deuda.pendiente,
y=Patrimonio.neto,
colour=as.factor(grupo))) +
geom_point()
# Ajustando el AD
datos.AD
## cliente grupo Patrimonio.neto Deuda.pendiente
## 1 1 1 1.3 4.1
## 2 2 1 3.7 6.9
## 3 3 1 5.0 3.0
## 4 4 1 5.9 6.5
## 5 5 1 7.1 5.4
## 6 6 1 4.0 2.7
## 7 7 1 7.9 7.6
## 8 8 1 5.1 3.8
## 9 9 2 5.2 1.0
## 10 10 2 9.8 4.2
## 11 11 2 9.0 4.8
## 12 12 2 12.0 2.0
## 13 13 2 6.3 5.2
## 14 14 2 8.7 1.1
## 15 15 2 11.1 4.1
## 16 16 2 9.9 1.6
coefficients(fit)
## LD1
## Patrimonio.neto 0.4224919
## Deuda.pendiente -0.3802226
## [1] 0.21
## [1] 2.658
C=(D.med.I+D.med.II)/2
C
## [1] 1.434
datos.AD$Fun.F<-0.422*datos.AD$Patrimonio.neto-
0.380*datos.AD$Deuda.pendiente
datos.AD$Fun.F_C<-datos.AD$Fun.F-C
datos.AD$Clasificacion <-ifelse(datos.AD$Fun.F-C<0,1,2)
datos.AD$PCC<-ifelse(datos.AD$grupo==datos.AD$Clasificacion,1,0)
# Representación gráfica
ggplot(datos.AD, aes(x=Deuda.pendiente,
y=Patrimonio.neto,
colour=as.factor(grupo))) +
geom_point()
En el gráfico anterior se nota claramente que la observación 13 debería ser parte del
grupo I como lo hace la ecuación discriminante de Fisher que hemos calculado.
Calidad de la clasificación
fit.p <-predict(fit)$class
# Obtener la tabla cruzada
library(gmodels)
datos.AD$fit.p <-predict(fit)$class
CrossTable(datos.AD$grupo, datos.AD$fit.p,
digits = 2,
format = "SPSS",
prop.c = F,
prop.chisq = F,
prop.t = F,
dnn=c("Grupo real", "Grupo pronosticado"))
##
## Cell Contents
## |-------------------------|
## | Count |
## | Row Percent |
## |-------------------------|
##
## Total Observations in Table: 16
##
## | Grupo pronosticado
## Grupo real | 1 | 2 | Row Total |
## -------------|-----------|-----------|-----------|
## 1 | 8 | 0 | 8 |
## | 100.00% | 0.00% | 50.00% |
## -------------|-----------|-----------|-----------|
## 2 | 1 | 7 | 8 |
## | 12.50% | 87.50% | 50.00% |
## -------------|-----------|-----------|-----------|
## Column Total | 9 | 7 | 16 |
## -------------|-----------|-----------|-----------|
##
##
La clasificación es muy buena, pues revela que la única observación que debe cambiar
de grupo es la número 13
Contraste de hipótesis
𝐻0 : 𝑢1 = 𝑢2
fit.manova <-manova(cbind(Deuda.pendiente, Patrimonio.neto)~grupo,
datos.AD)
A nivel individual, la longitud de la pata parece ser la variable que más se diferencia
entre especies (menor solapamiento entre poblaciones).
pairs(x = datos[, c("pata","abdomen","organo_sexual")],
col = c("firebrick", "green3")[datos$especie], pch = 19)
El par de variables abdomen-pata y el par pata-organo_sexual parecen separar bien
las dos especies.
#install.packages("scatterplot3d")
library(scatterplot3d)
scatterplot3d(datos$pata, datos$abdomen, datos$organo_sexual,
color = c("firebrick", "green3")[datos$especie], pch = 19,
grid = TRUE, xlab = "pata", ylab = "abdomen",
zlab = "organo sexual", angle = 65, cex.axis = 0.6)
legend("topleft",
bty = "n", cex = 0.8,
title = "Especie",
c("a", "b"), fill = c("firebrick", "green3"))
Representación mediante Histograma de cada variable para cada
especie
par(mfcol = c(2, 3))
for (k in 2:4) {
j0 <- names(datos)[k]
#br0 <- seq(min(datos[, k]), max(datos[, k]), le = 11)
x0 <- seq(min(datos[, k]), max(datos[, k]), le = 50)
for (i in 1:2) {
i0 <- levels(datos$especie)[i]
x <- datos[datos$especie == i0, j0]
hist(x, proba = T, col = grey(0.8), main = paste("especie", i0), xlab
= j0)
lines(x0, dnorm(x0, mean(x), sd(x)), col = "red", lwd = 2)
}
}
#
Representación de cuantiles normales de cada variable para cada especie
for (k in 2:4) {
j0 <- names(datos)[k]
x0 <- seq(min(datos[, k]), max(datos[, k]), le = 50)
for (i in 1:2) {
i0 <- levels(datos$especie)[i]
x <- datos[datos$especie == i0, j0]
qqnorm(x, main = paste("especie", i0, j0), pch = 19, col = i + 1)
qqline(x)
}
}
Contraste de normalidad Shapiro-Wilk para cada variable en cada
especie
#install.packages("reshape2")
#install.packages("knitr")
library(reshape2)
library(knitr)
library(dplyr)
##
## Attaching package: 'dplyr'
royston_test$multivariateNormality
## Test H p value MVN
## 1 Royston 0.4636176 0.9299447 YES
library(biotools)
## ---
## biotools version 4.2
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: datos[, 2:4]
## Chi-Sq (approx.) = 9.831, df = 6, p-value = 0.132
## $class
## [1] b
## Levels: a b
##
## $posterior
## a b
## 1 0.05823333 0.9417667
##
## $x
## LD1
## 1 0.5419421
##Evaluacion de predicciones
predicciones <- predict(object = modelo_lda, newdata = datos[, -1],
method = "predictive")
table(datos$especie, predicciones$class,
dnn = c("Clase real", "Clase predicha"))
## Clase predicha
## Clase real a b
## a 10 0
## b 0 10
trainig_error <- mean(datos$especie != predicciones$class) * 100
paste("trainig_error=", trainig_error, "%")
legend("topleft",
bty = "n", cex = 0.8,
title = "Especie",
c("a", "b"), fill = c("firebrick", "green3"))
})