Analisis de componentes

Christian Francisco Sanchez Pantigoso

“18/11/2019”

Introduccion

PCA es un algoritmo de aprendizaje automático no supervisado que intenta reducir la dimensionalidad (número de características) dentro de un conjunto de datos mientras retiene toda la información posible. Esto se realiza buscando un nuevo conjunto de características denominado componentes, que son los compuestos de las características originales que no son correlativas entre sí. También están limitadas, por lo que el primer componente implica la máxima variabilidad posible en los datos y el segundo componente la segunda variabilidad máxima y así sucesivamente.

PCA opera de dos modos, según el escenario:

normal: para conjuntos de datos con datos dispersos y un número moderado de observaciones y características.

aleatorio: para conjuntos de datos con un gran número de observaciones y características. Este modo utiliza un algoritmo de aproximación.

PCA utiliza datos tabulares

Las filas representan las observaciones que desea incrustar en un espacio dimensional inferior. Las columnas representan las características para las que desea buscar una aproximación reducida. El algoritmo calcula la matriz de covarianza (o una aproximación de la misma de manera distribuida) y, a continuación, realiza la descomposición del valor singular en este resumen para producir los componentes principales.

OBTENCIÓN DE LAS COMPONENTES PRINCIPALES

En el análisis de componentes principales se dispone de una muestra de tamaño n acerca de p variables X1,X2…..,XP (tipificadas o expresadas en desviaciones respecto a lamedia) inicialmente correlacionadas, para posteriormente obtener a partir de ellas unnúmero k<= p de variables incorrelacionadas Z1,Z2…ZN que sean combinación linealde las variables iniciales y que expliquen la mayor parte de su variabilidad.

Ecuacion

Ecuacion

La primera componente principal, al igual que las restantes, se expresa comocombinación lineal de las variables originales:

Para el conjunto de las n observaciones muestrales, la ecuación puede expresarsematricialmente:

El gráfico de sedimentación

El gráfico de sedimentación se obtiene al representar en ordenadas las raícescaracterísticas y en abscisas los números de las componentes principales correspondientesa cada raíz característica en orden decreciente.Uniendo todos los puntos se obtiene una Figura que, en general, se parece al perfil de unamontaña con una fuerte pendiente hasta llegar a la base, formada por una meseta con unaligera inclinación.En este símil establecido de la montaña, en la meseta es donde se acumulan los guijarroscaídos desde la cumbre, es decir, donde se sedimentan. Este es el motivo por lo que algráfico se le conoce con el nombre de gráfico de sedimentación, su denominación en ingléses scree plot. De acuerdo con el criterio gráfico se retienen todas aquellas componentes previas a la zonade sedimentación.

Retención de variables

Si se retiene un número determinado de componentes, ¿qué hacer si alguna variable estácorrelacionada muy débilmente con cada una de las componentes retenidas?.Si se plantea un caso de este tipo, sería conveniente suprimir dicha variable del conjunto devariables originales, ya que no estaría representada por las componentes retenidas. Ahorabien, si se considera que la variable a suprimir juega un papel esencial en la investigación,entonces se deberían retener componentes adicionales en el caso de que algunas de ellasestuvieran correlacionadas de forma importante con la variable a suprimir.

Pruebas de correlacion Individual

Una vez calculado el valor del coeficiente de correlación interesa determinar si tal valor obtenido muestra que las variables X e Y están relacionadas en realidad o tan solo presentan dicha relación como consecuencia del azar. En otras palabras, nos preguntamos por la significación de dicho coeficiente de correlación. Un coeficiente de correlación se dice que es significativo si se puede afirmar, con una cierta probabilidad, que es diferente de cero. Más estrictamente, en términos estadísticos, preguntarse por la significación de un cierto coeficiente de correlación no es otra cosa que preguntarse por la probabilidad de que tal coeficiente proceda de una población cuyo valor sea de cero. A este respecto, como siempre, tendremos dos hipótesis posibles: H0: = 0-> r El coeficiente de correlación obtenido procede de una población cuya correlación es cero (p = 0 ). H1 : = 0-> xy r El coeficiente de correlación obtenido procede de una población cuyo coeficiente de correlación es distinto de cero (p=/0 ).

Pruebas esfericidad de Bartlett

Se utiliza para probar la Hipótesis Nula que afirma que las variables no están correlacionadas en la población. Es decir, comprueba si la matriz de correlaciones es una matriz de identidad. Se puede dar como válidos aquellos resultados que nos presenten un valor elevado del test y cuya fiabilidad sea menor a 0.05. En este caso se rechaza la Hipótesis Nula y se continúa con el Análisis.

