library(rio)
## Warning: package 'rio' was built under R version 4.2.2
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(cowplot)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.2.2
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(reshape)
## 
## Attaching package: 'reshape'
## The following object is masked from 'package:cowplot':
## 
##     stamp
## The following object is masked from 'package:dplyr':
## 
##     rename
library(DT)
## Warning: package 'DT' was built under R version 4.2.2
library(equatiomatic)
library(modelsummary)
## Warning: package 'modelsummary' was built under R version 4.2.2
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.2.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cluster)

Introducción

La siguiente investigación analiza los factores que pueden perjudicar el índice de democracia a nivel mundial. Durante el desarrollo de esta investigación se ha identificado que existen diversos factores que influencian en el índice de democracia; sin embargo, se han elegido seis, los cuales se considera que son los de mayor importancia. En primer lugar, se presentarán factores políticos, representados a través del índice de la percepción de la corrupción, y el índice de paridad política. En segundo lugar, se agregarán factores económicos representados a través de la tasa de crecimeinto de PBI, el índice de libertad económica y el coeficiente de GINI. Por último, se utilizarán los países con educación secundaria pero sin educación terciaria como indicador del factor educación. Por tal motivo, se buscará poner a prueba si la hipótesis presentada (estos factores afectan negativamente el índice de democracia a nivel mundial) es certera.

1. Análisis rápido de la data

Al visualizar la data sin haber realizado ningún análisis estadístico, se observa que países con un mayor índice de libertad económica presentan de igual manera un relativamente mayor puntaje en el índice de democracia como se presenta por ejemplo en países como el Reino Unido, Suecia y Suiza. Sin embargo, no necesariamente sucede lo mismo en el caso del índice de paridad política y su efecto en el nivel de democracia, pues, así algunos países tengan un alto nivel de paridad política en su gestión, como por ejemplo: Rwanda, Argentina y Emiratos Árabes, no cuentan con un alto nivel de democracia. El mismo caso se da con la tasa de crecimiento de PBI, el coeficiente de GINI y los países con nivel de educación secundaria pero no terciaria. Es por tal motivo que se procederá a realizar un análisis de regresión lineal para luego proceder con una comparación de los modelos con el fin de observar qué variables tienen un mayor impacto positivo en el nivel de democracia a nivel mundial y así poner a prueba y obtener resultados respaldados estadísticamente de lo recién evaluado a primera vista.

2. Modelación

En este caso, se hará una regresión lineal múltiple con tres primeras variables, las cuales serán el índice de libertad económica, la tasa de crecimiento de PBI y el puntaje de los países en su índice de paridad política.

## 
## Call:
## lm(formula = scoredemo ~ scorelibeco + scoreparpol + scorepbi, 
##     data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.2287 -0.7561  0.2337  0.8490  3.1428 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.741917   0.769855  -4.861 3.55e-06 ***
## scorelibeco  0.155298   0.012536  12.388  < 2e-16 ***
## scoreparpol  0.006409   0.011031   0.581   0.5623    
## scorepbi    -0.063844   0.029450  -2.168   0.0321 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.38 on 121 degrees of freedom
## Multiple R-squared:  0.5892, Adjusted R-squared:  0.579 
## F-statistic: 57.84 on 3 and 121 DF,  p-value: < 2.2e-16

\[ \operatorname{\widehat{scoredemo}} = -3.74 + 0.16(\operatorname{scorelibeco}) + 0.01(\operatorname{scoreparpol}) - 0.06(\operatorname{scorepbi}) \]

Resumen de Regresion Lineal
Model 1
(Intercept) -3.742***
(0.770)
scorelibeco 0.155***
(0.013)
scoreparpol 0.006
(0.011)
scorepbi -0.064*
(0.029)
Num.Obs. 125
R2 0.589
R2 Adj. 0.579
AIC 441.1
BIC 455.3
Log.Lik. -215.560
F 57.842
RMSE 1.36
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001

