library(readxl)
library(DT)
Departamentos <- read_excel("Departamentos.xlsx", sheet = "Hoja3")DT::datatable(Departamentos)library(raster)
colombia_pais <- getData(name = "GADM", country = "COL", level = 0)
class(colombia_pais)## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
colombia_depto <- getData(name = "GADM", country = "COL", level = 1)
#plot(colombia_depto)colombia_depto2 <- readRDS("gadm36_COL_1_sp.rds")
#plot(colombia_depto2)library(sf)
library(rgeos)
prueba <- st_as_sf(colombia_depto2)
head(prueba, 5)## Simple feature collection with 5 features and 10 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -77.149 ymin: -4.228429 xmax: -69.36835 ymax: 11.10792
## CRS: +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
## GID_0 NAME_0 GID_1 NAME_1 VARNAME_1 NL_NAME_1 TYPE_1
## 1 COL Colombia COL.1_1 Amazonas <NA> <NA> Comisaría
## 12 COL Colombia COL.2_1 Antioquia <NA> <NA> Departamento
## 23 COL Colombia COL.3_1 Arauca <NA> <NA> Intendencia
## 27 COL Colombia COL.4_1 Atlántico <NA> <NA> Departamento
## 28 COL Colombia COL.5_1 Bolívar <NA> <NA> Departamento
## ENGTYPE_1 CC_1 HASC_1 geometry
## 1 Commissiary <NA> CO.AM MULTIPOLYGON (((-69.43138 -...
## 12 Department <NA> CO.AN MULTIPOLYGON (((-76.99986 8...
## 23 Intendancy <NA> CO.AR MULTIPOLYGON (((-69.92316 6...
## 27 Department <NA> CO.AT MULTIPOLYGON (((-74.8816 10...
## 28 Department <NA> CO.BL MULTIPOLYGON (((-75.79681 1...
Departamentos$Departamennto## [1] "Amazonas" "Antioquia"
## [3] "Arauca" "Atlántico"
## [5] "Bolívar" "Boyacá"
## [7] "Caldas" "Caquetá"
## [9] "Casanare" "Cauca"
## [11] "Cesar" "Chocó"
## [13] "Córdoba" "Cundinamarca"
## [15] "Guainía" "Guaviare"
## [17] "Huila" "La Guajira"
## [19] "Magdalena" "Meta"
## [21] "Nariño" "Norte de Santander"
## [23] "Putumayo" "Quindío"
## [25] "Risaralda" "San Andrés y Providencia"
## [27] "Santander" "Sucre"
## [29] "Tolima" "Valle del Cauca"
## [31] "Vaupés" "Vichada"
library(scales)
library(ggplot2)
library(dplyr)
prueba %>%
rename(Departamennto = NAME_1) %>%
left_join(y = Departamentos, by = "Departamennto") %>%
ggplot(mapping = aes(fill =`IDH 2020`)) +
geom_sf(color = "white") +
scale_fill_viridis_c(
trans = "log10",
breaks = trans_breaks(trans = "log10",
inv = function(x) round(10 ^ x, digits = 1))
) +
theme_void()library(scales)
prueba %>%
rename(Departamennto = NAME_1) %>%
left_join(y = Departamentos, by = "Departamennto") %>%
ggplot(mapping = aes(fill =`Tasa Homicidio 2016`)) +
geom_sf(color = "white") +
scale_fill_viridis_c(
trans = "log10",
breaks = trans_breaks(trans = "log10",
inv = function(x) round(10 ^ x, digits = 1))
) +
theme_void()Cluster- K means
El método K-means clustering (MacQueen, 1967) agrupa las observaciones en K clusters distintos, donde el número K lo determina el analista antes de ejecutar del algoritmo. K-means clustering encuentra los K mejores clusters, entendiendo como mejor cluster aquel cuya varianza interna (intra-cluster variation) sea lo más pequeña posible. Se trata por lo tanto de un problema de optimización, en el que se reparten las observaciones en K clusters de forma que la suma de las varianzas internas de todos ellos sea lo menor posible. Para poder solucionar este problema es necesario definir un modo de cuantificar la varianza interna.
library(tidyverse)
library(factoextra)
library(cowplot)
library(ggpubr)
library(cluster)summary(Departamentos)## Departamennto Municipios Superficie Tasa Homicidio 2016
## Length:32 Min. : 2.00 Min. : 52 Min. : 2.37
## Class :character 1st Qu.: 12.75 1st Qu.: 21448 1st Qu.:17.18
## Mode :character Median : 26.50 Median : 24548 Median :22.39
## Mean : 34.41 Mean : 35644 Mean :24.08
## 3rd Qu.: 41.25 3rd Qu.: 48137 3rd Qu.:29.84
## Max. :125.00 Max. :109665 Max. :51.18
## IDH 2020 Población Densidad
## Min. :0.6390 Min. : 43446 Min. : 0.6014
## 1st Qu.:0.7185 1st Qu.: 371168 1st Qu.: 11.2922
## Median :0.7485 Median :1028432 Median : 55.8553
## Mean :0.7418 Mean :1306771 Mean : 135.6830
## 3rd Qu.:0.7725 3rd Qu.:1512130 3rd Qu.: 87.8780
## Max. :0.7910 Max. :6407977 Max. :1507.9423
dim(Departamentos)## [1] 32 7
Escalar y centrar las variables: media=0 y sd= 1
dept <- scale(Departamentos[,-1], center = TRUE, scale = TRUE)
summary(dept)## Municipios Superficie Tasa Homicidio 2016 IDH 2020
## Min. :-0.9476 Min. :-1.2281 Min. :-1.9362 Min. :-2.8693
## 1st Qu.:-0.6333 1st Qu.:-0.4898 1st Qu.:-0.6153 1st Qu.:-0.6493
## Median :-0.2312 Median :-0.3829 Median :-0.1509 Median : 0.1885
## Mean : 0.0000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.2001 3rd Qu.: 0.4310 3rd Qu.: 0.5130 3rd Qu.: 0.8587
## Max. : 2.6491 Max. : 2.5540 Max. : 2.4164 Max. : 1.3753
## Población Densidad
## Min. :-0.9117 Min. :-0.4586
## 1st Qu.:-0.6752 1st Qu.:-0.4223
## Median :-0.2009 Median :-0.2710
## Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.1482 3rd Qu.:-0.1623
## Max. : 3.6812 Max. : 4.6587
class(dept)## [1] "matrix" "array"
Convertir en dataframe
dept <- as.data.frame(dept)
class(dept)## [1] "data.frame"
rownames(dept)=Departamentos$Departamennto
head(dept,5)## Municipios Superficie Tasa Homicidio 2016 IDH 2020 Población
## Amazonas -0.9475920 2.5539916 -0.1812183 -0.69113937 -0.8861345
## Antioquia 2.6490541 0.9649942 0.4135724 0.84472590 3.6812465
## Arauca -0.8013868 -0.4080447 1.0805941 -0.04886844 -0.7476672
## Atlántico -0.3335304 -1.1256864 -0.1205800 1.23567342 0.8943796
## Bolívar 0.3097721 -0.3335168 -0.4202047 0.39792873 0.6240668
## Densidad
## Amazonas -0.4581942
## Antioquia -0.1186448
## Arauca -0.4220488
## Atlántico 2.4025542
## Bolívar -0.1768447
Una forma sencilla de estimar el número K óptimo de clusters cuando no se dispone de información adicional en la que basarse, es aplicar el algoritmo de K-means para un rango de valores de K e identificar aquel valor a partir del cual la reducción en la suma total de varianza intra-cluster deja de ser sustancial. A esta estrategia se la conoce como método del codo o elbow method (en los siguientes apartados se detallan otras opciones).
La función fviz_nbclust() automatiza este proceso y genera una representación de los resultados.````
library(factoextra)
fviz_nbclust(x = dept, FUNcluster = kmeans, method = "wss", k.max = 15,
diss = get_dist(dept, method = "euclidean"), nstart = 50)calcular_totwithinss <- function(n_clusters, datos, iter.max=1000, nstart=50){
# Esta función aplica el algoritmo kmeans y devuelve la suma total de
# cuadrados internos.
cluster_kmeans <- kmeans(centers = n_clusters, x = datos, iter.max = iter.max,
nstart = nstart)
return(cluster_kmeans$tot.withinss)
}Se aplica esta función con para diferentes valores de k
total_withinss <- map_dbl(.x = 1:15,
.f = calcular_totwithinss,
datos = dept)
total_withinss## [1] 186.00000 142.19660 109.10745 81.21214 65.84010 50.44256 39.61419
## [8] 32.71640 27.47911 22.94661 19.12030 16.66752 14.03122 11.79437
## [15] 10.10218
data.frame(n_clusters = 1:15, suma_cuadrados_internos = total_withinss) %>%
ggplot(aes(x = n_clusters, y = suma_cuadrados_internos)) +
geom_line() +
geom_point() +
scale_x_continuous(breaks = 1:15) +
labs(title = "Evolución de la suma total de cuadrados intra-cluster") +
theme_bw()set.seed(123)
km_clusters <- kmeans(x = dept, centers = 4, nstart = 32)El paquete factoextra también permite obtener visualizaciones de las agrupaciones resultantes. Si el número de variables (dimensionalidad) es mayor de 2, automáticamente realiza un PCA y representa las dos primeras componentes principales.
Las funciones del paquete factoextra emplean el nombre de las filas del dataframe que contiene los datos como identificador de las observaciones. Esto permite añadir labels a los gráficos.
fviz_cluster(object = km_clusters, data = dept, show.clust.cent = TRUE,
ellipse.type = "euclid", star.plot = TRUE, repel = TRUE) +
labs(title = "Resultados clustering K-means") +
theme_bw() +
theme(legend.position = "none")## Warning: ggrepel: 5 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
graficamos los cluster en funcion de Población y Tasa de Homicidio
depto = dept %>% mutate(cluster = km_clusters$cluster)
(g1=ggplot(depto, aes(x = depto$Población, y =depto$`Tasa Homicidio 2016`)) +
geom_point(aes(color=as.factor(cluster)), size=10)+
geom_text(aes(label = cluster), size = 5) +
theme_bw() +
theme(legend.position = "none")+
labs(title = "Kmenas con k=4")
)## Warning: Use of `depto$Población` is discouraged. Use `Población` instead.
## Warning: Use of `depto$`Tasa Homicidio 2016`` is discouraged. Use `Tasa
## Homicidio 2016` instead.
## Warning: Use of `depto$Población` is discouraged. Use `Población` instead.
## Warning: Use of `depto$`Tasa Homicidio 2016`` is discouraged. Use `Tasa
## Homicidio 2016` instead.
## graficamos los cluster en funcion de Población y IDH
depto = dept %>% mutate(cluster = km_clusters$cluster)
(g1=ggplot(depto, aes(x = depto$Población, y =depto$`IDH 2020`)) +
geom_point(aes(color=as.factor(cluster)), size=10)+
geom_text(aes(label = cluster), size = 5) +
theme_bw() +
theme(legend.position = "none")+
labs(title = "Kmenas con k=4")
)## Warning: Use of `depto$Población` is discouraged. Use `Población` instead.
## Warning: Use of `depto$`IDH 2020`` is discouraged. Use `IDH 2020` instead.
## Warning: Use of `depto$Población` is discouraged. Use `Población` instead.
## Warning: Use of `depto$`IDH 2020`` is discouraged. Use `IDH 2020` instead.
Biplot PCA y K-Means para medir representatividad
PCA
pca <- prcomp(dept, scale=TRUE)
df.pca <- pca$xCluster over the three first PCA dimensions
kc <- kmeans(df.pca[,1:3], 4)
fviz_pca_biplot(pca, label="var", habillage=as.factor(kc$cluster)) +
labs(color=NULL) + ggtitle("") +
theme(text = element_text(size = 15),
panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black"),
legend.key = element_rect(fill = "white"))fviz_contrib(pca, "var")get_pca_var(pca)$cos2## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Municipios 0.4229866 0.386997441 1.068514e-01 0.0017555949 0.009445731
## Superficie 0.2875153 0.247107244 4.884011e-02 0.4086046122 0.005646191
## Tasa Homicidio 2016 0.1195426 0.003976955 8.299324e-01 0.0206337725 0.006696275
## IDH 2020 0.6498345 0.047487955 1.984310e-02 0.1210349401 0.149423553
## Población 0.6112874 0.226698574 1.110451e-06 0.0002733136 0.117443535
## Densidad 0.1697052 0.576676407 5.689687e-02 0.0939856687 0.083272601
## Dim.6
## Municipios 0.071963282
## Superficie 0.002286509
## Tasa Homicidio 2016 0.019217973
## IDH 2020 0.012375989
## Población 0.044296081
## Densidad 0.019463229
fviz_cos2(pca, choice = "ind", axes=1:2)Cluster Jerarquias
- Matriz de distancias euclídeas
mat_dist <- dist(x = dept, method = "euclidean")Dendrogramas con linkage complete y average
hc_euclidea_complete <- hclust(d = mat_dist, method = "complete")
hc_euclidea_average <- hclust(d = mat_dist, method = "average")
cor(x = mat_dist, cophenetic(hc_euclidea_complete))## [1] 0.7662474
cor(x = mat_dist, cophenetic(hc_euclidea_average))## [1] 0.8541854
library(factoextra)
set.seed(101)hc_euclidea_completo <- hclust(d = dist(x = dept, method = "euclidean"),
method = "complete")fviz_dend(x = hc_euclidea_completo, k = 4, cex = 0.6) +
geom_hline(yintercept = 5.5, linetype = "dashed") +
labs(title = "Herarchical clustering",
subtitle = "Distancia euclídea, Lincage complete, K=4")## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
fviz_cluster(object = list(data=dept, cluster=cutree(hc_euclidea_completo, k=4)),
ellipse.type = "convex", repel = TRUE, show.clust.cent = FALSE,
labelsize = 8) +
labs(title = "Hierarchical clustering + Proyección PCA",
subtitle = "Distancia euclídea, Lincage complete, K=4") +
theme_bw() +
theme(legend.position = "bottom")## Warning: ggrepel: 2 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
Análisis Factorial
Anális factorial exploratorio
El Análisis Factorial (AF) es un método multivariante que pretende expresar p variables observables como una combinación lineal de m variables hipotéticas o latentes, denominadas factores. Tiene una formulación parecida al Análisis de Componentes Principales, pero el modelo que relaciona variables y factores es diferente en AF. Si la matriz de correlaciones existe, las componentes principales también existen, mientras que el modelo factorial podrá ser aceptado o no mediante un test estadístico. Ejemplos en los que la variabilidad de las variables observables se puede resumir mediante unas variables latentes, que el AF identifica como factores, son:
La teoría clásica de la inteligencia supone que los test de inteligencia estaban relacionados por un factor general, llamado factor “g”de Spearman.
Pasos para efectuar un análisis factorial - Verificar que la matriz de datos sea factorizable - Extraer los Factores - Determinar el número correcto de factores - Rotar los factores - Interpretar los resultados
Paso 1:Calcular la matriz de correlación policorica
library(psych)
library(polycor)
#install.packages("ggcorrplot")
library(ggcorrplot)Departamentos## # A tibble: 32 x 7
## Departamennto Municipios Superficie `Tasa Homicidio 201~ `IDH 2020` Población
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Amazonas 2 109665 22.0 0.717 78830
## 2 Antioquia 125 63612 28.7 0.772 6407977
## 3 Arauca 7 23818 36.2 0.74 270708
## 4 Atlántico 23 3019 22.7 0.786 2546138
## 5 Bolívar 45 25978 19.4 0.756 2171558
## 6 Boyacá 123 23012 8.37 0.76 1281979
## 7 Caldas 27 7888 21.7 0.778 993870
## 8 Caquetá 16 88965 29.4 0.717 496262
## 9 Casanare 19 44490 24.0 0.75 375258
## 10 Cauca 41 29308 39.2 0.719 1416145
## # ... with 22 more rows, and 1 more variable: Densidad <dbl>
#bfi_s <- bfi[1:200,1:25] # subconjunto de datos
mat_cor <- hetcor(Departamentos[,c(-4,-7)])$correlations #matriz de correlación policorica## data contain one or more character variables
## the values of which are ordered alphabetically
ggcorrplot(mat_cor,type="lower",hc.order = T)det(mat_cor)## [1] 0.3343161
Después de calcular la matriz de correlación, se puede verificar si la matriz de datos es factorizable por medio de la prueba de esfericidad de Bartlett, y la prueba de Kaiser-Meyer-Olkin.
Paso 1.1 Verificar que la matriz sea factorizable.
En este paso nos tenemos que preguntar si existe la suficiente correlación entre las variable para efectuar el análisis factorial.
Aplicamos la prueba de Bartlett que se utiliza para probar la hipótesis nula que afirma que las variables no están correlacionadas en la población.
cortest.bartlett(mat_cor)->p_esf## Warning in cortest.bartlett(mat_cor): n not specified, 100 used
p_esf$p## [1] 3.859706e-18
El valor p es casi 0, por lo que se se rechaza la hipotesis Ho, es decir la matriz de corrleación no es la matriz de identidad, es decir sus correlciones no son 0.
La otra prueba que podemos aplicar es el criterio de Kaiser-Meyer-Olkin. La prueba de Kaiser-Meyer-Olkin (KMO) es una medida de qué tan adecuados son sus datos para el análisis factorial . La prueba mide la adecuación del muestreo para cada variable en el modelo y para el modelo completo. La estadística es una medida de la proporción de varianza entre variables que podrían ser varianza común. Como referencia, Kaiser puso los siguientes valores en los resultados:
0.00 a 0.49 inaceptable.
0.50 a 0.59 miserable.
0,60 a 0,69 mediocre.
0.70 a 0.79 medio.
0,80 a 0,89 meritorio.
0.90 a 1.00 maravilloso.
KMO(mat_cor)## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = mat_cor)
## Overall MSA = 0.62
## MSA for each item =
## Departamennto Municipios Superficie IDH 2020 Población
## 0.66 0.60 0.61 0.72 0.59
Paso 2: Escoger un método para extraer los factores.
Los métodos disponibles son: Componentes principales, Mínimos cuadrados no ponderados, Mínimos cuadrados generalizados, Máxima verosimilitud, factorización de Ejes principales, factorización Alfa y factorización Imagen.
Análisis de componentes principales. Método para la extracción de factores utilizada para formar combinaciones lineales no correlacionadas de las variables observadas. El primer componente tiene la varianza máxima. Las componentes sucesivas explican progresivamente proporciones menores de la varianza y no están correlacionadas unas con otras. El análisis principal de las componentes se utiliza para obtener la solución factorial inicial. No se puede utilizar cuando una matriz de correlaciones es singular.
Método de mínimos cuadrados no ponderados. Método de extracción de factores que minimiza la suma de los cuadrados de las diferencias entre las matrices de correlación observada y reproducida, ignorando las diagonales.
Método de Mínimos cuadrados generalizados. Método de extracción de factores que minimiza la suma de los cuadrados de las diferencias entre las matrices de correlación observada y reproducida. Las correlaciones se ponderan por el inverso de su exclusividad, de manera que las variables que tengan un valor alto de exclusividad reciban una ponderación menor que aquéllas que tengan un valor bajo de exclusividad.
Método de máxima verosimilitud. Método de extracción factorial que proporciona las estimaciones de los parámetros que con mayor probabilidad ha producido la matriz de correlaciones observada, si la muestra procede de una distribución normal multivariada. Las correlaciones se ponderan por el inverso de la exclusividad de las variables, y se emplea un algoritmo iterativo.
Factorización de ejes principales. Método para la extracción de factores que parte de la matriz de correlaciones original con los cuadrados de los coeficientes de correlación múltiple insertados en la diagonal principal como estimaciones iniciales de las comunalidades. Las cargas factoriales resultantes se utilizan para estimar de nuevo las comunalidades que reemplazan a las estimaciones previas de comunalidad en la diagonal. Las iteraciones continúan hasta que el cambio en las comunalidades, de una iteración a la siguiente, satisfaga el criterio de convergencia para la extracción. Alfa.
Método de extracción factorial que considera a las variables incluidas en el análisis como una muestra del universo de las variables posibles. Este método maximiza el Alfa de Cronbach para los factores.
Factorización imagen. Método para la extracción de factores, desarrollado por Guttman y basado en la teoría de las imágenes. La parte común de una variable, llamada la imagen parcial, se define como su regresión lineal sobre las restantes variables, en lugar de ser una función de los factores hipotéticos.
Con la función fa() podemos utilizar los métodos siguientes.
- minres: minimo residuo
- mle: maxima verosimilitud
- paf: método de ejes principales
- alpah: alfa
- minchi: minimos cuadrados
- minrak : rango minimo
### prueba de dos modelos con tres factores
modelo1<-fa(mat_cor,
nfactors = 3,
rotate = "none",
fm="mle") # modelo máxima verosimilitud
modelo2<-fa(mat_cor,
nfactors = 3,
rotate = "none",
fm="minres") # modelo minimo residuo
######comparando las comunalidades
sort(modelo1$communality,decreasing = T)->c1
sort(modelo2$communality,decreasing = T)->c2
head(cbind(c1,c2))## c1 c2
## Municipios 0.99215294 0.8465618
## Población 0.94015563 0.6952265
## Superficie 0.75149011 0.6385176
## IDH 2020 0.27775939 0.4916564
## Departamennto 0.08010965 0.1109033
####comparacion de las unicidades
sort(modelo1$uniquenesses,decreasing = T)->u1
sort(modelo2$uniquenesses,decreasing = T)->u2
head(cbind(u1,u2))## u1 u2
## Departamennto 0.919890354 0.8890967
## IDH 2020 0.722240608 0.5083436
## Superficie 0.248509895 0.3614824
## Población 0.059844366 0.3047735
## Municipios 0.007847064 0.1534382
Paso 3: Determinar el número de factores
Kaiser Criterion (Guttman, 1954): esta regla sugiere que se deben retener todos los factores que tengan un eigenvalue de 1.0 o mayor; con el razonamiento de que un factor no debe explicar menos que la varianza equivalente que hubiera explicado una sola de las variables incluidas en el análisis. La regla sin embargo no es estricta y debe analizarse en conjunto con otros criterios.
Análisis del Scree Plot (Cattell, 1966): este método complementa al anterior y se basa también el análisis de la magnitud de los eigenvalues pero a partir de la tendencia que se observa en el Scree Plot. Se procuran seleccionar un grupo reducido de factores que tengan eigenvalues significativamente superiores a los demás, para lo cual se identifica el punto de inflexión en la curva del scree plot (también referido como el codo por su semejanza con un brazo) a partir del cual la curva se transforma a una línea “plana” o relativamente recta. En el ejemplo que se presenta hay un claro punto de inflexión después de dos factores.
Análisis paralelo (Horn, 1965): Esta regla suele complementar las anteriores cuando el numero de variables iniciales y factores resultantes es elevado. El procedimiento es basado en el principio de que los factores a extraer deben dar cuenta de mas varianza que la que es esperada de manera aleatoria. El procedimiento reordena las observaciones de manera aleatoria entre cada variable y los eigenvalues son recalculados a partir de esta nueva base de datos aleatoriamente ordenada. Los factores con eigenvalues mayores a los valores aleatorios son retenidos para interpretación.
scree(mat_cor)fa.parallel(mat_cor,n.obs=200,fa="fa",fm="minres")## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Parallel analysis suggests that the number of factors = 2 and the number of components = NA
Paso 4: Rotar la matriz
La obtención de la matriz factorial, no es mas que el primer paso del AF. Normalmente la matriz obtenida no define unos factores interpretables, Se han propuesto diferentes versiones sobre como transformar la matriz factorial a fin de obtener una estructura simple de los factores. Esencialmente se trata de conseguir que unas saturaciones sean altas a costa de otras, que serán bajas, para así destacar la influencia de los factores comunes sobre las variables observables. Existen dos formas básicas de realizar la Rotación de Factores , oblicuas y ortogonales. Se elige uno u otro procedimiento según que los factores rotados sigan siendo ortogonales o no. Señalar que en ambas rotaciones la comunalidad de cada variable no se modifica, esto es, la rotación no afecta a la bondad del ajuste de la solución factorial: aunque cambie la matriz factorial, las especificidades no cambian y, en consecuencia, las comunidades permanecen invariantes. Sin embargo, cambia la varianza explicada por cada factor, por tanto, los nuevos factores no están ordenados de acuerdo con la información que contienen, cuantificada mediante su varianza.
Varimax:Método de rotación ortogonal que minimiza el número de variables que tienen saturaciones altas en cada factor. Simplifica la interpretación de los factores.
Criterio Oblimin directo: Método para la rotación oblicua (no ortogonal). El método necesita un valor delta que servirá para ajustar los ejes en función de las saturaciones buscan una mejor aproximación, pero considerando que la varianza se distribuirá entre todos los factores.
Método quartimax: Método de rotación que minimiza el número de factores necesarios para explicar cada variable.
Método equamax:Método de rotación que es combinación del método varimax, que simplifica los factores, y el método quartimax, que simplifica las variables. Se minimiza tanto el número de variables que saturan alto en un factor como el número de factores necesarios para explicar una variable.
Rotación Promax: Rotación oblicua que permite que los factores estén correlacionados. Esta rotación se puede calcular más rápidamente que una rotación oblimin directa, por lo que es útil para conjuntos de datos grandes.
#library()
#Rotaciones
library(GPArotation)
rot<-c("none", "varimax", "quartimax","Promax")
bi_mod<-function(tipo){
biplot.psych(fa(Departamentos[,-1],nfactors = 2,fm="minres",rotate = tipo),main =
paste("Biplot con rotación ",tipo),col=c(2,3,4),pch = c(21,18))
}
sapply(rot,bi_mod)## $none
## NULL
##
## $varimax
## NULL
##
## $quartimax
## NULL
##
## $Promax
## NULL
Paso 5: La interpretación
para ayudar a la interpretación se puede hacer un gráfico de árbol.
modelo_varimax<-fa(mat_cor,nfactors = 2,rotate = "varimax",
fa="minres")
fa.diagram(modelo_varimax)print(modelo_varimax$loadings,cut=0)##
## Loadings:
## MR1 MR2
## Departamennto -0.258 0.203
## Municipios 0.799 0.110
## Superficie -0.049 -0.714
## IDH 2020 0.384 0.422
## Población 0.867 0.180
##
## MR1 MR2
## SS loadings 1.607 0.774
## Proportion Var 0.321 0.155
## Cumulative Var 0.321 0.476
El porcentaje de varianza acumulado de estos 3 factores es de 71%