Ejercicio 01

Una entidad financiera busca clasificar a sus clientes en dos grupos, aquellos que prefieren un Crédito Personal y aquellos que optan por un Ahorro a Plazo Fijo. El objetivo del análisis discriminante es utilizar características demográficas y financieras de los clientes para predecir su preferencia de producto. Desarrollar un modelo que, con base en las características de los clientes, pueda predecir si un cliente prefiere un Crédito Personal (0) o un Ahorro a Plazo Fijo (1).

##Importación de datos
data=read.csv(file.choose())
head(data)
##   Edad Ingresos_Mensuales Ahorros_Totales Deuda_Actual Tipo_Vivienda
## 1   29               1387            3831        14815        Propia
## 2   25               1770            2632         9980     Alquilada
## 3   32               2980             766         4270     Alquilada
## 4   27               1535            4871        12052        Propia
## 5   34               2485             751        11612     Alquilada
## 6   34               1307            2884         2810        Propia
##   Nivel_Educativo Estado_Civil Producto_Preferido
## 1      Secundaria   Divorciado                  0
## 2       Postgrado      Soltero                  0
## 3      Secundaria       Casado                  0
## 4       Postgrado       Casado                  0
## 5   Universitario       Casado                  0
## 6      Secundaria   Divorciado                  0
#Filtrando columnas
data=data[,c(1,2,3,4,8)]
head(data)
##   Edad Ingresos_Mensuales Ahorros_Totales Deuda_Actual Producto_Preferido
## 1   29               1387            3831        14815                  0
## 2   25               1770            2632         9980                  0
## 3   32               2980             766         4270                  0
## 4   27               1535            4871        12052                  0
## 5   34               2485             751        11612                  0
## 6   34               1307            2884         2810                  0

Prueba de hipotesis de Lambda de Wilks

H0 : La función discriminante no posee capacidad discriminante.

Ha : La función discriminante permite distinguir las categorias gracias a al menos una variable

alfa=0.05

Xm = manova(data=data,
            cbind(Edad,Ingresos_Mensuales,
                  Ahorros_Totales,Deuda_Actual)~Producto_Preferido)
final = summary(Xm,test="Wilks")
final
##                      Df    Wilks approx F num Df den Df    Pr(>F)    
## Producto_Preferido    1 0.036988    65057      4   9995 < 2.2e-16 ***
## Residuals          9998                                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Pvalor = 2.2^(-16) aprox = 0 Decisión = Pvalor < alfa Rechazo Ho.

Conclusión A un nivel de significación del 5%, se puede afirmar que la función discriminante permite distinguir las categorias gracias a al menos una variable

Análisis discriminante

library(MASS)
modelo = lda(data=data,
             Producto_Preferido~Edad + Ingresos_Mensuales+
                  Ahorros_Totales+Deuda_Actual)
modelo
## Call:
## lda(Producto_Preferido ~ Edad + Ingresos_Mensuales + Ahorros_Totales + 
##     Deuda_Actual, data = data)
## 
## Prior probabilities of groups:
##   0   1 
## 0.5 0.5 
## 
## Group means:
##      Edad Ingresos_Mensuales Ahorros_Totales Deuda_Actual
## 0 29.5206           1987.550        2475.497     7763.289
## 1 49.4684           7490.323       35114.528     7692.912
## 
## Coefficients of linear discriminants:
##                              LD1
## Edad                9.838860e-02
## Ingresos_Mensuales  9.873249e-04
## Ahorros_Totales     8.603983e-05
## Deuda_Actual       -1.994808e-06

Función discriminante

Di = Edad * 9.838860e-02+ Ingresos_Mensuales * 9.873249e-04 + Ahorros_Totales * 8.603983e-05 + Deuda_Actual*-1.994808e-06

Calidad del ajuste (n^2)

autovalor=final$Eigenvalues[,1]

calidad =  autovalor/(1+autovalor)
round(calidad*100,2) ## En %
## Producto_Preferido 
##               96.3