Prueba de esfericidad de Bartlett:

Si Sig. (p-valor) < 0.05 aceptamos H0 (hipótesis nula) > se puede aplicar el análisis factorial.

Si Sig. (p-valor) > 0.05 rechazamos H0 > no se puede aplicar el análisis factorial.

Prueba del KMO

El test KMO (Kaiser, Meyer y Olkin) relaciona los coeficientes de correlación, rjh, observados entre las variables Xj y Xh, y ajh son los coeficientes de correlación parcial entre las variables Xj y Xh. Cuanto más cerca de 1 tenga el valor obtenido del test KMO, implica que la relación entres las variables es alta. Si KMO ≥ 0.9, el test es muy bueno; notable para KMO ≥ 0.8; mediano para KMO ≥ 0.7; bajo para KMO ≥ 0.6; y muy bajo para KMO < 0.5.

La prueba de evalúa la aplicabilidad del análisis factorial de las variables estudiadas. El modelo es significativo (aceptamos la hipótesis nula, H0) cuando se puede aplicar el análisis factorial

Ejemplo del Uso de PCA en R

Cargamos la data cliente

cliente=read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Mineria-de-datos-2019-2/master/clientes.csv", sep = ";")

Con el comando “head” podemos ver las primas filas de el dataframe

head(cliente)
##   ID_cliente edad educacion años_empleo Ingreso Tarjeta_credito
## 1          1   41         2           6      19           0.124
## 2          2   47         1          26     100           4.582
## 3          3   33         2          10      57           6.111
## 4          4   29         2           4      19           0.681
## 5          5   47         1          31     253           9.308
## 6          6   40         1          23      81           0.998
##   otra_tarjeta Direccion Ratio.ingreso.deuda
## 1        1.073    NBA001                 6.3
## 2        8.218    NBA021                12.8
## 3        5.802    NBA013                20.9
## 4        0.516    NBA009                 6.3
## 5        8.908    NBA008                 7.2
## 6        7.831    NBA016                10.9

Con el comando “str” podemos tener los tipos de variables del data frame

str(cliente)
## 'data.frame':    850 obs. of  9 variables:
##  $ ID_cliente         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ edad               : int  41 47 33 29 47 40 38 42 26 47 ...
##  $ educacion          : int  2 1 2 2 1 1 2 3 1 3 ...
##  $ años_empleo        : int  6 26 10 4 31 23 4 0 5 23 ...
##  $ Ingreso            : int  19 100 57 19 253 81 56 64 18 115 ...
##  $ Tarjeta_credito    : num  0.124 4.582 6.111 0.681 9.308 ...
##  $ otra_tarjeta       : num  1.073 8.218 5.802 0.516 8.908 ...
##  $ Direccion          : Factor w/ 32 levels "NBA000","NBA001",..: 2 22 14 10 9 17 14 10 7 12 ...
##  $ Ratio.ingreso.deuda: num  6.3 12.8 20.9 6.3 7.2 10.9 1.6 6.6 15.5 4 ...

En este dataframe clientes tenemos 9 variables y 850 observaciones cuenta con : 5 datos tipo int ,3 datos tipo num y 1 dato tipo factor

library(Amelia)
## Loading required package: Rcpp
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.7.5, built: 2018-05-07)
## ## Copyright (C) 2005-2019 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##

con el comando “missing” de la libreria de Amelia podemos ver si el dataframe cuenta con valores NA + False = No existe datos NA + True = Existen datos NA

missing(cliente)
## [1] FALSE

Podemos observar que no exiten datos NA en el data frame por ende se deja la data como esta

Seleccion de la Data

cliente_correlaciones=cliente[c(2:7,9)]

Se seleccionaran las variables edad , educacacion , años_empleo , Ingreso , Tarjeta_credito , otra_tarjeta , ratio.ingreso.deuda

Prueba de Correlacion

