1. Introducción

1.1. Variable Compleja.

  • La realidad fenómenica se maniesta como un conjunto de interanciones propias de las partes que lo componen ya sean estos observables o de de forma latente.

  • En general los fenómenos económicos pueden ser descritos por la interacción de un conjunto de variables,en este caso se dice que, esta descrito por una Variable Compleja, es decir que su descripción esta en función de muchas variables, y estas a su vez por una batería de indicadores simples.

  • Al momento de proponer la construcción del Indicador Sintético, debe tenerse claro que Variable Compleja [Fenómeno a describir] es la que pretende medir.

  • La batería de indicadores debe responder a un marco teórico, asociado a dicha variable compleja.

  • Los indicadores deben ser lo más variados posibles, en función de la información disponible, para reflejar todas las aristas del fenómeno a describir

  • Importante: No confundir la definición de variable compleja, aquí propuesta, con la de Variable Compleja usada en matemáticas

1.2. Indicador Multivariado Sintético

  • Constituye la agregación (preferiblemente ponderada) de la batería de indicadores para la construcción de métricas que resumen el comportamiento de la Variable Compleja.

  • Construcción: \[IS_i=\sum_{j=1}^m w_{ij}·F_{ij}\]

    donde:

    \(IS_i\) Indicador Sintético

    \(w_{ij}\) son los ponderadores, que deberán ser generados utilizando técnicas multivariantes, o propuestos a través de metodologías robustas. En la medida de lo posible a través de información estadística.

    \(F_{ij}\) representa los factores o variables latentes formadas por la batería de indicadores, de apego al marco teórico de la variable compleja, la agrupación puede ser indicada de manera exógena o sugerida por el método de agregación, se asume que “\(m\)” es la cantidad de factores presentes en el indicador sintético, que han sido construidos con “\(k\)” indicadores.

La construcción implica el uso de técnicas de asignación de ponderadores, entre ellas dentro del curso se estudiarán: Métodos Objetivos: - Análisis Factorial y Componentes Principales: Generador de ponderadores para variables latentes (agrupación de variables).

  • CRITIC & Entropía: asignación de ponderaciones a indicadores (indicadores simples individuales)

Métodos Subjetivos:

  • Métodos basados en ranking (ordenación subjetiva simple).

  • Métodos basados en comparación (ordenación subjetiva por cuasi-correlación)

  • Método Delphi la ponderación se asigna en función de la experiencia de muchas personas especialistas en la tématica de la variable compleja. Se usa en conjunto con otras técnicas de ponderación subjetiva.

1.3. Normalización

Una de las ideas centrales detrás de la construcción del Indicador Sintético, corresponde a medir el estado de la variable compleja, en ese sentido la Correlación de la bateria de indicadores debe quedar totalmente identificada a priori.

Existen distintas formas de realizar la normalización, pero la más utiliza corresponde a las distancias relativas:

Relación directa:

\[I_{ij}^{dir}=\frac{x_{ij}-min(x_j)}{max(x_j)-min(x_j)} \] Relación inversa: \[I_{ij}^{inv}=\frac{max(x_j)-x_{ij}}{max(x_j)-min(x_j)} \]

De esta forma, se garantiza un recorrido de los valores estandarizados “\(x_{ij}\)” entre 0 y 1, de forma que,cuanto más se aproxime a 1 dicho valor, mayor será la presencia del fenómeno estudiado en el elemento “\(j\)”.

1.4. Resumen

  • El indicador sintético es útil por si mismo, puede usarse para la generación de rankings entre los elementos.

  • Al poder desagregarse en sus factores, pueden hacer comparaciones entre los elementos a ese nivel; normalmente resulta mucho más útil que el índice agregado.

  • Permite realizar el seguimiento longitudinal del fenómeno, realizando las mismas mediciones, es decir que provee una base sólida para demostrar avances o retrocesos en el tema medido.

  • Puede adaptarse a cualquier ámbito de aplicación [balanced Scorecard, indicadores de desarrollo, índices de pobreza, índices de competitividad, indicadores de ventas robustos, Indicador de Riesgos, etc.]

2. Componentes Principales y Análisis Factorial

Dentro de las técnicas multivariantes, la reducción de la dimensión de los datos en el orden las variables, resulta ser especialmente úlil ya que permite agruparlas de manera robusta, y al mismo tiempo garantizando que los componentes (agrupaciones encontradas, denominadas también variables latentes) sean incorrelacionados, es decir por un lado las variables originales representadas en cada componente guardan la máxima correlación entre ellas, pero las variables latentes resultan ser excluyentes entre sí.

2.1. Cálculo de \(V(X)\) y \(R(X)\)

A efectos prácticos, sólo se requiere que todas las variables sean métricas (variables numéricas), pero para los propósitos de elaboración de indicadores, se verificará también el grado de multicolinealidad de la batería de indicadores (variables dentro del dataframe), se denotará en todo momento como \(X\), o matriz de información, y \(\bar{X}\) el vector de medias

Se puede trabajar sobre la matriz de varianza-covarianza de \(X\): \[V(x)=\frac{(X-\bar{X})^t·(X-\bar{X})}{n-1}\] o sobre la matriz de correlación de \(X\): \[R(X)=\frac{Z_X^t·Z_X}{n-1}\] donde \(Z_X\) es la matriz de datos estandarizada (distribución normal: \(z_{x_j}=\frac{x_j-\bar{x_j}}{\sigma_{x_j}}\))

2.2. Ejemplo de Cálculo de \(V(X)\) y \(R(X)\) en R