En cuanto al Coeficiente de Determinación también conocido como R2, este nos ayudará a interpretar el porcentaje de variabilidad total de la variable dependiente que es explicada por la variable independiente. Estos valores pueden ir del 0 al 1, si el caso del R2 se encuentra más cercano a 1, mayor será la variabilidad explicada, ayudando a indicar el ajuste del modelo.

Por ende, si bien la variable más significativa en Modelo 1 seria libertad económica, por ende, a mayor libertad económica, mayor democracia.

En ese sentido, de acuerdo a los resultados en el Modelo 1, se presenta un R ajustado a 0.589 | (58.9%), esto sugiere que es un modelo que al sobrepasar el 50% indicaría un alto índice de variabilidad en las variables de paridad política, la tasa de crecimeinto de PBI y el índice de libertad económica.

## 
## Call:
## lm(formula = scoredemo ~ cpiscore + educasec + gini_ind, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.9722 -0.8189  0.2966  1.1058  2.0237 
## 
## Coefficients: (1 not defined because of singularities)
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 1.317452   0.900242   1.463    0.146    
## cpiscore    0.084453   0.007466  11.312   <2e-16 ***
## educasec    0.016231   0.018481   0.878    0.382    
## gini_ind          NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.461 on 122 degrees of freedom
## Multiple R-squared:  0.5354, Adjusted R-squared:  0.5277 
## F-statistic: 70.29 on 2 and 122 DF,  p-value: < 2.2e-16

\[ \operatorname{\widehat{scoredemo}} = 1.32 + 0.08(\operatorname{cpiscore}) + 0.02(\operatorname{educasec}) + NA(\operatorname{gini\_ind}) \]

Resumen de Regresion Lineal 2
Model 1
(Intercept) 1.317
(0.900)
cpiscore 0.084***
(0.007)
educasec 0.016
(0.018)
Num.Obs. 125
R2 0.535
R2 Adj. 0.528
AIC 454.5
BIC 465.8
Log.Lik. -223.252
RMSE 1.44
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001

En el Modelo 2, la variable más significativa seria la percepción de corrupción, por ende, a mayor percepción de corrupción, mayor democracia.

En ese sentido, de acuerdo a los resultados en el Modelo 2, se presenta un R ajustado a 0.535 | (53.5%), este modelo presenta un porcentaje menor por aproximadamente 5% a diferencia del Modelo 1 con las variables anteriores. Sin embargo, sigue siendo un medianamente alto porcentaje que indica el índice de variabilidad en las variables de percepción de corrupción y educación.

En esta sección, se realizará una comparación de ambos modelos:

## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
## 
## ===================================================================
##                                   Dependent variable:              
##                     -----------------------------------------------
##                                        scoredemo                   
##                               (1)                     (2)          
## -------------------------------------------------------------------
## scorelibeco                0.155***                                
##                             (0.013)                                
##                                                                    
## scoreparpol                  0.006                                 
##                             (0.011)                                
##                                                                    
## scorepbi                   -0.064**                                
##                             (0.029)                                
##                                                                    
## cpiscore                                           0.084***        
##                                                     (0.007)        
##                                                                    
## educasec                                             0.016         
##                                                     (0.018)        
##                                                                    
## gini_ind                                                           
##                                                                    
##                                                                    
## Constant                   -3.742***                 1.317         
##                             (0.770)                 (0.900)        
##                                                                    
## -------------------------------------------------------------------
## Observations                  125                     125          
## R2                           0.589                   0.535         
## Adjusted R2                  0.579                   0.528         
## Residual Std. Error    1.380 (df = 121)        1.461 (df = 122)    
## F Statistic         57.842*** (df = 3; 121) 70.285*** (df = 2; 122)
## ===================================================================
## Note:                                   *p<0.1; **p<0.05; ***p<0.01

Por útlimo, se realizará un tercer modelo en el que uniremos las seis variables para observar si es que los resultados cambian, si es que hay más variables con mayor impacto en el nivel de democracia o si es que se da el caso contrario.