cor(cliente_correlaciones)
##                            edad    educacion años_empleo     Ingreso
## edad                1.000000000  0.012982860  0.55424133  0.47621808
## educacion           0.012982860  1.000000000 -0.15111705  0.21821936
## años_empleo         0.554241333 -0.151117051  1.00000000  0.62509257
## Ingreso             0.476218084  0.218219356  0.62509257  1.00000000
## Tarjeta_credito     0.278911779  0.099080615  0.38174363  0.55151036
## otra_tarjeta        0.337839059  0.140937875  0.41442984  0.60335568
## Ratio.ingreso.deuda 0.008240009  0.008053386 -0.03362502 -0.03558488
##                     Tarjeta_credito otra_tarjeta Ratio.ingreso.deuda
## edad                     0.27891178    0.3378391         0.008240009
## educacion                0.09908061    0.1409379         0.008053386
## años_empleo              0.38174363    0.4144298        -0.033625023
## Ingreso                  0.55151036    0.6033557        -0.035584878
## Tarjeta_credito          1.00000000    0.6449553         0.514970534
## otra_tarjeta             0.64495531    1.0000000         0.572545041
## Ratio.ingreso.deuda      0.51497053    0.5725450         1.000000000

Con la funcion podemos observar la correlacion que existen en las variables de el data frame

Grafico de Coeficientes de Correlacion

Con la funcion “corrplot” podemos tener un grafico que nos indica atravez de color la correlacion que existe siendo : azul = correlacion positiva rojo = correlacion negativa

library(corrplot)
## corrplot 0.84 loaded
corrplot(cor(cliente_correlaciones))

library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Registered S3 method overwritten by 'xts':
##   method     from
##   as.zoo.xts zoo
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend

Con el comando “chart.Correlation” podemos tener graficas de dispersion y calcular las correlaciones entre las variables añadiendo a estos graficos independientes entre cada variable

chart.Correlation(cliente_correlaciones,histogram = F ,pch = 19)

Aplicacion de test de correlacion

Test o Prueba de coeficiente de correlacion

library(psych)
library(rela)

Con el comando “cortest” podemos aplicar el test en la data seleccionada Se plantea H0 = 0 H1 !=0

cortest(cor(cliente_correlaciones))
## Warning in cortest(cor(cliente_correlaciones)): n not specified, 100 used
## Tests of correlation matrices 
## Call:cortest(R1 = cor(cliente_correlaciones))
##  Chi Square value 395  with df =  21   with probability < 1e-70

Como el valor es 1e-70 , entonces se rechaza H0 Por lo cual existe evidencia para afirmar que las correlaciones son distintas de 0

Test o Prueba Barlett

Se Plantea Hp= 1 Ha!=1

Con el comando “cortest.barlett” podemos aplicar el test de barlett para saber el valor de p.value siendo n el numero de observaciones

##PRUEBA DE ESFERICIDAD DE BARLETT
cortest.bartlett(cor(cliente_correlaciones),n=850)
## $chisq
## [1] 2782.794
## 
## $p.value
## [1] 0
## 
## $df
## [1] 21

Como resultado tenemos p.value = 0 Por lo cual hay evidendia para rechar hp y aceptar Ha

Prueba de KMO

library(psych)

Con el comando “KMO” podemos realizar el testde KMO a la data para lo cual el valor de Overall MSA deveria ser mayor a 0.5 para justificar la realizacion de PCA en la data para valores menoresa 0.5 la realizacion del PCA no seria justificada

KMO(cliente_correlaciones)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cliente_correlaciones)
## Overall MSA =  0.62
## MSA for each item = 
##                edad           educacion         años_empleo 
##                0.83                0.33                0.73 
##             Ingreso     Tarjeta_credito        otra_tarjeta 
##                0.57                0.73                0.65 
## Ratio.ingreso.deuda 
##                0.37

El valor de MSA = 0.62 , lo cual nos indica que amerita la realizacion de componentes (PCA) ya que su valor es mayor a 0.5

Grafico de Sedimentacion

El grafico de Sedimentacion nos muestra la cantidad optimas de componentes a tomar en la data , siendo los valorer por encima de la linea de 1.0 los mas aceptables

library(psych)
scree(cliente_correlaciones,main ="Grafico_de_Sedimentacion")

Según el gráfico de sedimentación, lo optimo seria realizar 3 componentes, puesto que este valor se encuentra por encima de la línea aceptable de la grafica .

Analisis Paralelo

Con la funcion “fa.parallel” podemos generar un grafico de apoyo con el cual verificamos los resultados dados por el grafico de sedimentacion

fa.parallel(cliente_correlaciones,fa="pc")

## Parallel analysis suggests that the number of factors =  NA  and the number of components =  3

Según los resultados del Análisis paralelo, el número de componentes deberá ser 3 .

Realizacion de los Componentes