Para ilustrar el cálculo se usará el siguiente ejemplo:

Adaptado de Moreno, A. B., & Chávez, A. G. (2007). 100 problemas resueltos de estadística multivariante. Delta Publicaciones. ver texto

En el archivo datos_prob_7_3.txt, se puede ver una lista de variables que caracterizan el grado de desarrollo de algunos países del mundo.
Las variables son:
X1 = Tasa de mortalidad infantil por cada 1000 nacidos vivos,
X2 = Porcentaje de mujeres en la población activa,
X3 = Producto Nacional Bruto (PNB) per capita en 1995 (en $),
X4 = Producción de electricidad (en millones de kw/h),
X5 = Promedio de líneas telefónicas por cada 1000 habitantes,
X6 = Consumo de agua per capita en m3 (de 1980 a 1995),
X7 = Consumo de energía per capita en 1994, X8 = Emisión de CO2 per capita en 1992 (en Tm).

*Nota por el momento no se normalizarán las variables en el esquema 0-1, que se vio en el apartado introductorio.

2.2.1 Matriz de Información: \(X\)

library(readr)
library(kableExtra)
url_link<-"http://halweb.uc3m.es/esp/Personal/personas/agrane/libro/ficheros_datos/capitulo_7/datos_prob_7_3.txt"
mat_X<-read_table2(url_link,col_names = FALSE)

mat_X %>% head() %>% 
  kable(caption ="Matriz de información:" ,align = "c",digits = 6) %>% 
  kable_material(html_font = "sans-serif")
Matriz de información:
X1 X2 X3 X4 X5 X6 X7 X8
30 41 670 3903 12 94 341 1.2
124 46 410 955 6 57 89 0.5
95 48 370 6 5 26 20 0.1
90 43 680 435 8 20 331 1.6
112 41 100 1293 2 51 22 0.1
73 51 390 6115 4 35 93 0.2

2.2.2. Cálculo de \(V(X)\):

  • Cálculo “Manual”
