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
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).
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.
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\)”.
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.]
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í.
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}}\))
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.
library(readr)
library(kableExtra)
"http://halweb.uc3m.es/esp/Personal/personas/agrane/libro/ficheros_datos/capitulo_7/datos_prob_7_3.txt"
url_link<-read_table2(url_link,col_names = FALSE)
mat_X<-
%>% head() %>%
mat_X kable(caption ="Matriz de información:" ,align = "c",digits = 6) %>%
kable_material(html_font = "sans-serif")
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 |
library(dplyr)
library(kableExtra)
function(x){
centrado<--mean(x)
x
}apply(X = mat_X,MARGIN = 2,centrado)
Xcentrada<-%>% head() %>%
Xcentrada kable(caption ="Matriz de Variables centradas:",
align = "c",
digits = 2) %>%
kable_material(html_font = "sans-serif")
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 |
nrow(mat_X)
n_obs<-t(Xcentrada)%*%Xcentrada/(n_obs-1)
mat_V<-%>% kable(caption ="Cálculo de V(X) forma manual:" ,
mat_V align = "c",
digits = 2) %>%
kable_material(html_font = "sans-serif") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
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 |
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"))
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 |
scale(x = mat_X,center =TRUE)
Zx<-%>% head() %>%
Zx kable(caption ="Matriz de Variables Estandarizadas:",
align = "c",
digits = 2) %>%
kable_material(html_font = "sans-serif")
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 |
nrow(mat_X)
n_obs<-t(Zx)%*%Zx/(n_obs-1)
mat_R<-%>% kable(caption ="Cálculo de R(X) forma manual:" ,
mat_R align = "c",
digits = 2) %>%
kable_material(html_font = "sans-serif") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
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 |
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"))
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 |
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.
library(PerformanceAnalytics)
chart.Correlation(as.matrix(mat_X),histogram = TRUE,pch=12)
library(corrplot)
library(grDevices)
library(Hmisc)
rcorr(as.matrix(mat_X))
Mat_R<-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))
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.
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)
%>% as.matrix() %>% rcorr()
Rx<-mat_X $r %>% kable(caption="Matriz R(X)",
Rxalign = "c",
digits = 2) %>%
kable_material(html_font = "sans-serif") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
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 |
$P %>% kable(caption="p-values de R(X)",
Rxalign = "c",
digits = 2) %>%
kable_classic_2(html_font = "sans-serif") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
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 |
library(stargazer)
eigen(Rx$r)
descomposicion<-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"))
3.75 | 1.93 | 0.84 | 0.72 | 0.34 | 0.31 | 0.1 | 0.01 |
$vectors %>% kable(caption="Autovectores de R(X)",
descomposicionalign = "c",
digits = 2) %>%
kable_classic_2(html_font = "sans-serif") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
-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 |
library(dplyr)
library(factoextra)
library(kableExtra)
library(stargazer)
library(ggplot2)
options(scipen = 99999)
princomp(x = mat_X,cor = TRUE,fix_sign = FALSE)
PC<-::get_eig(PC) %>% kable(caption="Resumen de PCA",
factoextraalign = "c",
digits = 2) %>%
kable_material(html_font = "sans-serif") %>%
kable_styling(bootstrap_options = c("hover"))
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")
library(dplyr)
library(kableExtra)
as.matrix(sqrt(descomposicion$values))
raiz_lambda<-$vectors
autovectores<-descomposicionvector(mode = "list")
corr_componentes_coordenadas<-for(j in 1:8){raiz_lambda[j]*autovectores[,j]->corr_componentes_coordenadas[[j]]}
%>% bind_cols()->corr_componentes_coordenadas
corr_componentes_coordenadas names(corr_componentes_coordenadas)<-paste0("Comp",1:8)
%>% as.data.frame() %>%
corr_componentes_coordenadas 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"))
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 |
library(dplyr)
library(factoextra)
library(kableExtra)
get_pca_var(PC)
variables_pca<-$coord%>%
variables_pca 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"))
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 |
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))
library(corrplot)
corrplot(variables_pca$coord,is.corr = FALSE,method = "square",addCoef.col="black",number.cex = 0.75)
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.
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:
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\)
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}\)
library(psych)
library(corrplot)
library(dplyr)
#Modelo de 2 Factores (sin rotar)
2
numero_de_factores<-2_factores<-principal(r = Rx$r,
modelo_nfactors = numero_de_factores,
covar = FALSE,
rotate = "none")
2_factores modelo_
## 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
$coord
correlaciones_modelo<-variables_pca
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)
3
numero_de_factores<-3_factores<-principal(r = Rx$r,
modelo_nfactors = numero_de_factores,
covar = FALSE,
rotate = "none")
3_factores modelo_
## 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
$coord
correlaciones_modelo<-variables_pca
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)
4
numero_de_factores<-4_factores<-principal(r = Rx$r,
modelo_nfactors = numero_de_factores,
covar = FALSE,
rotate = "none")
4_factores modelo_
## 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
$coord
correlaciones_modelo<-variables_pca
corrplot(correlaciones_modelo[,1:numero_de_factores],
is.corr = FALSE,
method = "square",addCoef.col="black",number.cex = 0.75)
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)
2
numero_de_factores<-2_factores<-principal(r = Rx$r,
modelo_nfactors = numero_de_factores,
covar = FALSE,
rotate = "varimax")
2_factores modelo_
## 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
$coord
correlaciones_modelo<-variables_pcavarimax(correlaciones_modelo[,1:numero_de_factores])$loadings
correlaciones_modelo_rotada<-
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)
3
numero_de_factores<-3_factores<-principal(r = Rx$r,
modelo_nfactors = numero_de_factores,
covar = FALSE,
rotate = "varimax")
3_factores modelo_
## 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
$coord
correlaciones_modelo<-variables_pcavarimax(correlaciones_modelo[,1:numero_de_factores],
correlaciones_modelo_rotada<-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)
4
numero_de_factores<-4_factores<-principal(r = Rx$r,
modelo_nfactors = numero_de_factores,
covar = FALSE,
rotate = "varimax")
4_factores modelo_
## 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
$coord
correlaciones_modelo<-variables_pcavarimax(correlaciones_modelo[,1:numero_de_factores],
correlaciones_modelo_rotada<-normalize = TRUE)$loadings
corrplot(correlaciones_modelo_rotada[,1:numero_de_factores],
is.corr = FALSE,
method = "square",
addCoef.col="black",
number.cex = 0.75)
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)
cortest.bartlett(mat_X) Barlett<-
## R was not square, finding R from data
print(Barlett)
## $chisq
## [1] 99.52973
##
## $p.value
## [1] 0.0000000006035519
##
## $df
## [1] 28
library(psych)
KMO(mat_X)
KMO<-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)
paf(as.matrix(mat_X))$KMO
KMO<-print(KMO)
## [1] 0.49718