componentes_cli<-prcomp(cliente_correlaciones, scale=TRUE,center = TRUE)
componentes_cli
## Standard deviations (1, .., p=7):
## [1] 1.7562752 1.2131944 1.0424863 0.7605054 0.5995351 0.5446299 0.3499237
## 
## Rotation (n x k) = (7 x 7):
##                            PC1        PC2          PC3         PC4
## edad                -0.3533771  0.3776825 -0.047835841 -0.80710071
## educacion           -0.0766529 -0.1560156  0.906566561 -0.18204239
## años_empleo         -0.4028106  0.4191734 -0.213041667  0.15006833
## Ingreso             -0.4648857  0.2524987  0.250570469  0.37631427
## Tarjeta_credito     -0.4537238 -0.2724664 -0.044181438  0.25117597
## otra_tarjeta        -0.4810655 -0.2688641 -0.008099897  0.03745223
## Ratio.ingreso.deuda -0.2314834 -0.6686010 -0.256239894 -0.29465919
##                             PC5         PC6         PC7
## edad                 0.19206436  0.20388851 -0.01792971
## educacion           -0.02231146 -0.33484680 -0.04648568
## años_empleo         -0.20342602 -0.74241210 -0.03965078
## Ingreso             -0.05755393  0.38241128  0.60512553
## Tarjeta_credito      0.75947917 -0.03752756 -0.27683652
## otra_tarjeta        -0.57265469  0.30399509 -0.52390209
## Ratio.ingreso.deuda -0.11479056 -0.23467350  0.52787940

Creamos una nueva variable en este caso “componentes_cli” el cual tendra los datos escalados para que de esta manera tengan todos el mismo valor y se pasara a centrar los datos para que esten mejor organizados y distribuidos

Ademas Usamos la función “prcomp” la cual realiza un analisis de componentes principales en la matriz de datos dada y devuelve los resultados como un objeto

Resumen de las variables componentes

Se realizara un resumen del nuevo data frame con el comando “summary”

summary(componentes_cli)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6
## Standard deviation     1.7563 1.2132 1.0425 0.76051 0.59954 0.54463
## Proportion of Variance 0.4406 0.2103 0.1552 0.08262 0.05135 0.04237
## Cumulative Proportion  0.4406 0.6509 0.8062 0.88878 0.94013 0.98251
##                            PC7
## Standard deviation     0.34992
## Proportion of Variance 0.01749
## Cumulative Proportion  1.00000

Se observa en el resumen que los 3 primeros muestran un porcentaje de varianza del 0.8061 podriamos tomar el valor de PC4 pero su porcentaje de varianza es muy baja por lo cual se descarta

Grafico de la data en cada componente

Se analisa el porcentaje de la data que existe en cada variable

plot(componentes_cli)

Podemos apreciar que en las tres primeras variables (PC1 ,PC2,PC3)se tiene una gran cantidad de data en comparacion de las 4 ultimas

###Grafica de los componentes

biplot(componentes_cli, scale=0.5)

Se emplia la funcion “biplot” para tener un grafico de la data y la catidad de datos que estos toman se puede mejorar mediante el parametro “scale”

###Extraccion de los componentes

Creamos una nueva variable donde asignaremos los componentes guardados en X que estaban en “componentes_cli”

componentes_principales<-componentes_cli$x

Seleccionamos las 3 primeros componentes que serian PC1,PC2,PC3 y las guardamos en “Componentes_principales” para de esta manera solo tener estos 3 componentes en la data

componentes_principales<-componentes_principales[,1:3]

visualizacion de los componentes

head(componentes_principales)
##             PC1         PC2        PC3
## [1,]  0.9273626  0.62187776  0.3306240
## [2,] -3.6059744  1.05601155 -1.1418017
## [3,] -1.8672660 -1.85171269 -0.1929300
## [4,]  1.5335134 -0.09274379  0.4546231
## [5,] -6.6619542  2.26445448 -0.1906138
## [6,] -2.0057321  1.09626357 -0.9815219

#Bibliografia

Análisis de Componentes Principales (ACP) https://www.xlstat.com/es/soluciones/funciones/analisis-de-componentes-principales-acp http://www.estadistica.net/Master-Econometria/Componentes_Principales.pdf Explicación de la prueba de varianzas iguales (https://support.minitab.com/es-mx/minitab/18/help-and-how-to/modeling-statistics/anova/supporting-topics/basics/understanding-test-for-equal-variances/) analisis Multivarianteks(http://www.fuenterrebollo.com/Economicas/ECONOMETRIA/MULTIVARIANTE/FACTORIAL/analisis-factorial.pdf)