## 
## Call:
## lm(formula = scoredemo ~ cpiscore + educasec + gini_ind + scorelibeco + 
##     scoreparpol + scorepbi, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.1543 -0.6311  0.3462  0.8084  2.8297 
## 
## Coefficients: (1 not defined because of singularities)
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.048832   1.264190  -2.412  0.01741 *  
## cpiscore     0.035845   0.012226   2.932  0.00404 ** 
## educasec     0.019500   0.017119   1.139  0.25696    
## gini_ind           NA         NA      NA       NA    
## scorelibeco  0.107699   0.021446   5.022 1.82e-06 ***
## scoreparpol -0.001425   0.011078  -0.129  0.89789    
## scorepbi    -0.043704   0.029422  -1.485  0.14007    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.341 on 119 degrees of freedom
## Multiple R-squared:  0.618,  Adjusted R-squared:  0.602 
## F-statistic: 38.51 on 5 and 119 DF,  p-value: < 2.2e-16

\[ \operatorname{\widehat{scoredemo}} = -3.05 + 0.04(\operatorname{cpiscore}) + 0.02(\operatorname{educasec}) + NA(\operatorname{gini\_ind}) + 0.11(\operatorname{scorelibeco}) + 0(\operatorname{scoreparpol}) - 0.04(\operatorname{scorepbi}) \]

Resumen de Regresion Lineal
Model 1
(Intercept) -3.049*
(1.264)
cpiscore 0.036**
(0.012)
educasec 0.020
(0.017)
scorelibeco 0.108***
(0.021)
scoreparpol -0.001
(0.011)
scorepbi -0.044
(0.029)
Num.Obs. 125
R2 0.618
R2 Adj. 0.602
AIC 436.0
BIC 455.8
Log.Lik. -211.007
RMSE 1.31
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001

Por útlimo, al haber analizado los seis factores en conjunto en el mismo modelo se observa que solo la libertad económica tiene un efecto significativo positivo en el índice de democracia. Se debe tener en cuenta que el resultado fue distinto al haber analizado los seis factores por separado (dos grupos de tres), pues en ese caso, se observó que el índice de la percepción de corrupción también tenía un valor significativo. Esto nos brinda como conclusión que a mayor libertad económica, y un mayor índice de la percepción de la corrupción se presentará mayor nivel de democracia. Esto es certero al aplicarlo en la vida cotidianda pues, como se mencionó en un principio, se comprueba que el índice de corrupción tiene influencia en los índices de democracia debido a que mediante la percepción de la corrupción se permite identificar la desconfianza de los ciudadanos en sus Estados debido a que no hay una transparencia en las gestiones políticas y económicas de los países. Asimismo, como se menciona en el portal de CONFIEP (2022), el escritor Fareed Zakaria observa que “la mayoría de las democracias pobres del mundo son democracias no liberales—es decir, regímenes políticos en los cuales no están bien establecidas las libertades, salvo la libertad de elegir a los que gobiernan”. Por lo tanto, se entiende que los países con democracias pobres son aquellos que no se rigen por una ideología liberal, por lo tanto, el facctor de la libertad económica tiene un impacto en el índice de democracia de los Estados.

En este último Modelo 3, la variable más significativa seria la libertad económica frente a todas las dempás variables vistas en el Modelo 1 y el Modelo 2.

Finalmente, en los resultados de este Modelo 3, se presenta un R ajustado a 0.619 | (61.8%), este modelo presenta un porcentaje mayor por aproximadamente 5.6% que el Modelo 1 y 2 en promedio. Esto nos indica un alto índice de variabilidad en este tercer modelo.

3. Análisis factorial

Mediante este análisis factorial exploratorio podremos explorar la data y se nos entregará los posibles factores que resúmen cada uno un conjunto de variables.

A continuación, se subseteará la data:

