Banks">
Nothing Special   »   [go: up one dir, main page]

Vinueza Josselyn PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

ADisciminante

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

• Aplicación predictiva: se trata de determinar el grupo al que es más probable


que pertenezca un individuo para el que se conocen los valores que toman las
variables clasificadoras.

El AD está relacionado con el análisis multivariante de la varianza con un factor,


aunque el papel que juegan los distintos tipos de variables está invertido en uno y otro
método. Así, en el análisis de varianza, la variable categórica (el factor) es la variable
explicativa, mientras que, en el AD, la variable categórica es la variables dependiente.
Para ilustrar la técnica se usa el ejemplo siguiente:

Análisis de préstamos fallidos del Banco de Ademuz


Cuando un banco concede un préstamo personal a un cliente se enfrenta a la doble
posibilidad de que sea reintegrado o de que no lo sea. Si sucede, este último caso, el
préstamo será clasificado como fallido. Así pues, se piede considerar dos grupos de
clientes: cumplidores y fallidos. Como es obvio, si el banco considera que el cliente
será fallido, no le otorga el crédito. Sin embargo, puede utilizar la información
existente en el banco sobre préstamos concedidos en el pasado en la concesión de
préstamos futuros de forma que evite o, al menos, se reduzca la posibilidad de
conceder préstamos que resulten luego fallidos. En los archivos de los bancos existe
información de las características de las personas a las que se concedió el préstamos,
pues, cuando los clientes realizan la petición de préstamos, facilitan información de
ingresos, edad, sexo, situación familiar, estado civil, antigüedad en su puesto de
trabajo, experiencia, etc. Es muy posible que los cumplidores tengan características
distintas a los fallidos.
Usando esas características se trata de establecer unas funciones que clasifiquen los
más correcto posible a los clientes cumplidores y fallidos (finalidad explicativa).
Luego, estas funciones se emplearán para determinar si se conceden o no los
préstamos futuros a los solicitantes (finalidad predictiva).
En el Banco Ademuz se tiene información acerca de 16 clientes a los que se les
concedió el crédito instantáneo de 12 mil dólares a cada uno. Una vez transcurridos
tres años desde la concesión de los préstamos había 8 clientes, de los 16, que fueron
clasificados como fallidos, mientras que los 8 restantes son cumplidores. De cada
cliente hay información acerca de: patrimonio neto, deudas pendientes
correspondientes al momento de la solicitudes.
Datos sobre características de préstamos concedidos en el Banco de Ademuz (en
decenas de miles de USD)
cliente<-c(1:16)
grupo<-c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)
Patrimonio.neto<-c(1.3,3.7,5.0,5.9,7.1,4.0,7.9,5.1,
5.2,9.8,9.0,12.0,6.3,8.7,11.1,9.9)
Deuda.pendiente<-c(4.1,6.9,3.0,6.5,5.4,2.7,7.6,3.8,
1.0,4.2,4.8,2.0,5.2,1.1,4.1,1.6)

datos.AD<-data.frame(cliente, grupo, Patrimonio.neto, Deuda.pendiente)

