El Análisis de Componentes Principales (PCA) es una técnica matemática que sirve para reducir la cantidad de variables en un conjunto de datos, manteniendo la mayor cantidad de información posible.
Estandarización de los datos:
Para que todas las variables tengan la misma importancia, primero se
transforman a una misma escala, es decir, se estandarizan.
Cálculo de la matriz de covarianza:
El siguiente paso es entender cómo se relacionan las variables entre sí.
Para ello, se calcula una matriz de covarianza.
Cálculo de los valores propios (eigenvalues) y vectores
propios (eigenvectors):
La matriz de covarianza se descompone en valores propios y vectores
propios. Cada vector propio es un “eje” nuevo en el que se proyectan los
datos, y los valores propios nos dicen cuánta información o varianza
está contenida en ese eje.
Seleccionar los componentes principales:
Los componentes principales son los vectores propios con los valores
propios más grandes. El objetivo es quedarte solo con los componentes
que explican la mayor parte de la varianza, es decir, la mayor cantidad
de información. En este caso, únicamente nos quedaremos con el primer
componente.
Indicador:
Se obtiene multiplicando los datos estandarizados por el primer
componente principal, el cual nos indicará los pesos.
Se dara la funcion que unicamente deberas copilar.
indice_rezago = function(base){
base = as.data.frame(lapply(base, as.numeric)) # Verificas que todas las columnas sean numerico
componentes = prcomp(base, center = TRUE, scale. = TRUE) # Aplicas analis de componentes
indice = scale(scale(as.matrix(base)) %*% as.matrix(componentes$rotation[,1])) # Multiplicas la matriz estandarizada por el primer componente para obtener los pesos.
return(as.data.frame(indice))
}
Ejemplo de uso de la funcion:
library(readxl) # Libreria para abrir archivos Excel
datos = read_xlsx("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Servicio Social/Septiembre/Archivos Utilizados/Indice_Rezago_Social/Municipal/IRS_entidades_mpios_2020.xlsx") # Carga de datos
Filtracion de datos(opcional usar esta linea de codigo). Al cargar la base de datos en R, su formato no es el mismo que en Excel. En nuestro caso, los nombres de las columnas son los valores de la fila 5. Como solo nos interesan los “Indicadores de Rezago Social”, eliminamos las primeras 6 filas y las últimas 4. Además, solo utilizamos las columnas de la 4 a la 14.
# Si tu base ya es correcta puedes ignorar esto
colnames(datos) = datos[5,] # Cambiar nombre a las columnas
datos = datos[ -c(1:5) ,] # Filtrar datos
estados = as.matrix(datos[-c(1, 34:38), 2]) # Nombre de los estados
Nuestros datos con los que vamos a trabajar viene dado por:
# Datos de interes
datos_estatal = datos[-c(1, 34:38) , c(4:14)] # Datos con los que trabajaremos filtrados
Los datos_estatal
su visualizacion es la siguiente:
Uso de la funcion:
indice = indice_rezago(base = datos_estatal) # Haces uso de la funcion
Del cual tenemos que algunos valores de nuestro primer valor propio son los siguientes:
## Población.de.15.años.o.más.analfabeta
## [1,] 0.364926
## Población.de.6.a.14.años.que.no.asiste.a.la.escuela
## [1,] 0.1729531
## Población.de.15.años.y.más.con.educación.básica.incompleta
## [1,] 0.3396327
## Población.sin.derechohabiencia.a.servicios.de.salud
## [1,] 0.1882339
## Viviendas.con.piso.de.tierra
## [1,] 0.3530206
## Viviendas.que.no.disponen.de.excusado.o.sanitario
## [1,] 0.2326716
## Viviendas.que.no.disponen.de.agua.entubada.de.la.red.pública
## [1,] 0.3369424
## Viviendas.que.no.disponen.de.drenaje
## [1,] 0.3179659
## Viviendas.que.no.disponen.de.energía.eléctrica
## [1,] 0.2728061
## Viviendas.que.no.disponen.de.lavadora
## [1,] 0.3354775
## Viviendas.que.no.disponen.de.refrigerador
## [1,] 0.3252283
El cual observamos que coincidimos con los que tiene CENEVAL
Donde el codigo nos dara el Indice de Rezago
de la
siguiente manera:
t(head(indice, 5))
## 1 2 3 4 5
## V1 -1.101561 -0.6423873 -0.3170266 0.2445352 -1.147587
Este viene en orden del cual tiene la base de datos, para visualizar mejor
indice = cbind(estados, indice)
colnames(indice) = c("Estado", "Indice")
head(indice, 5)
## Estado Indice
## 1 Aguascalientes -1.1015606
## 2 Baja California -0.6423873
## 3 Baja California Sur -0.3170266
## 4 Campeche 0.2445352
## 5 Coahuila de Zaragoza -1.1475873
Del cual observamos que coincide con el realizado con CONEVAL
indice_rezago = function(base){
base = as.data.frame(lapply(base, as.numeric)) # Verificas que todas las columnas sean numerico
componentes = prcomp(base, center = TRUE, scale. = TRUE) # Aplicas analis de componentes
indice = scale(scale(as.matrix(base)) %*% as.matrix(componentes$rotation[,1])) # Multiplicas la matriz estandarizada por el primer componente para obtener los pesos.
return(as.data.frame(indice))
}
Tenemos que la linea:
componentes = prcomp(base, center = TRUE, scale. = TRUE)
Realiza los pasos 1,2,3 y 4 de analisis de componentes, donde los
parametros center = TRUE
y scale. = TRUE
indican que los datos se estandarizaran, se obtendra la matriz de
covarianza y el primer vector propio.
Mientras que la linea:
indice = scale(scale(as.matrix(base)) % * % as.matrix(componentes$rotation[,1]))
.
Realiza el ultimo paso, donde multiplicamos los datos estandarizados por
la funcion scale por el primer vector propio y en este caso a lo
obtenido lo estandariza.
Referencias: https://www.coneval.org.mx/Medicion/IRS/Paginas/Indice_Rezago_Social_2020.aspx