dontselect=c("country")
select=setdiff(names(data),dontselect) 
theData=data[,select]

En el siguiente paso se realizará el cálculo de la matriz de correlación:

library(polycor)
## Warning: package 'polycor' was built under R version 4.2.2
corMatrix=polycor::hetcor(theData)$correlations

La figura mostrada a continuación nos muestra las correlaciones entre algunas de las variables utilizadas:

library(ggcorrplot)
## Warning: package 'ggcorrplot' was built under R version 4.2.2
ggcorrplot(corMatrix)

Se observa que las variables de libertad económica y de percepción de la corrupción tienen mayor correlación con la variable dependiente del índice de democracia; sin embargo, el índice de paridad política también presenta cierto nivel de correlación, ´pero menor que las recién mencionadas.

En el siguiente paso se verificará si los datos permiten factorizar

library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:polycor':
## 
##     polyserial
## The following object is masked from 'package:modelsummary':
## 
##     SD
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
psych::KMO(corMatrix)
## Error in solve.default(r) : 
##   Lapack routine dgesv: system is exactly singular: U[7,7] = 0
## matrix is not invertible, image not found
## Kaiser-Meyer-Olkin factor adequacy
## Call: psych::KMO(r = corMatrix)
## Overall MSA =  0.5
## MSA for each item = 
##   scoredemo scorelibeco scoreparpol    scorepbi    cpiscore    educasec 
##         0.5         0.5         0.5         0.5         0.5         0.5 
##    gini_ind 
##         0.5

Seguidamente, se verificará si la matriz de correlación es adecuada. Para ello se realizarán dos pruebas:

Hnula: La matriz de correlacion es una matriz identidad

cortest.bartlett(corMatrix,n=nrow(theData))$p.value>0.05
## [1] FALSE

Hnula: La matriz de correlacion es una matriz singular.

library(matrixcalc)

is.singular.matrix(corMatrix)
## [1] TRUE

Luego se buscará determinar en cuantos factores o variables latentes podríamos redimensionar la data, para ello utilizaremos la función fa.parallel:

fa.parallel(theData, fa = 'fa',correct = T,plot = F)
## In smc, smcs < 0 were set to .0
## In smc, smcs < 0 were set to .0
## In smc, smcs < 0 were set to .0
## Warning in cor.smooth(r): Matrix was not positive definite, smoothing was done
## In factor.scores, the correlation matrix is singular, the pseudo inverse is  used
## I was unable to calculate the factor score weights, factor loadings used instead
## 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

A continuación, se redimensionará a un número menor de factores

Resultado inicial:

library(GPArotation)
resfa <- fa(theData,
            nfactors = 2,
            cor = 'mixed',
            rotate = "varimax",
            fm="minres")
## In smc, smcs < 0 were set to .0
## In smc, smcs < 0 were set to .0
## In smc, smcs < 0 were set to .0
## Warning in cor.smooth(r): Matrix was not positive definite, smoothing was done
## In factor.scores, the correlation matrix is singular, the pseudo inverse is  used
## I was unable to calculate the factor score weights, factor loadings used instead
print(resfa$loadings)
## 
## Loadings:
##             MR1    MR2   
## scoredemo    0.818       
## scorelibeco  0.882 -0.160
## scoreparpol  0.326       
## scorepbi           -0.100
## cpiscore     0.911 -0.174
## educasec    -0.218  0.974
## gini_ind    -0.218  0.974
## 
##                  MR1   MR2
## SS loadings    2.488 1.969
## Proportion Var 0.355 0.281
## Cumulative Var 0.355 0.637

Resultado mejorado:

print(resfa$loadings,cutoff = 0.5)
## 
## Loadings:
##             MR1    MR2   
## scoredemo    0.818       
## scorelibeco  0.882       
## scoreparpol              
## scorepbi                 
## cpiscore     0.911       
## educasec            0.974
## gini_ind            0.974
## 
##                  MR1   MR2
## SS loadings    2.488 1.969
## Proportion Var 0.355 0.281
## Cumulative Var 0.355 0.637