library(dplyr)
library(kableExtra)
centrado<-function(x){
  x-mean(x)
}
Xcentrada<-apply(X = mat_X,MARGIN = 2,centrado)
Xcentrada %>% head() %>% 
  kable(caption ="Matriz de Variables centradas:",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif")
Matriz de Variables centradas:
X1 X2 X3 X4 X5 X6 X7 X8
-49.67 -0.67 303.89 1463.5 2.94 -60.17 196.72 0.71
44.33 4.33 43.89 -1484.5 -3.06 -97.17 -55.28 0.01
15.33 6.33 3.89 -2433.5 -4.06 -128.17 -124.28 -0.39
10.33 1.33 313.89 -2004.5 -1.06 -134.17 186.72 1.11
32.33 -0.67 -266.11 -1146.5 -7.06 -103.17 -122.28 -0.39
-6.67 9.33 23.89 3675.5 -5.06 -119.17 -51.28 -0.29
n_obs<-nrow(mat_X)
mat_V<-t(Xcentrada)%*%Xcentrada/(n_obs-1) 
mat_V %>% kable(caption ="Cálculo de V(X) forma manual:" ,
                align = "c",
                digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Cálculo de V(X) forma manual:
X1 X2 X3 X4 X5 X6 X7 X8
X1 716.12 45.06 -2689.61 -16082.06 -121.63 -1019.06 -1844.37 -5.15
X2 45.06 46.94 -144.31 2756.71 -24.63 -938.41 -205.25 -0.42
X3 -2689.61 -144.31 36389.87 123889.71 740.82 838.33 17499.38 73.48
X4 -16082.06 2756.71 123889.71 5736372.38 3078.97 6672.44 140343.50 412.79
X5 -121.63 -24.63 740.82 3078.97 51.47 405.58 565.22 1.59
X6 -1019.06 -938.41 838.33 6672.44 405.58 26579.56 3149.77 -2.96
X7 -1844.37 -205.25 17499.38 140343.50 565.22 3149.77 16879.39 64.51
X8 -5.15 -0.42 73.48 412.79 1.59 -2.96 64.51 0.28
  • Cálculo con R base
library(dplyr)
library(kableExtra)
cov(mat_X) %>% 
  kable(caption="Cálculo de V(X) a través de R base",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Cálculo de V(X) a través de R base
X1 X2 X3 X4 X5 X6 X7 X8
X1 716.12 45.06 -2689.61 -16082.06 -121.63 -1019.06 -1844.37 -5.15
X2 45.06 46.94 -144.31 2756.71 -24.63 -938.41 -205.25 -0.42
X3 -2689.61 -144.31 36389.87 123889.71 740.82 838.33 17499.38 73.48
X4 -16082.06 2756.71 123889.71 5736372.38 3078.97 6672.44 140343.50 412.79
X5 -121.63 -24.63 740.82 3078.97 51.47 405.58 565.22 1.59
X6 -1019.06 -938.41 838.33 6672.44 405.58 26579.56 3149.77 -2.96
X7 -1844.37 -205.25 17499.38 140343.50 565.22 3149.77 16879.39 64.51
X8 -5.15 -0.42 73.48 412.79 1.59 -2.96 64.51 0.28

2.2.3. Cálculo de \(R(X)\)

  • Cálculo “Manual”
Zx<-scale(x = mat_X,center =TRUE)
Zx %>% head() %>% 
  kable(caption ="Matriz de Variables Estandarizadas:",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif")
Matriz de Variables Estandarizadas:
X1 X2 X3 X4 X5 X6 X7 X8
-1.86 -0.10 1.59 0.61 0.41 -0.37 1.51 1.34
1.66 0.63 0.23 -0.62 -0.43 -0.60 -0.43 0.02
0.57 0.92 0.02 -1.02 -0.57 -0.79 -0.96 -0.73
0.39 0.19 1.65 -0.84 -0.15 -0.82 1.44 2.09
1.21 -0.10 -1.39 -0.48 -0.98 -0.63 -0.94 -0.73
-0.25 1.36 0.13 1.53 -0.70 -0.73 -0.39 -0.54
n_obs<-nrow(mat_X)
mat_R<-t(Zx)%*%Zx/(n_obs-1) 
mat_R %>% kable(caption ="Cálculo de R(X) forma manual:" ,
                align = "c",
                digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Cálculo de R(X) forma manual:
X1 X2 X3 X4 X5 X6 X7 X8
X1 1.00 0.25 -0.53 -0.25 -0.63 -0.23 -0.53 -0.36
X2 0.25 1.00 -0.11 0.17 -0.50 -0.84 -0.23 -0.12
X3 -0.53 -0.11 1.00 0.27 0.54 0.03 0.71 0.73
X4 -0.25 0.17 0.27 1.00 0.18 0.02 0.45 0.32
X5 -0.63 -0.50 0.54 0.18 1.00 0.35 0.61 0.42
X6 -0.23 -0.84 0.03 0.02 0.35 1.00 0.15 -0.03
X7 -0.53 -0.23 0.71 0.45 0.61 0.15 1.00 0.93
X8 -0.36 -0.12 0.73 0.32 0.42 -0.03 0.93 1.00
  • Cálculo usando R base
library(dplyr)
library(kableExtra)
cor(mat_X) %>% 
  kable(caption="Cálculo de R(X) a través de R base",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Cálculo de R(X) a través de R base
X1 X2 X3 X4 X5 X6 X7 X8
X1 1.00 0.25 -0.53 -0.25 -0.63 -0.23 -0.53 -0.36
X2 0.25 1.00 -0.11 0.17 -0.50 -0.84 -0.23 -0.12
X3 -0.53 -0.11 1.00 0.27 0.54 0.03 0.71 0.73
X4 -0.25 0.17 0.27 1.00 0.18 0.02 0.45 0.32
X5 -0.63 -0.50 0.54 0.18 1.00 0.35 0.61 0.42
X6 -0.23 -0.84 0.03 0.02 0.35 1.00 0.15 -0.03
X7 -0.53 -0.23 0.71 0.45 0.61 0.15 1.00 0.93
X8 -0.36 -0.12 0.73 0.32 0.42 -0.03 0.93 1.00

2.2.4 Versiones gráficas de \(R(X)\)

Pueden ser especialmente útiles en la presentación de reportes, además de proveer una vista rápida de algunas características propias de la correlación entre las variables.

2.2.4.1 Usando el paquete PerformanceAnalytics

library(PerformanceAnalytics)
chart.Correlation(as.matrix(mat_X),histogram = TRUE,pch=12)

2.2.4.2. Usando el paquete corrplot

más sobre el paquete corrplot

library(corrplot)
library(grDevices)
library(Hmisc)
Mat_R<-rcorr(as.matrix(mat_X))
corrplot(Mat_R$r,
         p.mat = Mat_R$r,
         type="upper",
         tl.col="black",
         tl.srt = 20,
         pch.col = "blue",
         insig = "p-value",
         sig.level = -1,
         col = terrain.colors(100))

2.3. Extracción de los Componentes

La Primera componente Principal, se expreza como la combinación lineal de las variables originales \[C_{1j}=a_{11}·x_{11}+a_{12}·x_{12}+a_{13}·x_{13}+...+a_{1n}·x_{1n}\] Matricialmente se tiene que:

\[C_1=X·a\] Sí la matriz de información se encuentra normalizada, entonces: \[C_1=Z·a\] Entonces la varianza de \(C_1\) se puede escribir como: \[ V(C_1)=\frac{ \sum_{j=1}^{n} C_1^2}{n-1}\] Matricialmente se tiene que:

\[V(C_1)=\frac{{C_1}^{t}·C_1}{n-1}= \frac{(Z·a)^{t}·(Z·a)}{n-1}=\frac{a^t·Z^t·Z·a}{n-1}=a^t·R(X)·a\] Deben elegirse los pesos \(a\), de manera tal que \(V(C_1)\) sea máxima, y \(a\) debe ser de longitud unitaria, es decir de norma 1. Por lo tanto el problema se reduce a: \[ \text{Max } a^t·R(X)·a\] \[\text{s.a } a^t·a=1\] Aplicando la técnica de los multiplicadores de Lagrange:

\[L= a^t·R(X)·a-\lambda·(a^t·a-1)\] Aplicando la condición de primer orden: \[ \frac{\partial L}{\partial a}=2·R(x)·a-\lambda·2·a=0\] \[ \frac{\partial L}{\partial \lambda}=a^t·a-1=0 \]

Lo que implica que:

\[[R(x)-\lambda·I]·a=0 \] \[a^t·a=1\] Es decir encontrando el máximo autovalor de \(R(X)\) y el respectivo autovector (valores de \(a\)), queda resuelto el problema de maximización.

De la misma manera se encuentran el resto de componentes.

En general para encontrar la totalidad de los componentes principales, se deberán calcular los autovalores de \(R(X)\) y los autovalores para cada uno de ellos.

2.3.1. Ejemplo de extracción.

  • Cálculo “manual” de los componentes

Siguiendo el ejemplo de los datos de “Desarrollo”, se encontraran todos los componentes de la batería de indicadores (dataframe):

library(kableExtra)
library(dplyr)
library(Hmisc)
Rx<-mat_X %>% as.matrix() %>% rcorr()
Rx$r %>% kable(caption="Matriz R(X)",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Matriz R(X)
X1 X2 X3 X4 X5 X6 X7 X8
X1 1.00 0.25 -0.53 -0.25 -0.63 -0.23 -0.53 -0.36
X2 0.25 1.00 -0.11 0.17 -0.50 -0.84 -0.23 -0.12
X3 -0.53 -0.11 1.00 0.27 0.54 0.03 0.71 0.73
X4 -0.25 0.17 0.27 1.00 0.18 0.02 0.45 0.32
X5 -0.63 -0.50 0.54 0.18 1.00 0.35 0.61 0.42
X6 -0.23 -0.84 0.03 0.02 0.35 1.00 0.15 -0.03
X7 -0.53 -0.23 0.71 0.45 0.61 0.15 1.00 0.93
X8 -0.36 -0.12 0.73 0.32 0.42 -0.03 0.93 1.00
Rx$P %>% kable(caption="p-values de R(X)",
        align = "c",
        digits = 2) %>% 
  kable_classic_2(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
p-values de R(X)
X1 X2 X3 X4 X5 X6 X7 X8
X1 NA 0.33 0.02 0.32 0.00 0.35 0.02 0.14
X2 0.33 NA 0.66 0.51 0.03 0.00 0.36 0.65
X3 0.02 0.66 NA 0.28 0.02 0.92 0.00 0.00
X4 0.32 0.51 0.28 NA 0.48 0.95 0.06 0.19
X5 0.00 0.03 0.02 0.48 NA 0.16 0.01 0.08
X6 0.35 0.00 0.92 0.95 0.16 NA 0.56 0.89
X7 0.02 0.36 0.00 0.06 0.01 0.56 NA 0.00
X8 0.14 0.65 0.00 0.19 0.08 0.89 0.00 NA
  • Descomposición de autovalores y autovectores
library(stargazer)
descomposicion<-eigen(Rx$r)
t(descomposicion$values) %>% kable(caption="Autovalores de R(X)",
        align = "c",
        digits = 2) %>% 
  kable_classic_2(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Autovalores de R(X)
3.75 1.93 0.84 0.72 0.34 0.31 0.1 0.01
descomposicion$vectors %>% kable(caption="Autovectores de R(X)",
        align = "c",
        digits = 2) %>% 
  kable_classic_2(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Autovectores de R(X)
-0.37 -0.05 -0.03 0.71 -0.42 0.41 0.12 0.06
-0.22 -0.61 0.05 -0.24 0.05 0.01 0.70 -0.15
0.41 -0.20 -0.27 -0.02 0.36 0.75 -0.05 0.11
0.22 -0.29 0.88 0.04 -0.08 0.16 -0.23 -0.06
0.41 0.18 -0.09 -0.35 -0.75 0.18 0.19 -0.18
0.18 0.61 0.30 0.21 0.32 0.09 0.57 -0.18
0.47 -0.17 -0.01 0.28 -0.09 -0.34 0.26 0.69
0.41 -0.27 -0.21 0.45 0.04 -0.29 -0.07 -0.65
  • Cálculo usando R:
library(dplyr)
library(factoextra)
library(kableExtra)
library(stargazer)
library(ggplot2)
options(scipen = 99999)
PC<-princomp(x = mat_X,cor = TRUE,fix_sign = FALSE)
factoextra::get_eig(PC) %>% kable(caption="Resumen de PCA",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("hover"))
Resumen de PCA
eigenvalue variance.percent cumulative.variance.percent
Dim.1 3.75 46.92 46.92
Dim.2 1.93 24.11 71.03
Dim.3 0.84 10.45 81.48
Dim.4 0.72 9.04 90.52
Dim.5 0.34 4.26 94.77
Dim.6 0.31 3.81 98.59
Dim.7 0.10 1.24 99.83
Dim.8 0.01 0.17 100.00
fviz_eig(PC,
         choice = "eigenvalue",
         barcolor = "red",
         barfill = "red",
         addlabels = TRUE, 
       )+labs(title = "Gráfico de Sedimentación",subtitle = "Usando princomp, con Autovalores")+
  xlab(label = "Componentes")+
  ylab(label = "Autovalores")+geom_hline(yintercept = 1)

fviz_eig(PC,
         choice = "variance",
         barcolor = "green",
         barfill = "green",
         addlabels = TRUE,
       )+labs(title = "Gráfico de Sedimentación",
              subtitle = "Usando princomp, con %Varianza Explicada")+
  xlab(label = "Componentes")+
  ylab(label = "%Varianza")

  • Correlación de los componentes con las variables: \(r_{ij}=a_j·\sqrt \lambda_j\)
library(dplyr)
library(kableExtra)
raiz_lambda<-as.matrix(sqrt(descomposicion$values))
autovectores<-descomposicion$vectors
corr_componentes_coordenadas<-vector(mode = "list")
for(j in 1:8){raiz_lambda[j]*autovectores[,j]->corr_componentes_coordenadas[[j]]}
corr_componentes_coordenadas %>% bind_cols()->corr_componentes_coordenadas
names(corr_componentes_coordenadas)<-paste0("Comp",1:8)
corr_componentes_coordenadas %>% as.data.frame() %>% 
  kable(caption="Correlación de X con las componentes",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Correlación de X con las componentes
Comp1 Comp2 Comp3 Comp4 Comp5 Comp6 Comp7 Comp8
-0.72 -0.06 -0.03 0.60 -0.25 0.22 0.04 0.01
-0.43 -0.85 0.04 -0.20 0.03 0.01 0.22 -0.02
0.80 -0.28 -0.25 -0.02 0.21 0.42 -0.02 0.01
0.42 -0.40 0.81 0.03 -0.05 0.09 -0.07 -0.01
0.80 0.25 -0.08 -0.29 -0.44 0.10 0.06 -0.02
0.34 0.84 0.27 0.18 0.19 0.05 0.18 -0.02
0.91 -0.23 -0.01 0.24 -0.05 -0.19 0.08 0.08
0.80 -0.38 -0.20 0.38 0.02 -0.16 -0.02 -0.08
  • Usando Facto Extra
library(dplyr)
library(factoextra)
library(kableExtra)
variables_pca<-get_pca_var(PC)
variables_pca$coord%>% 
  kable(caption="Correlación de X con las componentes, usando factoextra",
        align = "c",
        digits = 2) %>% 
  kable_material(html_font = "sans-serif") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
Correlación de X con las componentes, usando factoextra
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7 Dim.8
X1 -0.72 -0.06 -0.03 0.60 0.25 0.22 0.04 0.01
X2 -0.43 -0.85 0.04 -0.20 -0.03 0.01 0.22 -0.02
X3 0.80 -0.28 -0.25 -0.02 -0.21 0.42 -0.02 0.01
X4 0.42 -0.40 0.81 0.03 0.05 0.09 -0.07 -0.01
X5 0.80 0.25 -0.08 -0.29 0.44 0.10 0.06 -0.02
X6 0.34 0.84 0.27 0.18 -0.19 0.05 0.18 -0.02
X7 0.91 -0.23 -0.01 0.24 0.05 -0.19 0.08 0.08
X8 0.80 -0.38 -0.20 0.38 -0.02 -0.16 -0.02 -0.08
  • Representación Gráfica de las correlaciones en los ejes de los componentes
fviz_pca_var(PC,repel = TRUE,axes = c(1,2))

fviz_pca_var(PC,repel = TRUE,axes = c(3,4))

fviz_pca_var(PC,repel = TRUE,axes = c(5,6))

fviz_pca_var(PC,repel = TRUE,axes = c(7,8))

  • Representación alternativa:
library(corrplot)
corrplot(variables_pca$coord,is.corr = FALSE,method = "square",addCoef.col="black",number.cex = 0.75)

2.4 Análisis Factorial.

En el caso anterior se encontraron unas variables “sintéticas” que pueden sustituir a las variables originales, pero aún no se ha reducido la dimensión de la información. en este apartado se explicarán las características de la técnica de Componentes Principales, en cuanto a su uso dentro del Análisis Factorial.

  • Modelo Factorial. El modelo factorial permite realizar la agrupación de las variables, garantizando la reducción de la dimensión del dataframe a nivel de variables.
  • Hay “p” variables y “n” casos (la matriz X es de dimensión nxk: \(X_{n\times p}\))
  • Hay “k” Factores comunes, en menor cantidad que las variables originales: (\(k<p\))
  • los \(F_j\) se denominan factores comunes al conjunto de variables del modelo y los \(\epsilon_j\) representan los factores específicos de cada variable.
  • los \(l_{ij}\) se denominan cargas factoriales \[ \begin{gather*} X_1=l_{11}·F_1+l_{12}·F_2+...+l_{1k}·F_k+\epsilon_1\\ X_2=l_{21}·F_1+l_{22}·F_2+...+l_{2k}·F_k+\epsilon_2\\ \vdots\\ X_p=l_{p1}·F_1+l_{p2}·F_2+...+l_{pk}·F_k+\epsilon_p\\ \end{gather*}\]

matricialmente se pueden escribir como: \[\begin{bmatrix} X_1\\ X_2\\ \vdots\\ X_p \end{bmatrix}=\begin{bmatrix} l_{11} & l_{12} & \cdots & l_{1k}\\ l_{21} & l_{22} & \cdots & l_{2k}\\ \vdots & \vdots & \vdots & \vdots\\ l_{p1} & l_{p2} & \cdots & l_{pk} \end{bmatrix}· \begin{bmatrix} F_1\\ F_2\\ \vdots\\ F_k \end{bmatrix} +\begin{bmatrix} \epsilon_1\\ \epsilon_2\\ \vdots\\ \epsilon_p\\ \end{bmatrix} \]

\[X=L·F+\epsilon \] Los supuestos del modelo son los siguientes:

  • El valor esperado de las varianzas especificas son nulas: \[E[\epsilon]=0\]
  • El valor esperado de los factores es nulo: \[E[F]=0\]
  • Los factores son independientes entre si (factores ortogonales): \[E[F·F']=I \]
  • Las varianzas especificas son independientes entre si: \[E[\epsilon·\epsilon']=\Omega \]
    con \(\Omega\) como matriz diagonal.
  • La varianza común no esta correlacionada con la varianza especifica:\[E[F·\epsilon']=0\]

Cálculo de las comunalidades y especificidades: Tipificando la matriz de información, la expresión matricial queda como: \(Z=L·F+\epsilon\) De la definición de la matriz de correlación se tiene que: \[R_p=E[Z·Z']\] Sustituyendo \(Z=L·F+\epsilon\) se tiene que: \[R_p=E[(L·F+\epsilon)·(L·F+\epsilon)']\] Expandiendo dentro del operador de expectativas: \[R_p=E[L·F·F'L'+L·F·\epsilon'+(L·F·\epsilon')'+\epsilon·\epsilon'] \] Aplicando el operador de expectativas: \[R_p=L·E[F·F']·L'+E[L·F·\epsilon']+E[(L·F·\epsilon')'+E[\epsilon·\epsilon']\] Aplicando los supuestos se tiene que: \[R_p=L·I·L'+0+0+\Omega\] Por lo que se tiene que: \[R_p=L·L'+\Omega\] Es decir en forma extensiva: \[\begin{bmatrix} 1 & \rho_{12} & \rho_{13} & \cdots & \rho_{1p}\\ \rho_{21} & 1 & \rho_{23} & \cdots & \rho_{2p}\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ \rho_{p1} & \rho_{p2} & \rho_{p3} & \cdots & 1 \end{bmatrix}=\begin{bmatrix} l_{11} & l_{12} & \cdots & l_{1k}\\ l_{21} & l_{22} & \cdots & l_{2k}\\ \vdots & \vdots & \vdots & \vdots\\ l_{p1} & l_{p2} & \cdots & l_{pk} \end{bmatrix}·\begin{bmatrix} l_{11} & l_{12} & \cdots & l_{1k}\\ l_{21} & l_{22} & \cdots & l_{2k}\\ \vdots & \vdots & \vdots & \vdots\\ l_{p1} & l_{p2} & \cdots & l_{pk} \end{bmatrix}'+ \begin{bmatrix} \omega_1^2 & 0 & \cdots & 0\\ 0 & \omega_2^2 & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & \omega_p^2 \end{bmatrix}\]

Al multiplicar \(L·L'\), sumar \(\Omega\) e igualar los elementos de la diagonal principal, se tiene:

\[1=l_{j1}^2+l_{j2}^2+\cdots+l_{jp}^2+\omega_j^2 \] resumiendo \(h_j^2=l_{j1}^2+l_{j2}^2+\cdots+l_{jp}^2\) Se tiene que: \[ 1=h_j^2+\omega_j^2 \] Donde:

  • \(h_j^2\) se denomina comunalidad, o varianza común de \(X_j\) derivada de los factores comunes (los \(F_j\))

  • \(\omega_j^2\) se denomina especificidad, o varianza especifíca, ocasionada por el factor especifico de la variable el \(\epsilon_j\)

2.4.1 Extracción de los factores a través de Componentes Principales.

Si se aplica la descomposición SVD \[R_p=V·\Lambda·V' \]
Con \(\Lambda\) como la matriz diagonal de autovalores y \(V\) como matriz de autovectores
Puede escribirse también así: \[R_p=V·\Lambda^{1/2}·\Lambda^{1/2}·V' \] Definiendo \(\phi=V·\Lambda^{1/2}\), entonces puede reescribirse así: \[R_p=\phi·\phi'\] Con \(\phi\) como la correlación de las \(X\) con sus Componentes Principales igualando a la expresión del modelo factorial se tiene que:

\[\phi·\phi'=L·L'+\Omega \] Reteniendo las primeras “k” componentes, la varianza normalizada se puede obtener que:
\(h_j^2=\color{green}{l_{j1}^2+l_{j2}^2+\cdots+l_{jk}^2}\)
\(\omega_j^2=\color{red}{l_{j(k+1)}^2+\cdots+l_{jp}^2}\)

y de be cumplirse que:

\(1=\color{green}{l_{j1}^2+l_{j2}^2+\cdots+l_{jk}^2}+\color{red}{l_{j(k+1)}^2+\cdots+l_{jp}^2}\)

2.4.2 Análisis Factorial en R

library(psych)
library(corrplot)
library(dplyr)
#Modelo de 2 Factores (sin rotar)
numero_de_factores<-2
modelo_2_factores<-principal(r = Rx$r,
                             nfactors = numero_de_factores,
                             covar = FALSE,
                             rotate = "none")
modelo_2_factores
## Principal Components Analysis
## Call: principal(r = Rx$r, nfactors = numero_de_factores, rotate = "none", 
##     covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      PC1   PC2   h2    u2 com
## X1 -0.72  0.06 0.53 0.472 1.0
## X2 -0.43  0.85 0.91 0.093 1.5
## X3  0.80  0.28 0.72 0.280 1.2
## X4  0.42  0.40 0.33 0.668 2.0
## X5  0.80 -0.25 0.70 0.302 1.2
## X6  0.34 -0.84 0.82 0.176 1.3
## X7  0.91  0.23 0.89 0.108 1.1
## X8  0.80  0.38 0.78 0.217 1.4
## 
##                        PC1  PC2
## SS loadings           3.75 1.93
## Proportion Var        0.47 0.24
## Cumulative Var        0.47 0.71
## Proportion Explained  0.66 0.34
## Cumulative Proportion 0.66 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.09 
## 
## Fit based upon off diagonal values = 0.96
correlaciones_modelo<-variables_pca$coord


corrplot(correlaciones_modelo[,1:numero_de_factores],
         is.corr = FALSE,
         method = "square",addCoef.col="black",number.cex = 0.75)

library(psych)
library(corrplot)
library(dplyr)
#Modelo de 3 Factores (sin rotar)
numero_de_factores<-3
modelo_3_factores<-principal(r = Rx$r,
                             nfactors = numero_de_factores,
                             covar = FALSE,
                             rotate = "none")
modelo_3_factores
## Principal Components Analysis
## Call: principal(r = Rx$r, nfactors = numero_de_factores, rotate = "none", 
##     covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      PC1   PC2   PC3   h2    u2 com
## X1 -0.72  0.06 -0.03 0.53 0.472 1.0
## X2 -0.43  0.85  0.04 0.91 0.092 1.5
## X3  0.80  0.28 -0.25 0.78 0.219 1.4
## X4  0.42  0.40  0.81 0.98 0.017 2.0
## X5  0.80 -0.25 -0.08 0.71 0.295 1.2
## X6  0.34 -0.84  0.27 0.90 0.101 1.6
## X7  0.91  0.23 -0.01 0.89 0.108 1.1
## X8  0.80  0.38 -0.20 0.82 0.179 1.6
## 
##                        PC1  PC2  PC3
## SS loadings           3.75 1.93 0.84
## Proportion Var        0.47 0.24 0.10
## Cumulative Var        0.47 0.71 0.81
## Proportion Explained  0.58 0.30 0.13
## Cumulative Proportion 0.58 0.87 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 3 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.08 
## 
## Fit based upon off diagonal values = 0.97
correlaciones_modelo<-variables_pca$coord


corrplot(correlaciones_modelo[,1:numero_de_factores],
         is.corr = FALSE,
         method = "square",addCoef.col="black",number.cex = 0.75)

library(psych)
library(corrplot)
library(dplyr)
#Modelo de 4 Factores (sin rotar)
numero_de_factores<-4
modelo_4_factores<-principal(r = Rx$r,
                             nfactors = numero_de_factores,
                             covar = FALSE,
                             rotate = "none")
modelo_4_factores
## Principal Components Analysis
## Call: principal(r = Rx$r, nfactors = numero_de_factores, rotate = "none", 
##     covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      PC1   PC2   PC3   PC4   h2    u2 com
## X1 -0.72  0.06 -0.03  0.60 0.89 0.112 2.0
## X2 -0.43  0.85  0.04 -0.20 0.95 0.050 1.6
## X3  0.80  0.28 -0.25 -0.02 0.78 0.219 1.4
## X4  0.42  0.40  0.81  0.03 0.98 0.016 2.0
## X5  0.80 -0.25 -0.08 -0.29 0.79 0.208 1.5
## X6  0.34 -0.84  0.27  0.18 0.93 0.070 1.7
## X7  0.91  0.23 -0.01  0.24 0.95 0.052 1.3
## X8  0.80  0.38 -0.20  0.38 0.97 0.032 2.1
## 
##                        PC1  PC2  PC3  PC4
## SS loadings           3.75 1.93 0.84 0.72
## Proportion Var        0.47 0.24 0.10 0.09
## Cumulative Var        0.47 0.71 0.81 0.91
## Proportion Explained  0.52 0.27 0.12 0.10
## Cumulative Proportion 0.52 0.78 0.90 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 4 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.04 
## 
## Fit based upon off diagonal values = 0.99
correlaciones_modelo<-variables_pca$coord


corrplot(correlaciones_modelo[,1:numero_de_factores],
         is.corr = FALSE,
         method = "square",addCoef.col="black",number.cex = 0.75)

2.4.5 Rotación de la Solución

Esta operación se implementa para mejorar la interpretación de la extracción (solución) propuesta. Hay dos tipos de rotación: Ortogonal y Oblicua, la primera mantiene la independencia entre los factores, en cambio la segunda no.

Para efectos de la agrupación de variables, se implementará la rotación ortogonal VARIMAX, propuesta por Kaiser, ya que permite obtener factores independientes y mantener la estructura de varianza de la solución original.

library(psych)
library(corrplot)
library(dplyr)
#Modelo de 2 Factores (Rotado)
numero_de_factores<-2
modelo_2_factores<-principal(r = Rx$r,
                             nfactors = numero_de_factores,
                             covar = FALSE,
                             rotate = "varimax")
modelo_2_factores
## Principal Components Analysis
## Call: principal(r = Rx$r, nfactors = numero_de_factores, rotate = "varimax", 
##     covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      RC1   RC2   h2    u2 com
## X1 -0.63 -0.36 0.53 0.472 1.6
## X2 -0.04 -0.95 0.91 0.093 1.0
## X3  0.84  0.08 0.72 0.280 1.0
## X4  0.54 -0.19 0.33 0.668 1.2
## X5  0.62  0.56 0.70 0.302 2.0
## X6 -0.03  0.91 0.82 0.176 1.0
## X7  0.93  0.16 0.89 0.108 1.1
## X8  0.88 -0.01 0.78 0.217 1.0
## 
##                        RC1  RC2
## SS loadings           3.45 2.24
## Proportion Var        0.43 0.28
## Cumulative Var        0.43 0.71
## Proportion Explained  0.61 0.39
## Cumulative Proportion 0.61 1.00
## 
## Mean item complexity =  1.2
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.09 
## 
## Fit based upon off diagonal values = 0.96
correlaciones_modelo<-variables_pca$coord
correlaciones_modelo_rotada<-varimax(correlaciones_modelo[,1:numero_de_factores])$loadings

corrplot(correlaciones_modelo_rotada[,1:numero_de_factores],
         is.corr = FALSE,
         method = "square",
         addCoef.col="black",
         number.cex = 0.75)

###############################
#Modelo de 3 Factores (Rotado)
numero_de_factores<-3
modelo_3_factores<-principal(r = Rx$r,
                             nfactors = numero_de_factores,
                             covar = FALSE,
                             rotate = "varimax")
modelo_3_factores
## Principal Components Analysis
## Call: principal(r = Rx$r, nfactors = numero_de_factores, rotate = "varimax", 
##     covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      RC1   RC2   RC3   h2    u2 com
## X1 -0.62 -0.33 -0.18 0.53 0.472 1.7
## X2 -0.15 -0.92  0.18 0.91 0.092 1.1
## X3  0.88 -0.01  0.04 0.78 0.219 1.0
## X4  0.23 -0.06  0.96 0.98 0.017 1.1
## X5  0.67  0.51  0.04 0.71 0.295 1.9
## X6 -0.03  0.94  0.09 0.90 0.101 1.0
## X7  0.90  0.12  0.27 0.89 0.108 1.2
## X8  0.89 -0.09  0.12 0.82 0.179 1.1
## 
##                        RC1  RC2  RC3
## SS loadings           3.30 2.13 1.09
## Proportion Var        0.41 0.27 0.14
## Cumulative Var        0.41 0.68 0.81
## Proportion Explained  0.51 0.33 0.17
## Cumulative Proportion 0.51 0.83 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 3 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.08 
## 
## Fit based upon off diagonal values = 0.97
correlaciones_modelo<-variables_pca$coord
correlaciones_modelo_rotada<-varimax(correlaciones_modelo[,1:numero_de_factores],
                                     normalize = TRUE)$loadings

corrplot(correlaciones_modelo_rotada[,1:numero_de_factores],
         is.corr = FALSE,
         method = "square",
         addCoef.col="black",
         number.cex = 0.75)

###############################
#Modelo de 4 Factores (Rotado)
numero_de_factores<-4
modelo_4_factores<-principal(r = Rx$r,
                             nfactors = numero_de_factores,
                             covar = FALSE,
                             rotate = "varimax")
modelo_4_factores
## Principal Components Analysis
## Call: principal(r = Rx$r, nfactors = numero_de_factores, rotate = "varimax", 
##     covar = FALSE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      RC1   RC2   RC4   RC3   h2    u2 com
## X1 -0.22 -0.10 -0.90 -0.14 0.89 0.112 1.2
## X2 -0.12 -0.94 -0.16  0.18 0.95 0.050 1.2
## X3  0.76 -0.04  0.45  0.03 0.78 0.219 1.6
## X4  0.22 -0.06  0.11  0.96 0.98 0.016 1.1
## X5  0.38  0.37  0.72  0.01 0.79 0.208 2.1
## X6 -0.06  0.95  0.12  0.10 0.93 0.070 1.1
## X7  0.88  0.15  0.29  0.27 0.95 0.052 1.5
## X8  0.97  0.00  0.10  0.12 0.97 0.032 1.1
## 
##                        RC1  RC2  RC4  RC3
## SS loadings           2.55 1.95 1.67 1.07
## Proportion Var        0.32 0.24 0.21 0.13
## Cumulative Var        0.32 0.56 0.77 0.91
## Proportion Explained  0.35 0.27 0.23 0.15
## Cumulative Proportion 0.35 0.62 0.85 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 4 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.04 
## 
## Fit based upon off diagonal values = 0.99
correlaciones_modelo<-variables_pca$coord
correlaciones_modelo_rotada<-varimax(correlaciones_modelo[,1:numero_de_factores],
                                     normalize = TRUE)$loadings

corrplot(correlaciones_modelo_rotada[,1:numero_de_factores],
         is.corr = FALSE,
         method = "square",
         addCoef.col="black",
         number.cex = 0.75)

2.4.6 Verificación de supuestos: Prueba de Barlett y KMO.

  • Prueba de Esfericidad de Barlett

Esta prueba identifica si a nivel poblacional, las variables presentan independencia estadistica (son ortogonales), a través de la matriz de correlación muestral R, y se verifica si a nivel poblacional dicha matriz de correlación corresponde a una matriz identidad, las hipótesis de la prueba son las siguientes:

\[\left\{\begin{matrix}H_0:&R\sim I\ \\H_1:&R\nsim I\\\end{matrix}\right. \]

Si no se rechaza H0, no hay evidencia de multicolinealidad, caso contrario Si se rechaza H0 hay evidencia de multicolinealidad El contraste se realiza a través de:

\[\chi_{B}^2=-\left(n-1-\frac{2·p+5}{6}\right)\ln{\left(\left|R\right|\right)} \]

con \(gl=p(p−1)/2\)

Rechazar \(H_0\) si \(\chi_{B}^2 \geq V.C.\), o si \(p \le \alpha\)

library(psych)
options(scipen = 99999)
Barlett<-cortest.bartlett(mat_X)
## R was not square, finding R from data
print(Barlett)
## $chisq
## [1] 99.52973
## 
## $p.value
## [1] 0.0000000006035519
## 
## $df
## [1] 28
  • Prueba de adecuación muestral de Kaiser Meyer Olkin (KMO) Se considerará adecuado el uso del Análisis Factorial si KMO>0.5, de lo contrario no. Usando: Psych
library(psych)
KMO<-KMO(mat_X)
print(KMO)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = mat_X)
## Overall MSA =  0.5
## MSA for each item = 
##   X1   X2   X3   X4   X5   X6   X7   X8 
## 0.75 0.42 0.62 0.53 0.50 0.35 0.51 0.43

Usando rela

library(rela)
KMO<-paf(as.matrix(mat_X))$KMO
print(KMO)
## [1] 0.49718