El ajuste (varianza explicada) es del 96.3% (relativamente muy bueno) El 96.3% de la variabilidad de la función discriminante es explicada por las variables independientes.

Correlación Canónica

correlacion = sqrt(calidad)
round(correlacion*100,2) ## En %
## Producto_Preferido 
##              98.13

la función discriminante presenta una alta correlación (canónica) con la variable binaria a clasificar del 98.13%.

Tabla de clasificación

# calidad de la clasificación
pro = predict(modelo)
Tabla = table(data$Producto_Preferido,pro$class)
Tabla
##    
##        0    1
##   0 5000    0
##   1    0 5000

Se tiene una “Perfecta clasificación”.

Correcta_clasi= (5000+5000)/10000
Correcta_clasi*100 # En %
## [1] 100

Ejercicio 02

CASO: USARRESTS El departamento de investigación de seguridad pública en Estados Unidos está buscando formas de entender mejor los patrones de criminalidad a lo largo del país. Para ello, han decidido analizar el dataset USArrests, que contiene estadísticas sobre crímenes en diferentes estados para el año 1973. El objetivo es identificar grupos de estados con perfiles de criminalidad similares, lo que podría ayudar en la formulación de políticas de seguridad pública y en la asignación de recursos.

datos <- USArrests
head(datos)
##            Murder Assault UrbanPop Rape
## Alabama      13.2     236       58 21.2
## Alaska       10.0     263       48 44.5
## Arizona       8.1     294       80 31.0
## Arkansas      8.8     190       50 19.5
## California    9.0     276       91 40.6
## Colorado      7.9     204       78 38.7

Importante

#Normalizar
datos.z = scale(datos)
head(datos.z)
##                Murder   Assault   UrbanPop         Rape
## Alabama    1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska     0.50786248 1.1068225 -1.2117642  2.484202941
## Arizona    0.07163341 1.4788032  0.9989801  1.042878388
## Arkansas   0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144  1.7589234  2.067820292
## Colorado   0.02571456 0.3988593  0.8608085  1.864967207

Matriz de distancia

md.e<-dist(datos.z, method="euclidean", diag=T)
##md.e

Revisión de distancias cortas, implica primeros juntes de las unidades observacionales como un cluster.

Dendograma

clust.h<-hclust(md.e,method="ward.D2")
plot(clust.h, xlab="", cex=1.2) 

Piden 4 clusters.

plot(clust.h, xlab="", cex=1.2)
rect.hclust(clust.h, k = 4, border = "blue")

Identificando el cluster por cada ciudad

res.hc=cutree(clust.h, k=4)
table(res.hc)
## res.hc
##  1  2  3  4 
##  7 12 19 12

Cantidad de ciudades por cada cluster (table).

Reagrupando para visualizar los cluster en la BD original

datos_cluster=cbind(datos,res.hc)
head(datos_cluster)
##            Murder Assault UrbanPop Rape res.hc
## Alabama      13.2     236       58 21.2      1
## Alaska       10.0     263       48 44.5      2
## Arizona       8.1     294       80 31.0      2
## Arkansas      8.8     190       50 19.5      3
## California    9.0     276       91 40.6      2
## Colorado      7.9     204       78 38.7      2

Resumen de cluster

library(dplyr)
## 
## Adjuntando el paquete: '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
cuadro_resumen=  datos_cluster %>%
  group_by(res.hc) %>%
  summarise(
    Murder=mean(Murder),
    Assault=mean(Assault),
    UrbanPop=mean(UrbanPop),
    Rape=mean(Rape),
  )
cuadro_resumen
## # A tibble: 4 × 5
##   res.hc Murder Assault UrbanPop  Rape
##    <int>  <dbl>   <dbl>    <dbl> <dbl>
## 1      1  14.7     251.     54.3  21.7
## 2      2  11.0     264      76.5  33.6
## 3      3   6.21    142.     71.3  19.2
## 4      4   3.09     76      52.1  11.8