Cuando logramos que cada variable se vaya a un factor, tenemos una estructura simple.

Resultado visual: El resultado lo podemos ver de manera gráfica en la figura a continuación:

fa.diagram(resfa,main = "Resultados del EFA")

Habiendo evaluando los resultados obtenidos procederemos con la siguiente evaluación para responder a la pregunta: ¿Qué variables aportaron más a los factores?

sort(resfa$communality)
##    scorepbi scoreparpol   scoredemo scorelibeco    cpiscore    educasec 
##  0.02004262  0.10817881  0.67084211  0.80302001  0.86087687  0.99720350 
##    gini_ind 
##  0.99720350

¿Qué variables contribuyen a más de un factor?

sort(resfa$complexity)
##   scoredemo scoreparpol scorelibeco    cpiscore    educasec    gini_ind 
##    1.004610    1.039842    1.065957    1.072687    1.099918    1.099918 
##    scorepbi 
##    1.999880

Valores proyectados: Podemos calcular dos indices que resuman los dos factores encontrados.

library(magrittr)
as.data.frame(resfa$scores)%>%head()
##          MR1        MR2
## 1  0.3219213 -1.3321592
## 2 -2.1978246 -2.3210328
## 3 -3.2395202  3.4834007
## 4 -0.8075282  0.8893327
## 5  0.1651141 -1.3016353
## 6  4.2623863 -1.5025641
data$scorelibeco=resfa$scores[,1]
data$cpiscore=resfa$scores[,2]
ggplot(data=data, aes(x=scorelibeco,y=scoredemo)) + geom_point() + theme_minimal() + labs(x="Indice de Democracia (original)", y="Indice de Democracia EFA")

ggplot(data=data, aes(x=cpiscore,y=scoredemo)) + geom_point() + theme_minimal() + labs(x="Indice de Democracia (original)", y="Indice de Democracia EFA")

library(BBmisc)
## Warning: package 'BBmisc' was built under R version 4.2.2
## 
## Attaching package: 'BBmisc'
## The following objects are masked from 'package:dplyr':
## 
##     coalesce, collapse
## The following object is masked from 'package:base':
## 
##     isFALSE
scoredemo=normalize(resfa$scores, 
                       method = "range", 
                       margin=2, # by column
                       range = c(0, 10))

data$scorelibeco=scoredemo[,1]
data$cpiscore=scoredemo[,2]

ggplot(data=data,aes(x=scorelibeco,y=scoredemo)) + geom_point() + theme_minimal() + labs(x="Indice de Democracia (original)", y="Indice de Democracia EFA (cambiado)")

scoredemo=normalize(resfa$scores, 
                       method = "range", 
                       margin=2, # by column
                       range = c(0, 10))

data$scorelibeco=scoredemo[,1]
data$cpiscore=scoredemo[,2]

ggplot(data=data,aes(x=cpiscore,y=scoredemo)) + geom_point() + theme_minimal() + labs(x="Indice de Democracia (original)", y="Indice de Democracia EFA (cambiado)")

## Análisis de cluster

dataClus=data[,c(2:8)]
row.names(dataClus)=data$country
library(cluster)
g.dist = daisy(dataClus, metric="gower")

Proceso de clusterización

Para realizar el proceso de clusterización se hará uso de la Estrategia Jerárquica - divisiva

Primero, se decidirá la cantidad de cluster a utilizar mediante una solicitud usando el estadístico ‘gap’

fviz_nbclust(dataClus, hcut,diss=g.dist,method = "gap_stat",k.max = 10,verbose = F,hc_func = "diana")

Clusterizar vía DIANA