print(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

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.

Clasificación con dos grupos


Aquí se dará un visión descriptiva e intuitiva de la aplicación del AD a la clasificación
de individuos en el caso de que puedan clasificar en dos grupos.

Clasificación con dos grupos y una variable clasificadora


En esta parte vemos el caso más sencillo en el que sólo existen dos grupos, llamados I
y II y una variable clasificadora, denominada 𝑋. El problema que se plantea es el de
clasificar a cada individuo en el grupo correcto atendiendo a la valor de la variable
clasificadora.
##Funciones de distribución hipotéticas para los dos grupos##
Como se puede observar en la gráfica anterior se han presentado unas hipotéticas
funciones de frecuencia de la variable 𝑋 correspondientes a los dos grupos. Tanto la
configuración de distribución de frecuencias como la varianza son las mismas en los
dos grupos, es decir, los dos grupos coinciden en todo excepto en su media.Como
puede verse, las distribuciones de frecuencias, que se han representado de forma
estilizada, están entrelazadas en el sentido de que se solapan. Precisamente, al existir
solapamiento, se comete o pueden cometerse errores de clasificación. De no existir tal
solapamiento, el problema de clasificar a cada individuo en uno de los grupos sería
trivial.
Dados los supuesto establecidos y denominando 𝑋‾𝐼 y 𝑋‾𝐼𝐼 a las medias de los grupos 𝐼 y
𝐼𝐼 respectivamente, el punto de intersección de las dos funciones corresponde al valor
medio de 𝑋‾𝐼 y 𝑋‾𝐼𝐼 . Es decir, este punto medio, al que denominaremos C, es igual a:
𝑋‾𝐼 + 𝑋‾𝐼𝐼
𝐶= [1]
2
A partir de la ecuación [1], parece razonable tomar el siguiente criterio de
clasificación para clasificar a un individuo 𝑖:
• Si 𝑋𝑖 < 𝐶, se clasifica al individuo 𝑖 en el grupo 𝐼

• Si 𝑋𝑖 > 𝐶, se clasifica al individuo 𝑖 en el grupo 𝐼𝐼

Por la función que cumple, designaremos a 𝐶 como el punto de corte discriminante o


simplemente como punto de corte, en el sentido de que es el punto que toma como
referencia para clasificar a un individuo en uno u otro grupo.
Aplicando este criterio se comenten errores de clasificación, como puede probarse al
examinar la figura [2]. Así, el área tramada existente a la derecha de 𝐶 recoge
individuos del 𝐼, incorrectamente clasificados en el grupo 𝐼𝐼. En el mismo sentido, el
área rayada existente en la izquierda de 𝐶 recoge individuos pertenecientes al grupo
𝐼𝐼 incorrectamente clasificados en el grupo 𝐼.
Vamos aplicar las ideas anteriores al caso de la ecuación [2] de los préstamo del Banco
de Adamuz. Como variable clasificadora se va a utilizar el patrimonio neto de clientes,
al que se denominará 𝑋1. El grupo de clientes fallidos será 𝐼, mientras que 𝐼𝐼
corresponderá a los no fallidos.
Las medias muestrales de los dos grupos son:
X_I<-mean(datos.AD$Patrimonio.neto[datos.AD$grupo==1])

X_II <- mean(datos.AD$Patrimonio.neto[datos.AD$grupo==2])

X_I

## [1] 5

X_II

## [1] 9

𝑋‾1,𝐼 = 5; 𝑋‾1,𝐼𝐼 = 9

Aplicando [2], tenemos:


5+9
𝐶1 = =7
2
Este punto de corte 𝐶1 se utilizará para clasificar a los clientes a los que se les ha
concedido préstamos en el Banco de Ademuz. Si el patrimonio neto es menor a 7
(decenas de miles de USD), se clasifica como fallido (𝐼), mientras que se clasifica como
no fallido (𝐼𝐼) si el patrimonio > 7. Con este criterio ¿a cuantos clientes se clasifica
incorrectamente?
Porcentaje de clasificaicones correctas e incorrectas utilizando la variable e
patrinomnio neto En la figura 3 de un total de 16 clientes se han clasificado
correctamente al 75%, que son 12 clientes. Es decir, 4 serian una claificación errónea.
Las observaciones 5 y 7 debierón estar en el grupo 𝐼𝐼 y, 9 y 13 en el grupo 𝐼.
Ahora usemos, como variable clasificadora, a las deudas pendientes:
X2_I <-mean(datos.AD$Deuda.pendiente[datos.AD$grupo==1])

X2_II <-mean(datos.AD$Deuda.pendiente[datos.AD$grupo==2])

X2_I

## [1] 5

X2_II

## [1] 3

𝑋‾2,𝐼 = 5; 𝑋‾2,𝐼𝐼 = 3

como punto de corte, ahora, el punto es:


𝑋‾2,𝐼 + 𝑋‾2,𝐼𝐼 5 + 3
𝐶1 = = =4
2 2
* Si las deudas pentientes son > 4 se clasifica como fallido (𝐼)
• Si las deudas pentientes son < 4 se clasifica como NO fallido (𝐼𝐼)
Los resultados obtenidos con la segunda variable son peores
Porcentaje de clasificaicones correctas e incorrectas utilizando la variable e deudas
pendientes
De los 16 casos sólo se clasifican correctamente el 56.25%. En concreto, se han
clasificado incorrectamente como grupo 𝐼 a los clientes 3, 6 y 9. Por el contrario, se
han clasidicado erróneamente como grupo 𝐼𝐼 a los clientes 10, 11, 13 y 15.
¿Se puede mejorar el porcentaje de clientes clasificados correctamente si se utilizan
las dos variables clasificadores de forma conjunta?

Clasificación con dos grupos y dos variables clasificadoras


Con el objetivo de tener una representación gráfica, se va a considerar el caso de dos
variables clasificadoras. Luego se generalizará para 𝑝 variables clasificadoras y se
obtendrá la función discriminante de Fisher.
Elipses de concentración de funciones de distribución de frecuencias y su proyección
sobre los ejes 𝑋1 y 𝑋2
En la figura anterior se han representado las elipse de concentración de los datos
correspondientes a dos distribuciones de frecuencias bivaridas, en las que las
variables 𝑋1 y 𝑋2 están correlacionadas positivamente.
Las dos elipsen de la figura tienen el mismo tamaño y difieren en su centro. Debajo del
eje 𝑋1 se han representado la proyección de las distribuciones de frecuencia
bivariantes sobre este eje. Esta proyección nos ofrece las distribuciones univariantes
marginales de la variable 𝑋1. Se puede observar que las distribuciones de los dos
grupos están solapadas, igual como ocurría en el caso de una variable clasificatoria.
Los mismo sucede con la marginas 𝑋2. Cuanto mayor sea el solapamiento, mayor será
el grado de porcentaje de individuos clasificados incorrectamente.
En esta figura parece que puede obtener una mejor función discriminante (es decir,
que separe mejor) utilizando las dos variables conjuntamente. Proyectando las dos
distribuciones de frecuencia sobre un eje oblicuo se puede obtener distribuciones de
frecuencias que estén menos solapadas que las distribuciones marginales. Variando la
inclinación de este eje se obtienen distribuciones con un distinto grado de
solapamiento. El eje con el que s logre un menor solapamiento será el optimo. A este
eje se denomina eje discriminante y a las proyecciones de los valores de las variables
𝑋1 y 𝑋2 sobre dicho eje se las denomina puntuaciones discriminantes. La variable
obtenida en la proyección, que será designada con 𝐷, es la función discriminante.
Elipses de concentración de funciones de distribución de frecuencias y su proyección
sobre el eje discriminante
En la figura anterior se ha representado, esta proyección óptima. Por lo tanto, las
distribuciones de frecuencias que aparecen sobre el eje discriminante son las
correspondientes a la función discriminante
Funciones de distribución de frecuencias de las puntuaciones sobre el eje
discriminante
En la figura anterior se ha representado las distribuciones de frecuencias de la función
discriminante, pero tomando como eje de abscisas al eje que en la anterior figura [7]
aparecía como eje discriminante.

Función discriminante de Fisher


La pregunta que nos hemos hecho al inicio se ha ilustrado graficamente para dos
variables clasificadoras, el estadísitco Fisher los resolvió analíticamente den 1936
para el caso general de 𝑝 variables. La función discriminante de Fisher D se obtiene
como función lineal de 𝐾 variables explicativcas 𝑋, así:
𝐷 = 𝑢1 𝑋1 + 𝑢2 𝑋2 +. . . +𝑢𝑘 𝑋𝑘 [3]
El problema planteado es la obtención de los coeficientes de ponderación 𝑢𝑗 . Si
consideramos que existen 𝑛 observaciones, podemos expresas la función
discriminante para las 𝑛 observaciones:
𝐷𝑖 = 𝑢1 𝑋1𝑖 + 𝑢2 𝑋2𝑖 +. . . +𝑢𝑘 𝑋𝑘𝑖 , 𝑖 = 1,2, . . . , 𝑛[4]
Así, 𝐷𝑖 es la puntuación discriminante correspondiente a las observación i-ésima.
Expresando las variables explicativas en desviaciones respecto a la media, 𝐷𝑖 también
lo estará. La anterior relación se puede expresar en forma matricial para el conjunto
de observaciones:

𝐷1 𝑋11 𝑋21 ... 𝑋𝑘1 𝑢1


𝐷2 𝑋12 𝑋22 ... 𝑋𝑘2 𝑢2
𝐷3 = 𝑋31 𝑋32 ... 𝑋𝐾3 × 𝑢3 [5]
... ... ... ... ... ...
(𝐷𝑛 ) (𝑋1𝑛 𝑋2𝑛 ... 𝑢
𝑋𝑘𝑛 ) ( 𝑛 )
en notación matricial se compacta:
𝐝 = 𝐗𝐮[6]
La variabilidad de la función discriminate (es decir, la suma de los cuadrados de las
variables discriminantes en desviaciones respecto a la media) se puede expresar,así:
𝐝′𝐝 = 𝐮𝐗′𝐗𝐮[7]
El segundo miembro de la [7] es una forma cuadrática de la matriz 𝐗′𝐗. Esta matriz al
estar expresada las variables en desviaciones respecto a la media, es la matriz de suma
de cuadrados de los productos cruzados (SCPC) total de las variables 𝑋. En el AD estas
matrices se obtiene para las variables explicativas como se puede ver en la [7]. Esta
matriz se puede descomponer en la matriz SCPC entre-grupos y la SCPA residual o
intra-grupos. Esta descomposición de 𝐗′𝐗 puede expresarse, así:
𝐗′𝐗 = 𝐓 = 𝐅 + 𝐖[8]
donde: 𝐓, 𝐅, 𝐖 son las matrices de SCPC total, entre grupos e intra-grupos,
respectivamente. Sustituyendo [8] en [7], tenemos:
𝐝′𝐝 = 𝐮′𝐓𝐮 = 𝐮′𝐅𝐮 + 𝐮′𝐖𝐮[9]
Obsérvese que en la expresión anterior 𝐓, 𝐅, 𝐖 se pueden calcular con los datos
muestrales, mientras que los coeficientes 𝑢𝑖 están por calcular. Para su estimación
Fisher, utilizó el siguiente criterio. ¿cuándo una función discriminante estará
separando mejor los grupos? Cuando los grupos resultantes sean lo más homogéneo
posible dentro de ellos y lo más diferentes posible entre ellos, es decir:
𝑉𝑎𝑟𝑖𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 − 𝑒𝑛𝑡𝑟𝑒 − 𝑔𝑟𝑢𝑝𝑜𝑠
𝑚á𝑥 =
𝑉𝑎𝑟𝑖𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 − 𝑖𝑛𝑡𝑟𝑎𝑔𝑟𝑢𝑝𝑜𝑠
Con este criterio se trata de determinar el eje discriminante de forma que las
distribuciones proyectadas sobre el mismo estén lo más separadas posibles entre sí
(mayor variabilidad entre grupos) y, al mismo tiempo, que cada unas de las
distribuciones esté lo menos dispersa (menor variabilidad dentro de los grupos).
Analíticamente, el criterio de Fisher se puede expresar de la siguiente forma:
𝐮´𝐅𝐮
𝑚𝑎𝑥𝜆 = [10]
𝐮′𝐖𝐮
En pocas palabras, se trata de que el primer término (entre-grupos) sea lo mayor
posible, en detrimento del segundo (intragrupos).
La función de Fisher [3] suele ir acompañada del calificativo lineal, debido a que se
obtiene una combinación lineal de las variables originales.
Los coeficientes 𝑢1 , 𝑢2 , . . , 𝑢𝑘 (normalizados) se obtienen en el proceso de
maximización [10] pueden contemplarse como un conjunto de cosenos que definen la
situación del eje discriminante. Para esta interpretación, la normalización a la que nos
referimos es que la suma de sus cuadrados sea la unidad.
Las puntuaciones discriminantes son pues los valores que se obtiene a dar valores a
𝑋1 , 𝑋2 , . . . , 𝑋𝐾 de la ecuación [3] y se corresponden con los valores obtenidos al
proyectar cada punto del espacio 𝐾 − 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑒𝑠 de las variables originales sobre el
eje discriminante.
Los centros de gravedad o centroides (el vector de medias) son los estadísticos básicos
que resumen la información sobre los grupos. Las denominaciones que utilizaremos
son:
𝑋‾1,𝐼 𝑋‾1,𝐼𝐼
𝑋‾2,𝐼 𝑋‾2,𝐼𝐼
𝐱‾ 𝐼 = 𝑋‾3,𝐼 ; 𝐱‾ 𝐼𝐼 = 𝑋‾3,𝐼𝐼 [11]
... ...

(𝑋𝐾,𝐼 ) ‾
(𝑋𝐾,𝐼𝐼 )
Para calcular el punto de corte discriminante que nos va a permitir separar de mejor
manera posible los grupos, simplemente calculamos los valores que toma la función
discriminante de Fisher en los dos centroides y luego promediamos esos valores. Por
lo tanto, sustituyendo los centroides [11] en la [3], tenemos:
𝐷‾𝐼 = 𝑢1 𝑋‾1,𝐼 + 𝑢2 𝑋‾2,𝐼 +. . . +𝑢𝑝 𝑋‾𝐾,𝐼 [12]

𝐷‾𝐼𝐼 = 𝑢1 𝑋‾1,𝐼𝐼 + 𝑢2 𝑋‾2,𝐼𝐼 +. . . +𝑢𝑝 𝑋‾𝐾,𝐼𝐼 [13]

y el punto de corte discriminante C se calcula promediando 𝐷‾𝐼 y 𝐷‾𝐼𝐼 , así:


𝐷‾𝐼 + 𝐷‾𝐼𝐼
𝐶= [14]
2
y esto nos da el criterio para clasificar al individuo 𝑖:
• Si la puntuación del individuo 𝑖 en la función discriminante 𝐷𝑖 (sustituyendo el
valor de sus variables en [3]), es menor al punto de corte, se clasifica en el
grupo 𝐼: 𝐷𝑖 < 𝐶 → grupo 𝐼
• Si la puntuación del individuo 𝑖 en la función discriminante 𝐷𝑖 (sustituyendo el
valor de sus variables en [3]), es mayor al punto de corte, se clasifica en el
grupo 𝐼𝐼: 𝐷𝑖 > 𝐶 → grupo 𝐼𝐼.
En general, cuando se aplica el AD se resta el valor 𝐶 a la función para hacer más fácil
la aplicación del criterio. Si 𝐷𝑖 − 𝐶 < 0 → 𝐺𝐼 y 𝐷𝑖 − 𝐶 > 0 → 𝐺𝐼𝐼. De esta forma la
función discriminante viene dada por:
𝐷 − 𝐶 = 𝑢1 𝑋1 + 𝑢2 𝑋2 +. . . +𝑢𝐾 𝑋𝐾 − 𝐶[15]
que delimita en el plano (𝑋1 , 𝑋2) a los grupos 𝐼 y 𝐼𝐼

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

fit <- lda(grupo~


Patrimonio.neto+
Deuda.pendiente,
datos.AD)

coefficients(fit)

## LD1
## Patrimonio.neto 0.4224919
## Deuda.pendiente -0.3802226

A partir de los coeficiente obtenemos la función discriminante de Fisher


𝐷 = 0.422𝑃𝑎𝑡𝑟𝑖𝑁𝑒𝑡𝑜 − 0.380𝐷𝑒𝑢𝑑𝑎𝑃𝑒𝑛𝑑𝑖𝑒𝑛𝑡𝑒[16]
Con esta función ya podemos estimar la función en los cetroides de los grupos con
[12] y [13]
𝐷‾𝐼 = 0.422(5) − 0.380(5) = 0.21
D.med.I=0.422*(5)-0.380*(5)
D.med.I

## [1] 0.21

𝐷‾𝐼 = 0.422(9) − 0.380(3) = 2.658


D.med.II=0.422*(9)-0.380*(3)
D.med.II

## [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)

summary((fit.manova), test = "Wilks")

## Df Wilks approx F num Df den Df Pr(>F)


## grupo 1 0.36825 11.151 2 13 0.001513 **
## Residuals 14
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Debido a que 𝑝 − 𝑣𝑎𝑙𝑜𝑟𝐹 = tiene doble asterisco nos muestra que la función
discriminante es significativa, es decir, existe diferencia significativa entre la media
del grupo 𝐼 y grupo 𝐼𝐼
##EJEMPLO DATOS INSECTOS## Un equipo de biólogos quiere generar un modelo
estadístico que permita identificar a que especie (a o b) pertenece un determinado
insecto. Para ello se han medido tres variables (longitud de las patas, diámetro del
abdomen y diámetro del órgano sexual) en 10 individuos de cada una de las dos
especies.
input <- ("
especie pata abdomen organo_sexual
a 191 131 53
a 185 134 50
a 200 137 52
a 173 127 50
a 171 128 49
a 160 118 47
a 188 134 54
a 186 129 51
a 174 131 52
a 163 115 47
b 186 107 49
b 211 122 49
b 201 144 47
b 242 131 54
b 184 108 43
b 211 118 51
b 217 122 49
b 223 127 51
b 208 125 50
b 199 124 46
")

datos <- read.table(textConnection(input), header = TRUE)


datos$especie <- as.factor(datos$especie)

Exploracion grafica de los datos


library(ggplot2)
#install.packages("ggpubr")
library(ggpubr)

p1 <- ggplot(data = datos, aes(x = pata, fill = especie)) +


geom_histogram(position = "identity", alpha = 0.5)
p2 <- ggplot(data = datos, aes(x = abdomen, fill = especie)) +
geom_histogram(position = "identity", alpha = 0.5)
p3 <- ggplot(data = datos, aes(x = organo_sexual, fill = especie)) +
geom_histogram(position = "identity", alpha = 0.5)
ggarrange(p1, p2, p3, nrow = 3, common.legend = TRUE)

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

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'

## The following object is masked from 'package:MASS':


##
## select

## The following objects are masked from 'package:stats':


##
## filter, lag

## The following objects are masked from 'package:base':


##
## intersect, setdiff, setequal, union

datos_tidy <- melt(datos, value.name = "valor")

## Using especie as id variables

kable(datos_tidy %>% group_by(especie, variable) %>%


summarise(p_value_Shapiro.test = shapiro.test(valor)$p.value))

## `summarise()` has grouped output by 'especie'. You can override using


the
## `.groups` argument.

especie variable p_value_Shapiro.test


a pata 0.7763034
a abdomen 0.1845349
a organo_sexual 0.6430844
b pata 0.7985711
b abdomen 0.5538213
b organo_sexual 0.8217855
#install.packages("MVN")
library(MVN)
outliers <- mvn(data = datos[,-1], mvnTest = "hz",
multivariateOutlierMethod = "quan")
royston_test <- mvn(data = datos[,-1], mvnTest = "royston",
multivariatePlot = "qq")

royston_test$multivariateNormality
## Test H p value MVN
## 1 Royston 0.4636176 0.9299447 YES

hz_test <- mvn(data = datos[,-1], mvnTest = "hz")


hz_test$multivariateNormality

## Test HZ p value MVN


## 1 Henze-Zirkler 0.7870498 0.07666139 YES

library(biotools)

## ---
## biotools version 4.2

boxM(data = datos[, 2:4], grouping = datos[, 1])

##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: datos[, 2:4]
## Chi-Sq (approx.) = 9.831, df = 6, p-value = 0.132

modelo_lda <- lda(formula = especie ~ pata + abdomen + organo_sexual,


data = datos)

nuevas_observaciones <- data.frame(pata = 194, abdomen = 124,


organo_sexual = 49)
predict(object = modelo_lda, newdata = nuevas_observaciones)

## $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, "%")

## [1] "trainig_error= 0 %"

#representación de las observaciones


with(datos, {
s3d <- scatterplot3d(pata, abdomen, 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)

s3d.coords <- s3d$xyz.convert(pata, abdomen, organo_sexual)


# convierte coordenadas 3D en proyecciones 2D

text(s3d.coords$x, s3d.coords$y, # cordenadas x, y


labels = datos$especie, # texto
cex = .8, pos = 4)

legend("topleft",
bty = "n", cex = 0.8,
title = "Especie",
c("a", "b"), fill = c("firebrick", "green3"))
})

También podría gustarte