set.seed(123)
res.diana <- hcut(g.dist, k = 2,hc_func='diana')
dataClus$diana=res.diana$cluster
head(dataClus,15)%>%kbl%>%kable_styling()
scoredemo scorelibeco scoreparpol scorepbi cpiscore educasec gini_ind diana
Albania 6.08 4.782365 29.5 6.067882 2.4797461 33.2 33.2 1
Algeria 3.77 2.450811 25.8 4.438258 1.5070187 27.6 27.6 1
Angola 3.66 1.486916 30.0 11.031830 7.2166782 51.3 51.3 2
Argentina 6.95 3.737270 40.9 7.729489 4.6649658 41.4 41.4 2
Armenia 5.35 4.637269 23.5 14.643208 2.5097716 34.4 34.4 1
Australia 8.96 8.428529 30.0 1.807784 2.3121235 34.4 34.4 1
Austria 8.16 8.371925 39.3 1.549877 1.1682493 29.7 29.7 1
Azerbaijan 2.68 2.161434 17.4 26.660095 2.3533335 33.7 33.7 1
Bangladesh 5.99 3.086723 20.9 4.965841 2.6349309 32.4 32.4 1
Belarus 2.59 3.329148 40.0 10.149767 0.5542816 25.2 25.2 1
Belgium 7.51 7.930101 41.3 1.760456 0.6638767 27.4 27.4 1
Benin 4.58 2.927485 7.2 -1.245890 6.4511533 47.8 47.8 2
Bhutan 5.71 4.951297 14.9 5.644230 3.4207075 37.4 37.4 1
Bosnia and Herzegovina 4.84 4.059652 26.2 3.865777 2.5657068 33.0 33.0 1
Botswana 7.62 4.610153 10.8 2.607175 7.4957339 53.3 53.3 2
fviz_dend(res.diana, cex = 0.7, horiz = T, main = "")
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.

fviz_silhouette(res.diana,print.summary = F)

* Nótese que no se presentan valores mal clusterizados; por ende, no habrá necesidad de evaluar los resultados.

Verificando Etiqueta

  • A continuación, exploraremos el promedio de cada cluster.
aggregate(.~ diana, data=dataClus,mean)
##   diana scoredemo scorelibeco scoreparpol scorepbi cpiscore educasec gini_ind
## 1     1  6.370405    5.531140    27.39054 4.087965 2.375102 33.11757 33.11757
## 2     2  4.961765    2.965813    24.88431 3.148474 5.843367 45.63922 45.63922
  • No se observa un orden, por lo tanto se reordenará.
original=aggregate(.~ diana, data=dataClus,mean)
original[order(original$scoredemo),]
##   diana scoredemo scorelibeco scoreparpol scorepbi cpiscore educasec gini_ind
## 2     2  4.961765    2.965813    24.88431 3.148474 5.843367 45.63922 45.63922
## 1     1  6.370405    5.531140    27.39054 4.087965 2.375102 33.11757 33.11757

Esas posiciones hay que usarlas para recodificar:

dataClus$diana=dplyr::recode(dataClus$diana, `1` = 2, `2`=1)

Guardemos la columna de DIANA en la data integrada, y eliminemosla de dataClus.

data$dianadatapoor=data$Pais
data$dianadata=as.ordered(dataClus$diana)
dataClus$diana=NULL

Visualización comparativa

Vamos a usar la matriz de distancia para darle a cada país una coordenada, tal que la distancia entre esos paises se refleje en sus posiciones. Eso requiere una técnica que proyecte las dimensiones originales en un plano bidimensional. Para ello usaremos la técnica llamada escalamiento multidimensional. Veamos algunas coordenadas.

proyeccion = cmdscale(g.dist, k=2,add = T) 
head(proyeccion$points,20)
##                               [,1]        [,2]
## Albania                -0.13449478  0.06374688
## Algeria                -0.08200583  0.25795853
## Angola                  0.39186594 -0.04890302
## Argentina               0.06032366 -0.12662269
## Armenia                -0.07726082  0.14300864
## Australia              -0.30379663 -0.08775832
## Austria                -0.38935648 -0.09178622
## Azerbaijan              0.04125959  0.37856451
## Bangladesh             -0.06500966  0.13170436
## Belarus                -0.14179337  0.26878629
## Belgium                -0.39032676 -0.07829680
## Benin                   0.34268792 -0.06186938
## Bhutan                  0.00192567  0.05869913
## Bosnia and Herzegovina -0.07313604  0.13675433
## Botswana                0.23474832 -0.32211105
## Brazil                  0.32038137 -0.25197746
## Bulgaria                0.01435017 -0.07020172
## Burkina Faso            0.05961703  0.22465408
## Burundi                 0.17484297  0.14872335
## Cambodia                0.16121993  0.24429507

Habiendo calculado la proyeccción, recuperemos las coordenadas del mapa del mundo basado en nuestras dimensiones nuevas:

data$dim1 <- proyeccion$points[,1]
data$dim2 <- proyeccion$points[,2]
#DATA PAÍSES
ISODATA = import("https://raw.githubusercontent.com/Gbaldeonb/Estadistica/main/ISODATA.csv")
#VISUALIZANDO ISO DATA 
colnames(ISODATA) = c("name","country", "iso2", "iso3")
ISODATA$name=NULL
ISODATA$iso2=NULL
#Salvando Namibia
ISODATA[ISODATA$Country=='Namibia','iso3']= 'NA'
mapDIS=sf::read_sf("shapes")
str(mapDIS)
## sf [256 × 9] (S3: sf/tbl_df/tbl/data.frame)
##  $ iso3       : chr [1:256] NA "CHE" NA "AUT" ...
##  $ status     : chr [1:256] "Adm. by EGY" "Member State" "UK Territory" "Member State" ...
##  $ color_code : chr [1:256] "EGY" "CHE" "GBR" "AUT" ...
##  $ name       : chr [1:256] "Ma'tan al-Sarra" "Switzerland" "Jersey" "Austria" ...
##  $ continent  : chr [1:256] "Africa" "Europe" "Europe" "Europe" ...
##  $ region     : chr [1:256] "Northern Africa" "Western Europe" "Northern Europe" "Western Europe" ...
##  $ iso_3166_1_: chr [1:256] NA "CH" NA "AT" ...
##  $ french_shor: chr [1:256] "Ma'tan al-Sarra" "Suisse" "Jersey" "Autriche" ...
##  $ geometry   :sfc_MULTIPOLYGON of length 256; first list element: List of 1
##   ..$ :List of 1
##   .. ..$ : num [1:5, 1:2] 33.3 34.2 34.1 33.6 33.3 ...
##   ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
##  - attr(*, "sf_column")= chr "geometry"
##  - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA
##   ..- attr(*, "names")= chr [1:8] "iso3" "status" "color_code" "name" ...
#merge iso + variable
DATAVARIABLEDEPENDIENTE=inner_join(ISODATA,data ,by="country") 
#Juntamos información con el shape:
mapDIS2=merge(mapDIS,DATAVARIABLEDEPENDIENTE,by.x='iso_3166_1_',by.y='iso3', all.x = T) #siempre primero el shape
#PRIMERO EN X EL ISO DE SHAPES Y EN Y EL ISO DE DATA
mapDIS2
## Simple feature collection with 256 features and 19 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -180 ymin: -58.49861 xmax: 180 ymax: 83.6236
## Geodetic CRS:  WGS 84
## First 10 features:
##    iso_3166_1_ iso3                          status color_code
## 1           AD  AND                    Member State        AND
## 2           AE  ARE                    Member State        ARE
## 3           AF  AFG                    Member State        AFG
## 4           AG  ATG                    Member State        ATG
## 5           AI  AIA UK Non-Self-Governing Territory        AIA
## 6           AL  ALB                    Member State        ALB
## 7           AM  ARM                    Member State        ARM
## 8           AO  AGO                    Member State        AGO
## 9           AR  ARG                    Member State        ARG
## 10          AS  ASM US Non-Self-Governing Territory        ASM
##                    name continent          region         french_shor
## 1               Andorra    Europe Southern Europe             Andorre
## 2  United Arab Emirates      Asia    Western Asia Émirats arabes unis
## 3           Afghanistan      Asia   Southern Asia         Afghanistan
## 4     Antigua & Barbuda  Americas       Caribbean  Antigua-et-Barbuda
## 5              Anguilla  Americas       Caribbean            Anguilla
## 6               Albania    Europe Southern Europe             Albanie
## 7               Armenia      Asia    Western Asia             Arménie
## 8                Angola    Africa   Middle Africa              Angola
## 9             Argentina  Americas   South America           Argentine
## 10       American Samoa   Oceania       Polynesia      American Samoa
##                 country scoredemo scorelibeco scoreparpol  scorepbi cpiscore
## 1                  <NA>        NA          NA          NA        NA       NA
## 2  United Arab Emirates      2.70    6.234382        50.0 -7.020363 2.230030
## 3                  <NA>        NA          NA          NA        NA       NA
## 4                  <NA>        NA          NA          NA        NA       NA
## 5                  <NA>        NA          NA          NA        NA       NA
## 6               Albania      6.08    4.782365        29.5  6.067882 2.479746
## 7               Armenia      5.35    4.637269        23.5 14.643208 2.509772
## 8                Angola      3.66    1.486916        30.0 11.031830 7.216678
## 9             Argentina      6.95    3.737270        40.9  7.729489 4.664966
## 10                 <NA>        NA          NA          NA        NA       NA
##    educasec gini_ind dianadata        dim1        dim2
## 1        NA       NA      <NA>          NA          NA
## 2      32.5     32.5         2 -0.16588603  0.14434141
## 3        NA       NA      <NA>          NA          NA
## 4        NA       NA      <NA>          NA          NA
## 5        NA       NA      <NA>          NA          NA
## 6      33.2     33.2         2 -0.13449478  0.06374688
## 7      34.4     34.4         2 -0.07726082  0.14300864
## 8      51.3     51.3         1  0.39186594 -0.04890302
## 9      41.4     41.4         1  0.06032366 -0.12662269
## 10       NA       NA      <NA>          NA          NA
##                          geometry
## 1  MULTIPOLYGON (((1.72361 42....
## 2  MULTIPOLYGON (((53.96486 24...
## 3  MULTIPOLYGON (((74.91574 37...
## 4  MULTIPOLYGON (((-61.68459 1...
## 5  MULTIPOLYGON (((-63.15375 1...
## 6  MULTIPOLYGON (((20.07142 42...
## 7  MULTIPOLYGON (((46.54038 38...
## 8  MULTIPOLYGON (((23.98621 -1...
## 9  MULTIPOLYGON (((-68.64312 -...
## 10 MULTIPOLYGON (((-170.6373 -...
library(ggrepel)
base= ggplot(data,aes(x=dim1, y=dim2,label=row.names(dataClus))) 
base + geom_text_repel(size=3, max.overlaps = 50,min.segment.length = unit(0, 'lines'))

Coloreemos el mapa anterior segun el cluster al que corresponden.

mapaleyendaL= ggplot(mapDIS2)+ geom_sf() + theme_light()

mapaleyL= mapaleyendaL + geom_sf(data=mapDIS2,
              aes(fill=`Hapiness_index`),color = "gray")
      
mapa= mapaleyL +
coord_sf() + 
scale_fill_gradient(low = "seashell",  high = "firebrick", breaks=seq(from=0, to=100, by=20)) + theme_void() + 
  
theme(axis.title = element_blank(), axis.text = element_blank(), legend.position = "bottom") + labs(fill=" ") + theme(legend.text = element_text(size = 8)) +
  
labs(title = "VARIABLE DEPENDIENTE: ÍNDICE DE DEMOCRACIA EN EL MUNDO") +
  
theme(
plot.title = element_text(color="#344D67", size=10, face="bold"))