Estadística para el análisis político 2 - POL304


MIDIENDO LA DEMOCRACIA: OTROS FACTORES A TOMAR EN CUENTA

0.Instalamos paquetes

install.packages("psych")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("ggrepel")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("leaflet")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("betareg")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("dplyr")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("oglmx")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("xlsx")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("rgdal")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("openxlsx")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("ggplot2")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("margins")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("htmltab")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
install.packages("httr")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)

1.Carga de datos y limpieza

1.1. Carga de Datos

Descargamos la base de datos de nuestra variable dependiente: Calidad de Democracia

library(htmltab)
demoindex = "https://en.wikipedia.org/wiki/Democracy_Index"
seccion2='//*[@id="mw-content-text"]/div/table[2]/tbody'

democracia= htmltab(doc =demoindex, 
                  which = seccion2 ,encoding = "UTF-8")

Descargamos la base de datos de Mortalidad Infantil:

#Exportamos tabla de datos
library(htmltab) 
urldead = "https://www.cia.gov/library/publications/resources/the-world-factbook/fields/354rank.html" 

deadkids = htmltab(doc = urldead, 
               which ='//*[@id="rankOrder"]', #herramientas de desarrollador
               encoding = "UTF-8") 
## No encoding supplied: defaulting to UTF-8.

Descargamos la base de datos de Alfabetismo :

library(htmltab) 

urlanalf = "https://www.worldatlas.com/articles/the-highest-literacy-rates-in-the-world.html" 

analf = htmltab(doc = urlanalf, 
               which ='//*[@id="artReg-table"]/table', #herramientas de desarrollador
               encoding = "UTF-8") 

Descargamos la base de datos de Esperanza de Vida:

library(htmltab)
urlEsperanzaVida = "https://www.cia.gov/library/publications/the-world-factbook/rankorder/2102rank.html"

esperanza = htmltab(doc = urlEsperanzaVida, 
                which ='//*[@id="rankOrder"]',
                encoding = "UTF-8")
## No encoding supplied: defaulting to UTF-8.

Descargamos la base de datos de Gasto en educación :

library(htmltab) 

urlEducacion = "https://www.cia.gov/library/publications/resources/the-world-factbook/fields/369rank.html"

edu = htmltab(doc = urlEducacion, 
               which ='//*[@id="rankOrder"]',
               encoding = "UTF-8") #Exportamos tabla de la CIA 
## No encoding supplied: defaulting to UTF-8.

Descargamos la base de datos de Gasto en salud:

library(htmltab) 

urlSalud = "https://www.cia.gov/library/publications/resources/the-world-factbook/fields/358rank.html"

salud = htmltab(doc = urlSalud, 
               which ='//*[@id="rankOrder"]',
               encoding = "UTF-8")
## No encoding supplied: defaulting to UTF-8.

Descargamos la base de datos de Libertades de Prensa:

#Llamamos a la base de datos con la tabla de Libertad de prensa
library(openxlsx)
Prensa = "https://docs.google.com/spreadsheets/d/e/2PACX-1vR8GEwySOCwIQ5VfwNpI0Ydluoaokx4x-2y1D1bqIoZU_4WNEYsYdpXVDCEcajnVQ/pub?output=xlsx" 
LibertadPrensa=read.xlsx(Prensa, 
                sheet = 2, 
                startRow = 5,
                skipEmptyRows = T, skipEmptyCols = T) #Exportamos excel del drive a R

Descargamos la base de datos de Libertades Civiles y Derechos Políticos que están en un solo excel:

#Llamamos a la base de datos con la tabla de Libertades civiles y Derechos politicos
library(openxlsx)
noPrensa = "https://docs.google.com/spreadsheets/d/e/2PACX-1vQjtafXVvyArEk7D4Nm_0BcnJ-lFThbS7w5NrN23eJ0G2RBOSjqPdOjkulyhbo1dQ/pub?output=xlsx" 
PRightsCLiber=read.xlsx(noPrensa, 
                sheet = 3, 
                startRow = 1,
                skipEmptyRows = T, skipEmptyCols = T)
PRightsCLiber=PRightsCLiber[,c(1, 10, 15)] #Seleccionamos las variables a utilizar

Libertades Civiles:

LibertadesCiviles=PRightsCLiber[c(1, 3)] #Seleccionamos las dimensiones
names(LibertadesCiviles)=c("Country", "ScoreCivilLib") #nombramos a las dimensiones

DerechosPoliticos:

DerechosPoliticos=PRightsCLiber[c(1, 2)]
names(DerechosPoliticos)=c("Country", "ScorePolRi")

Descargamos la base de datos de PBI (per capita):

library(htmltab)
urlppp = "https://www.cia.gov/library/publications/resources/the-world-factbook/fields/211rank.html" 

ppp = htmltab(doc = urlppp, 
               which ='//*[@id="rankOrder"]', #herramientas de desarrollador
               encoding = "UTF-8")
## No encoding supplied: defaulting to UTF-8.

Descargamos la base de datos Percepción de la corrupción:

library(htmltab) 

corrup = "https://en.wikipedia.org/wiki/Corruption_Perceptions_Index"

indexcorru = htmltab(doc = corrup, 
               which ='//*[@id="mw-content-text"]/div/table[3]/tbody',
               encoding = "UTF-8") 
## Warning: Header dimension doesn't match body dimension
## Warning: Columns [NA] seem to have no data and are removed. Use
## rm_nodata_cols = F to suppress this behavior

Descargamos la base de datos de PBI, la cual será nuestra variable de control:

library(htmltab)
urlPBI = "https://www.cia.gov/library/publications/resources/the-world-factbook/fields/208rank.html" 

PBI = htmltab(doc = urlPBI, 
               which ='//*[@id="rankOrder"]', #herramientas de desarrollador
               encoding = "UTF-8")
## No encoding supplied: defaulting to UTF-8.

1.2.Limpieza de bases de datos

Limpiamos la base de datos de la variable dependiente: Calidad de Democracia

demo = democracia[,c(2,4:7)]
demo[,c(2:5)]=lapply(demo[,c(2:5)], as.numeric)
demo$score=rowSums(demo[,c(2:5)])
demo[,c(2:5)]=NULL
names(demo)= c('Country','demoindex')
demo$demoindex=as.numeric(demo$demoindex)
demo$Country=trimws(demo$Country,whitespace = "[\\h\\v]")

Limpiamos la base de datos de Mortalidad Infantil:

#Eliminamos las columnas que no nos sirven y renombramos los que nos quedan
deadkids = deadkids[,c(2,3)]
names(deadkids) = c("Country" , "Mortalidadinf") #Renombramos las dimensiones
deadkids$Mortalidadinf = as.numeric(deadkids$Mortalidadinf) #De character a numerico 

Limpiamos la base de datos de Alfabetismo:

analf$Rank=NULL 
names(analf) = c("Country" , "Alfabetismo")

#La columna Analfabetismo debe ser cambiada a numerica
#Para esto, se debe reemplazar el caracter "%" por vacio 
analf$Alfabetismo =gsub(" %", "", analf$Alfabetismo) #Reemplazar un solo caracter 
analf$Alfabetismo = as.numeric(analf$Alfabetismo)
## Warning: NAs introduced by coercion

Limpiamos la base de datos de Esperenza de vida:

#Eliminamos las columnas que no nos sirven y renombramos los que nos quedan
esperanza = esperanza[,c(2,3)]
names(esperanza)=c("Country", "AñosEstim")
esperanza$AñosEstim=as.numeric(esperanza$AñosEstim)

Limpiamos la base de datos de Gasto en Educacion:

edu=edu[c(2:3)] #Seleccionamos columnas 
names(edu)=c("Country","EduPBI") #Ponemos nombres a las dimensiones seleccionadas
edu$EduPBI =   gsub(",", "", edu$EduPBI) #Suplantamos la "," por ""
edu$EduPBI=as.numeric(edu$EduPBI) #Convertimos a númerico a la variable seleccionada
edu$Country=trimws(edu$Country,whitespace = "[\\h\\v]") #Por cuestiones de precausión eliminamos si hay algun whitespace

Limpiamos la base de datos de Gasto en Salud:

salud=salud[c(2,3)]
names(salud)=c("Country","SaludPBI")
salud$SaludPBI=as.numeric(salud$SaludPBI)
salud$Country=trimws(salud$Country,whitespace = "[\\h\\v]")

Limpiamos la base de datos de Libertad de Prensa:

LibertadPrensa=LibertadPrensa[,c(1, 181)] #Seleccionamos columnas
names(LibertadPrensa)=c("Country", "PrensaScore") #Nombres a la variable
LibertadPrensa$PrensaScore=as.numeric(LibertadPrensa$PrensaScore) #Convertimos a númerico
## Warning: NAs introduced by coercion
str(LibertadPrensa)
## 'data.frame':    210 obs. of  2 variables:
##  $ Country    : chr  "Afghanistan" "Albania" "Algeria" "Andorra" ...
##  $ PrensaScore: num  60 51 65 15 73 34 46 63 22 22 ...

Limpiamos la base de datos de PBI (per capita):

ppp=ppp[-c(1,4)] #Eliminamos la columna 1 y 4
names(ppp)=c("Country","pbi") #Nombrar a las variables
ppp$pbi= gsub("\\$|\\,", "", ppp$pbi) #Sustitución
ppp$pbi= as.numeric(ppp$pbi) #Convertimos a númerico

*No hay necesidad de limpiar la base de datos de Libertades Civiles y Derechos políticos, ya que lo limpiamos en el anterior chunk

Limpiamos la base de datos de Percepcion de la corrupcion:

indexcorru=indexcorru[c(2,3)]
names(indexcorru)=c("Country","Corrup")
indexcorru$Corrup=as.numeric(indexcorru$Corrup)
indexcorru$Country=trimws(indexcorru$Country,whitespace = "[\\h\\v]")
row.names(indexcorru) = NULL #reseteamos el indice
PBI=PBI[-c(1,4)] #Eliminamos la columna 1 y 4
names(PBI)=c("Country","PBINacional") #Nombrar a las variables
PBI$PBINacional= gsub("\\$|\\,", "", PBI$PBINacional) #Sustitución
PBI$PBINacional= as.numeric(PBI$PBINacional) #Convertimos a númerico

2.Aplicación del merge

Para evitar que se eliminen paises con distinta manera de escritura, emplearemos la siguiente estrategia: 1. Hacer un merge donde se incluya todos los casos 2. Buscar que paises estan escritos de distinta manera 3. Renombrar los paises que estan escritos de manera distinta

Despues realizamos los merges de nuestras dimensiones

Primero el merge de prueba entre Alfabetismo y Mortalidad Infantil:

#Primero verificamos que no se vayan paises porque tienen nombres distintos en las dos bases de datos. Para esto, creamos un merge 'borrador' que nos permitira ver los paises que se perderian si es que no les cambiamos de nombre. 
bye1=merge(analf,deadkids, all.x=T,all.y=T)

Cambiamos de nombre a los paises de la variable Alfabetismo:

#Despues de emplear el codigo bye1[!complete.cases(bye1),] verificamos cuales son los países que se repiten
analf[183,1] = "Cote d'Ivoire"  
analf[53,1] = "Micronesia"  
analf[66,1] = "South Korea"  
analf[137,1] = "Congo Brazzaville"  
analf[90,1] = "Venezuela" 
analf[88,1] = "Gaza Strip"
analf[78,1] = "Brunei"  
analf[70,1] = "Macedonia"  
analf[100,1] = "Vietnam"  
analf[7,1] = "North Korea" 
analf[110,1] = "Bolivia" 
analf[126,1] = "Syria" 
analf[132,1] = "Iran" 
analf[146,1] = "Congo Kinshasa" 
analf[150,1] = "Laos" 
analf[160,1] = "Tanzania" 
analf[21,1] = "Russia" 
analf[29,1] = "Moldova" 

Cambiamos de nombre a los paises de la variable Mortalidad infantil:

deadkids[8,1] = "Congo Kinshasa" #
deadkids[16,1] = "Gambia" #
deadkids[212,1] = "South Korea" #
deadkids[81,1] = "Micronesia" #
deadkids[126,1] = "Bahamas" #
deadkids[75,1] = "North Korea" 
deadkids[214,1] = "Czech Republic"
deadkids[23,1] = "Congo Brazzaville"

Ahora si, el merge entre Alfabetismo y Mortalidad Infantil:

deanalf = merge(analf, deadkids, by='Country')

Ahora el merge de prueba entre el primer merge y Esperanza de Vida :

bye2=merge(deanalf,esperanza, all.x=T,all.y=T) #incluyendo todos los casos, incluso los que tienen algun NA 

Empleamos este código bye2[!complete.cases(bye2),] como estrategia para identifcar que paises estan con doble escritura, despues de emplear el codigo identificamos las posiciones de los nombres escrito de manera distinta:

esperanza[11,1] = "South Korea"
esperanza[210,1] = "Congo Kinshasa"
esperanza[206,1] = "Congo Brazzaville"
esperanza[180,1] = "Gambia"
esperanza[56,1] = "Czech Republic"
esperanza[139,1] = "Micronesia"
esperanza[145,1] = "Bahamas"
esperanza[157,1] = "North Korea"

Ahora el merge “oficial” de Alfabetismo, Mortalidad infantil y Esperanza:

idhtotal = merge(deanalf, esperanza, by='Country')

Ahora el merge entre variables Salud y Educacion:

edusalud=merge(edu,salud,all.x=T,all.y=T)

Vemos que países estan escritos de manera distinta:

edusalud[!complete.cases(edusalud),] #Revisar casos incompletos
##                      Country EduPBI SaludPBI
## 3                    Algeria     NA      7.2
## 9                      Aruba    6.1       NA
## 13              Bahamas, The     NA      7.7
## 21                   Bermuda    1.5       NA
## 24    Bosnia and Herzegovina     NA      9.6
## 27    British Virgin Islands    6.3       NA
## 40                     China     NA      5.5
## 50                   Curacao    4.9       NA
## 56        Dominican Republic     NA      4.4
## 58                     Egypt     NA      5.6
## 60         Equatorial Guinea     NA      3.8
## 61                   Eritrea     NA      3.3
## 70                Gaza Strip    5.3       NA
## 74                    Greece     NA      8.1
## 82                 Hong Kong    3.3       NA
## 88                      Iraq     NA      5.5
## 97                  Kiribati     NA     10.2
## 99                    Kuwait     NA      3.0
## 106                    Libya     NA      5.0
## 107            Liechtenstein    2.6       NA
## 110                    Macau    3.1       NA
## 111                Macedonia     NA      6.5
## 118         Marshall Islands     NA     17.1
## 126               Montenegro     NA      6.4
## 127               Montserrat    5.1       NA
## 131                    Nauru     NA      3.3
## 137                  Nigeria     NA      3.7
## 138                     Niue     NA      7.4
## 142                    Palau     NA      9.0
## 144         Papua New Guinea     NA      4.3
## 150              Puerto Rico    6.1       NA
## 161             Saudi Arabia     NA      4.7
## 175                 Suriname     NA      5.7
## 184                    Tonga     NA      5.2
## 185      Trinidad and Tobago     NA      5.9
## 189 Turks and Caicos Islands    3.3       NA
## 190                   Tuvalu     NA     16.5
## 193     United Arab Emirates     NA      3.6
## 201                West Bank    5.3       NA
## 202                    Yemen     NA      5.6
## 203                   Zambia     NA      5.0

Renombramos paises:

#Cambiamos de nombre
edusalud[44, 1] = "Congo Brazzaville"
edusalud[43, 1]= "Congo Kinshasa"
edusalud[13,1] = "Bahamas"
edusalud[122,1] = "Micronesia"
edusalud[98,1] = "South Korea"
edusalud[69,1] = "Gambia"
edusalud[52,1] = "Czech Republic"

Ya con el merge, cambiamos de character a numerico:

edusalud$EduPBI=as.numeric(edusalud$EduPBI)
edusalud$SaludPBI=as.numeric(edusalud$SaludPBI)

Revisamos datos incompletos :

edusalud[!complete.cases(edusalud),] 
##                      Country EduPBI SaludPBI
## 3                    Algeria     NA      7.2
## 9                      Aruba    6.1       NA
## 13                   Bahamas     NA      7.7
## 21                   Bermuda    1.5       NA
## 24    Bosnia and Herzegovina     NA      9.6
## 27    British Virgin Islands    6.3       NA
## 40                     China     NA      5.5
## 50                   Curacao    4.9       NA
## 56        Dominican Republic     NA      4.4
## 58                     Egypt     NA      5.6
## 60         Equatorial Guinea     NA      3.8
## 61                   Eritrea     NA      3.3
## 70                Gaza Strip    5.3       NA
## 74                    Greece     NA      8.1
## 82                 Hong Kong    3.3       NA
## 88                      Iraq     NA      5.5
## 97                  Kiribati     NA     10.2
## 99                    Kuwait     NA      3.0
## 106                    Libya     NA      5.0
## 107            Liechtenstein    2.6       NA
## 110                    Macau    3.1       NA
## 111                Macedonia     NA      6.5
## 118         Marshall Islands     NA     17.1
## 126               Montenegro     NA      6.4
## 127               Montserrat    5.1       NA
## 131                    Nauru     NA      3.3
## 137                  Nigeria     NA      3.7
## 138                     Niue     NA      7.4
## 142                    Palau     NA      9.0
## 144         Papua New Guinea     NA      4.3
## 150              Puerto Rico    6.1       NA
## 161             Saudi Arabia     NA      4.7
## 175                 Suriname     NA      5.7
## 184                    Tonga     NA      5.2
## 185      Trinidad and Tobago     NA      5.9
## 189 Turks and Caicos Islands    3.3       NA
## 190                   Tuvalu     NA     16.5
## 193     United Arab Emirates     NA      3.6
## 201                West Bank    5.3       NA
## 202                    Yemen     NA      5.6
## 203                   Zambia     NA      5.0

Nos quedamos solo con los datos completos:

edusalud = edusalud[complete.cases(edusalud),]

Ahora juntamos edusalud con idhtotal

Merge de prueba para verificar que no haya países con diversas escrituras:

bye3=merge(idhtotal, edusalud, all.x=T,all.y=T)

#Empleamos bye3[!complete.cases(bye3),]  para observar que paises tenian distinta escritura y paises con data incompleta

Merge de Idh y edusalud, considerando a los casos completos y de igual escritura:

idhedusalud = merge(idhtotal, edusalud, by='Country')

idhedusalud = idhedusalud[complete.cases(idhedusalud),]
idhedusalud[26,1] ="Cape Verde" #Cambiamos de Cabo a Cape 

Revisamos que no haya casos incompletos:

idhedusalud[!complete.cases(idhedusalud),] #Revisar casos completos
## [1] Country       Alfabetismo   Mortalidadinf AñosEstim     EduPBI       
## [6] SaludPBI     
## <0 rows> (or 0-length row.names)

Eliminamos todos los bye para mas orden:

bye1 = NULL
bye2 = NULL
bye3 = NULL

Ahora el merge entre libertades

Primero el merge entre Derechos Politicos y Libertades civiles:

LibertadesIncompleto=merge(DerechosPoliticos, LibertadesCiviles)

Verificamos que no hayan casos incompletos:

LibertadesIncompleto[!complete.cases(LibertadesIncompleto),]
## [1] Country       ScorePolRi    ScoreCivilLib
## <0 rows> (or 0-length row.names)

Segundo, el merge de prueba para identificar a los paises con distinta escritura:

bye4=merge(LibertadesIncompleto, LibertadPrensa, all.x=T,all.y=T)
# Empleamos el bye4[!complete.cases(bye4),] para revisar datos incompleto y paises con doble escritura

Renombramos los paises que tienen doble escritura:

LibertadPrensa[42,1] = "Cote d'Ivoire"
LibertadPrensa[155,1] = "Sao Tome and Principe"
LibertadesIncompleto[76,1] = "Hong Kong"
LibertadesIncompleto[172,1] = "Saint Lucia"
LibertadesIncompleto[173,1] = "Saint Vincent and the Grenadines"
LibertadesIncompleto[44,1] = "Crimea"

Tercero hacer merge entre todas las libertades (Prensa, Derechos Politicos y Libertades Civiles):

Libertades=merge(LibertadesIncompleto, LibertadPrensa)

Renombramos a Congo:

Libertades[39, 1] = "Congo Brazzaville"
Libertades[40, 1] = "Congo Kinshasa"

Ahora agregamos PBI a nuestra data:

bye5=merge(Libertades, ppp, all.x=T,all.y=T) #merge de prueba 

#Empleamos el bye5[!complete.cases(bye5),] para revisar datos incompletos y paises con doble escritura

Renombramos a los paises:

ppp[161,1] = "Congo Brazzaville"
ppp[62,1] = "Bahamas"
ppp[157,1] = "Cape Verde"
ppp[226,1] = "Congo Kinshasa"
ppp[57,1] = "Czech Republic"
ppp[197,1] = "Gambia"
ppp[46,1] = "South Korea"
ppp[214,1] = "North Korea"
ppp[189,1] = "Micronesia"
Libertades[175,1] = "Gambia"

Merge entre PBI (percapita) y Libertades:

LibPBI=merge(Libertades, ppp)

Eliminamos los borradores:

bye4 = NULL
bye5 = NULL

Juntamos las variables LibPBI con idhedusalud:

#Verificamos que los paises esten bien escritos
libidh=merge(LibPBI, idhedusalud, all.x= T, all.y=T)
# Empleamos el libidh[!complete.cases(libidh),] para encontrar paises con doble escritura 

Al observar que no hay paises de distinta escritura realizamos el merge:

libidh=merge(LibPBI, idhedusalud, by= "Country")

Antes de continuar, hemos detectado que nuestras dimensiones de Libertad de Prensa y Mortalidad infantil son contraintuitivas. Por ende, lo convertimos a intituivas:

libidh$PrensaScore= 100 - libidh$PrensaScore

libidh$Mortalidadinf = 110 - libidh$Mortalidadinf

Merge de las Var Ind, con la variable Percepcion de la corrupcion:

#Verificamos que los paises esten bien escritos
mergePen=merge(libidh, indexcorru, all.x= T, all.y=T)
# Empleamos el mergePen[!complete.cases(mergePen),] para encontrar paises con doble escritura 

Renombramos paises:

indexcorru[164,1] = "Congo Brazzaville"
indexcorru[162,1] = "Congo Kinshasa"
indexcorru[109,1] = "Cote d'Ivoire"
indexcorru[64,1] = "Sao Tome and Principe"

Al modificar los nombres de paises con distinta escritura realizamos el merge:

mergePen=merge(libidh, indexcorru, by= "Country")
#Verificamos que los paises esten bien escritos
mergeVarInd=merge(mergePen, PBI, all.x= T, all.y=T)
# Empleamos el mergeVarInd[!complete.cases(mergeVarInd),] para encontrar paises con doble escritura 
mergeVarInd[!complete.cases(mergeVarInd),] #para encontrar paises con doble escritura 
##                                           Country ScorePolRi ScoreCivilLib
## 3                                         Algeria         NA            NA
## 4                                  American Samoa         NA            NA
## 5                                         Andorra         NA            NA
## 7                                        Anguilla         NA            NA
## 8                             Antigua and Barbuda         NA            NA
## 11                                          Aruba         NA            NA
## 15                                   Bahamas, The         NA            NA
## 21                                         Belize         NA            NA
## 23                                        Bermuda         NA            NA
## 26                         Bosnia and Herzegovina         NA            NA
## 29                         British Virgin Islands         NA            NA
## 33                                          Burma         NA            NA
## 35                                     Cabo Verde         NA            NA
## 39                                     Cape Verde         37            53
## 40                                 Cayman Islands         NA            NA
## 44                                          China         NA            NA
## 47                              Congo Brazzaville          5            22
## 48                                 Congo Kinshasa          4            15
## 49              Congo, Democratic Republic of the         NA            NA
## 50                         Congo, Republic of the         NA            NA
## 51                                   Cook Islands         NA            NA
## 56                                        Curacao         NA            NA
## 58                                 Czech Republic         38            56
## 59                                        Czechia         NA            NA
## 61                                       Djibouti         NA            NA
## 63                             Dominican Republic         NA            NA
## 65                                          Egypt         NA            NA
## 67                              Equatorial Guinea         NA            NA
## 68                                        Eritrea         NA            NA
## 70                                       Eswatini         NA            NA
## 72              Falkland Islands (Islas Malvinas)         NA            NA
## 73                                  Faroe Islands         NA            NA
## 74                                           Fiji         NA            NA
## 77                               French Polynesia         NA            NA
## 79                                         Gambia          8            12
## 80                                    Gambia, The         NA            NA
## 84                                      Gibraltar         NA            NA
## 85                                         Greece         NA            NA
## 86                                      Greenland         NA            NA
## 88                                           Guam         NA            NA
## 90                                       Guernsey         NA            NA
## 96                                      Hong Kong         NA            NA
## 102                                          Iraq         NA            NA
## 104                                   Isle of Man         NA            NA
## 109                                        Jersey         NA            NA
## 113                                      Kiribati         NA            NA
## 114                                  Korea, North         NA            NA
## 115                                  Korea, South         NA            NA
## 116                                        Kosovo         NA            NA
## 117                                        Kuwait         NA            NA
## 124                                         Libya         NA            NA
## 125                                 Liechtenstein         NA            NA
## 128                                         Macau         NA            NA
## 129                                     Macedonia         NA            NA
## 136                              Marshall Islands         NA            NA
## 140               Micronesia, Federated States of         NA            NA
## 142                                        Monaco         NA            NA
## 144                                    Montenegro         NA            NA
## 145                                    Montserrat         NA            NA
## 149                                         Nauru         NA            NA
## 152                                 New Caledonia         NA            NA
## 156                                       Nigeria         NA            NA
## 157                                          Niue         NA            NA
## 158                      Northern Mariana Islands         NA            NA
## 162                                         Palau         NA            NA
## 164                              Papua New Guinea         NA            NA
## 170                                   Puerto Rico         NA            NA
## 175 Saint Helena, Ascension, and Tristan da Cunha         NA            NA
## 176                         Saint Kitts and Nevis         NA            NA
## 178                                  Saint Martin         NA            NA
## 179                     Saint Pierre and Miquelon         NA            NA
## 181                                         Samoa         NA            NA
## 182                                    San Marino         NA            NA
## 184                                  Saudi Arabia         NA            NA
## 187                                    Seychelles         NA            NA
## 190                                  Sint Maarten         NA            NA
## 194                                       Somalia         NA            NA
## 196                                   South Korea         32            50
## 197                                   South Sudan         NA            NA
## 201                                      Suriname         NA            NA
## 205                                        Taiwan         NA            NA
## 211                                       Tokelau         NA            NA
## 212                                         Tonga         NA            NA
## 213                           Trinidad and Tobago         NA            NA
## 217                      Turks and Caicos Islands         NA            NA
## 218                                        Tuvalu         NA            NA
## 221                          United Arab Emirates         NA            NA
## 226                                       Vanuatu         NA            NA
## 229                                Virgin Islands         NA            NA
## 230                             Wallis and Futuna         NA            NA
## 231                                     West Bank         NA            NA
## 232                                Western Sahara         NA            NA
## 233                                         Yemen         NA            NA
## 234                                        Zambia         NA            NA
##     PrensaScore   pbi Alfabetismo Mortalidadinf AñosEstim EduPBI SaludPBI
## 3            NA    NA          NA            NA        NA     NA       NA
## 4            NA    NA          NA            NA        NA     NA       NA
## 5            NA    NA          NA            NA        NA     NA       NA
## 7            NA    NA          NA            NA        NA     NA       NA
## 8            NA    NA          NA            NA        NA     NA       NA
## 11           NA    NA          NA            NA        NA     NA       NA
## 15           NA    NA          NA            NA        NA     NA       NA
## 21           NA    NA          NA            NA        NA     NA       NA
## 23           NA    NA          NA            NA        NA     NA       NA
## 26           NA    NA          NA            NA        NA     NA       NA
## 29           NA    NA          NA            NA        NA     NA       NA
## 33           NA    NA          NA            NA        NA     NA       NA
## 35           NA    NA          NA            NA        NA     NA       NA
## 39           73  7000          85          88.9      72.4    5.2      4.8
## 40           NA    NA          NA            NA        NA     NA       NA
## 44           NA    NA          NA            NA        NA     NA       NA
## 47           40  6800          79          56.5      59.8    4.6      5.2
## 48           18   800          75          43.3      57.7    1.5      4.3
## 49           NA    NA          NA            NA        NA     NA       NA
## 50           NA    NA          NA            NA        NA     NA       NA
## 51           NA    NA          NA            NA        NA     NA       NA
## 56           NA    NA          NA            NA        NA     NA       NA
## 58           79 35500          99         107.4      78.8    5.8      7.4
## 59           NA    NA          NA            NA        NA     NA       NA
## 61           NA    NA          NA            NA        NA     NA       NA
## 63           NA    NA          NA            NA        NA     NA       NA
## 65           NA    NA          NA            NA        NA     NA       NA
## 67           NA    NA          NA            NA        NA     NA       NA
## 68           NA    NA          NA            NA        NA     NA       NA
## 70           NA    NA          NA            NA        NA     NA       NA
## 72           NA    NA          NA            NA        NA     NA       NA
## 73           NA    NA          NA            NA        NA     NA       NA
## 74           NA    NA          NA            NA        NA     NA       NA
## 77           NA    NA          NA            NA        NA     NA       NA
## 79           13  2600          53          51.6      65.1    3.1      7.3
## 80           NA    NA          NA            NA        NA     NA       NA
## 84           NA    NA          NA            NA        NA     NA       NA
## 85           NA    NA          NA            NA        NA     NA       NA
## 86           NA    NA          NA            NA        NA     NA       NA
## 88           NA    NA          NA            NA        NA     NA       NA
## 90           NA    NA          NA            NA        NA     NA       NA
## 96           NA    NA          NA            NA        NA     NA       NA
## 102          NA    NA          NA            NA        NA     NA       NA
## 104          NA    NA          NA            NA        NA     NA       NA
## 109          NA    NA          NA            NA        NA     NA       NA
## 113          NA    NA          NA            NA        NA     NA       NA
## 114          NA    NA          NA            NA        NA     NA       NA
## 115          NA    NA          NA            NA        NA     NA       NA
## 116          NA    NA          NA            NA        NA     NA       NA
## 117          NA    NA          NA            NA        NA     NA       NA
## 124          NA    NA          NA            NA        NA     NA       NA
## 125          NA    NA          NA            NA        NA     NA       NA
## 128          NA    NA          NA            NA        NA     NA       NA
## 129          NA    NA          NA            NA        NA     NA       NA
## 136          NA    NA          NA            NA        NA     NA       NA
## 140          NA    NA          NA            NA        NA     NA       NA
## 142          NA    NA          NA            NA        NA     NA       NA
## 144          NA    NA          NA            NA        NA     NA       NA
## 145          NA    NA          NA            NA        NA     NA       NA
## 149          NA    NA          NA            NA        NA     NA       NA
## 152          NA    NA          NA            NA        NA     NA       NA
## 156          NA    NA          NA            NA        NA     NA       NA
## 157          NA    NA          NA            NA        NA     NA       NA
## 158          NA    NA          NA            NA        NA     NA       NA
## 162          NA    NA          NA            NA        NA     NA       NA
## 164          NA    NA          NA            NA        NA     NA       NA
## 170          NA    NA          NA            NA        NA     NA       NA
## 175          NA    NA          NA            NA        NA     NA       NA
## 176          NA    NA          NA            NA        NA     NA       NA
## 178          NA    NA          NA            NA        NA     NA       NA
## 179          NA    NA          NA            NA        NA     NA       NA
## 181          NA    NA          NA            NA        NA     NA       NA
## 182          NA    NA          NA            NA        NA     NA       NA
## 184          NA    NA          NA            NA        NA     NA       NA
## 187          NA    NA          NA            NA        NA     NA       NA
## 190          NA    NA          NA            NA        NA     NA       NA
## 194          NA    NA          NA            NA        NA     NA       NA
## 196          66 39500          98         107.0      82.5    5.3      7.4
## 197          NA    NA          NA            NA        NA     NA       NA
## 201          NA    NA          NA            NA        NA     NA       NA
## 205          NA    NA          NA            NA        NA     NA       NA
## 211          NA    NA          NA            NA        NA     NA       NA
## 212          NA    NA          NA            NA        NA     NA       NA
## 213          NA    NA          NA            NA        NA     NA       NA
## 217          NA    NA          NA            NA        NA     NA       NA
## 218          NA    NA          NA            NA        NA     NA       NA
## 221          NA    NA          NA            NA        NA     NA       NA
## 226          NA    NA          NA            NA        NA     NA       NA
## 229          NA    NA          NA            NA        NA     NA       NA
## 230          NA    NA          NA            NA        NA     NA       NA
## 231          NA    NA          NA            NA        NA     NA       NA
## 232          NA    NA          NA            NA        NA     NA       NA
## 233          NA    NA          NA            NA        NA     NA       NA
## 234          NA    NA          NA            NA        NA     NA       NA
##     Corrup PBINacional
## 3       NA   6.300e+11
## 4       NA   6.580e+08
## 5       NA   3.327e+09
## 7       NA   1.754e+08
## 8       NA   2.398e+09
## 11      NA   4.158e+09
## 15      NA   1.206e+10
## 21      NA   3.218e+09
## 23      NA   6.127e+09
## 26      NA   4.483e+10
## 29      NA   5.000e+08
## 33      NA   3.298e+11
## 35      NA   3.777e+09
## 39      57          NA
## 40      NA   2.507e+09
## 44      NA   2.321e+13
## 47      19          NA
## 48      19          NA
## 49      NA   6.860e+10
## 50      NA   2.939e+10
## 51      NA   2.999e+08
## 56      NA   3.128e+09
## 58      59          NA
## 59      NA   3.759e+11
## 61      NA   3.640e+09
## 63      NA   1.730e+11
## 65      NA   1.204e+12
## 67      NA   3.152e+10
## 68      NA   9.402e+09
## 70      NA   1.160e+10
## 72      NA   2.064e+08
## 73      NA   2.001e+09
## 74      NA   8.629e+09
## 77      NA   5.490e+09
## 79      37          NA
## 80      NA   5.556e+09
## 84      NA   2.044e+09
## 85      NA   2.993e+11
## 86      NA   2.413e+09
## 88      NA   5.793e+09
## 90      NA   3.465e+09
## 96      NA   4.559e+11
## 102     NA   6.493e+11
## 104     NA   6.792e+09
## 109     NA   5.569e+09
## 113     NA   2.270e+08
## 114     NA   4.000e+10
## 115     NA   2.035e+12
## 116     NA   1.960e+10
## 117     NA   2.897e+11
## 124     NA   6.197e+10
## 125     NA   4.978e+09
## 128     NA   7.182e+10
## 129     NA   3.103e+10
## 136     NA   1.960e+08
## 140     NA   3.480e+08
## 142     NA   7.672e+09
## 144     NA   1.108e+10
## 145     NA   1.674e+08
## 149     NA   1.600e+08
## 152     NA   1.111e+10
## 156     NA   1.121e+12
## 157     NA   1.001e+07
## 158     NA   1.242e+09
## 162     NA   2.640e+08
## 164     NA   3.019e+10
## 170     NA   1.300e+11
## 175     NA   3.110e+07
## 176     NA   1.550e+09
## 178     NA   5.615e+08
## 179     NA   2.613e+08
## 181     NA   1.137e+09
## 182     NA   2.064e+09
## 184     NA   1.775e+12
## 187     NA   2.750e+09
## 190     NA   3.658e+08
## 194     NA   2.044e+10
## 196     57          NA
## 197     NA   2.001e+10
## 201     NA   8.688e+09
## 205     NA   1.189e+12
## 211     NA   1.500e+06
## 212     NA   5.910e+08
## 213     NA   4.285e+10
## 217     NA   6.320e+08
## 218     NA   4.200e+07
## 221     NA   6.960e+11
## 226     NA   7.720e+08
## 229     NA   3.872e+09
## 230     NA   6.000e+07
## 231     NA   2.122e+10
## 232     NA   9.065e+08
## 233     NA   7.363e+10
## 234     NA   6.893e+10
PBI[133,1] = "Congo Brazzaville"
PBI[182,1] = "Cape Verde"
PBI[103,1] = "Congo Kinshasa"
PBI[49,1] = "Czech Republic"
PBI[176,1] = "Gambia"
PBI[14,1] = "South Korea"

Al observar que no hay paises de distinta escritura realizamos el merge:

mergeVarInd=merge(mergePen, PBI, by= "Country")

Ahora el Merge total de todas nuestras variables

Primero, hacemos el merge de prueba entre la data “mergeVarInd” y nuestra variable dependiente “demo”:

bye6 = merge(demo, mergeVarInd, all.x= T, all.y=T)
#Empleamos bye6[!complete.cases(bye6),] para encontrar que paises estan escritas de manera distinta

Renombramos paises:

demo[165,1] = "Congo Kinshasa"
demo[131,1] = "Congo Brazzaville"
demo[113,1] = "Cote d'Ivoire"

Ahora si, el merge entre todas nuestras variables independientes:

datatotal = merge(demo, mergeVarInd, by= "Country")

Eliminamos bye6:

bye6 = NULL 

Obtenemos el verdadero gasto tanto en Salud como en Educacion de los paises Multiplicamos el PBI con el porcentaje del PBI que se destina a la Salud:

PBI_multi=datatotal[c(6)]
GastoSalud=datatotal[c(11)]/100
Multi1=PBI_multi*GastoSalud
names(Multi1) = "GastoSalud"

Multiplicamos el PBI con el porcentaje del PBI que se destina a la Educacion:

GastoEdu=datatotal[c(10)]/100
Multi2=PBI_multi*GastoEdu
names(Multi2) = "GastoEdu"

Merge entre ambas multiplicaciones:

datatotal= cbind(datatotal, Multi1, Multi2)
datatotal$EduPBI=NULL
datatotal$SaludPBI=NULL
datatotal$pbi=NULL

3. Descripción de datos

Conozcamos los nombres de nuestras variables:

names(datatotal)
##  [1] "Country"       "demoindex"     "ScorePolRi"    "ScoreCivilLib"
##  [5] "PrensaScore"   "Alfabetismo"   "Mortalidadinf" "AñosEstim"    
##  [9] "Corrup"        "PBINacional"   "GastoSalud"    "GastoEdu"

¿Cuantos elementos tenemos?:

nrow(datatotal)
## [1] 138

Contamos con 138 paises en nuestra data

observemos la estructura de nuestras dimensiones:

str(datatotal)
## 'data.frame':    138 obs. of  12 variables:
##  $ Country      : chr  "Afghanistan" "Albania" "Angola" "Argentina" ...
##  $ demoindex    : num  11 22.3 15.2 26.9 18.4 ...
##  $ ScorePolRi   : num  10 28 10 33 16 40 37 4 2 20 ...
##  $ ScoreCivilLib: num  14 40 14 49 29 58 58 10 10 27 ...
##  $ PrensaScore  : num  40 49 27 54 37 78 78 10 13 38 ...
##  $ Alfabetismo  : num  32 97 71 98 100 99 98 100 95 60 ...
##  $ Mortalidadinf: num  1.5 98.4 44.2 100.5 97.7 ...
##  $ AñosEstim    : num  51.7 78.5 60.2 77.3 74.9 82.3 81.6 72.8 79 73.4 ...
##  $ Corrup       : num  16 36 19 40 35 77 76 25 36 26 ...
##  $ PBINacional  : num  6.94e+10 3.60e+10 1.94e+11 9.22e+11 2.83e+10 ...
##  $ GastoSalud   : num  164 1025 224 1003 428 ...
##  $ GastoEdu     : num  78 500 238 1170 266 ...

Observamos el minimo, maximo, la media, mediana de nuestras dimensiones:

summary(datatotal)
##    Country            demoindex       ScorePolRi    ScoreCivilLib  
##  Length:138         Min.   : 5.24   Min.   :-3.00   Min.   : 2.00  
##  Class :character   1st Qu.:14.73   1st Qu.:12.25   1st Qu.:24.00  
##  Mode  :character   Median :22.84   Median :27.00   Median :36.00  
##                     Mean   :22.53   Mean   :24.17   Mean   :35.88  
##                     3rd Qu.:29.07   3rd Qu.:36.00   3rd Qu.:51.75  
##                     Max.   :39.64   Max.   :40.00   Max.   :60.00  
##   PrensaScore     Alfabetismo     Mortalidadinf      AñosEstim    
##  Min.   : 2.00   Min.   : 15.00   Min.   :  1.50   Min.   :50.60  
##  1st Qu.:34.00   1st Qu.: 73.00   1st Qu.: 72.62   1st Qu.:64.60  
##  Median :49.00   Median : 93.00   Median : 93.90   Median :74.00  
##  Mean   :50.07   Mean   : 82.93   Mean   : 86.20   Mean   :71.66  
##  3rd Qu.:70.50   3rd Qu.: 99.00   3rd Qu.:104.75   3rd Qu.:78.45  
##  Max.   :92.00   Max.   :100.00   Max.   :108.40   Max.   :85.30  
##      Corrup       PBINacional          GastoSalud         GastoEdu     
##  Min.   :13.00   Min.   :1.319e+09   Min.   :   29.4   Min.   :   8.4  
##  1st Qu.:29.00   1st Qu.:3.611e+10   1st Qu.:  192.2   1st Qu.: 171.8  
##  Median :37.50   Median :1.039e+11   Median :  767.1   Median : 529.8  
##  Mean   :44.08   Mean   :6.875e+11   Mean   : 1592.3   Mean   :1004.0  
##  3rd Qu.:58.00   3rd Qu.:4.493e+11   3rd Qu.: 2031.2   3rd Qu.:1487.9  
##  Max.   :88.00   Max.   :1.949e+13   Max.   :10225.8   Max.   :5479.6

4.Análisis Factorial

library(psych)

Antes de desarrollar el análisis factorial, pasaremos los nombres de los paises al row.names y eliminamos la columna de los nombres de los paises (Country):

row.names(datatotal) = datatotal$Country
datatotal$Country = NULL 

Asimismo, estadarizamos nuestras dimensiones para poder desarrollar nuestro analisis factorial:

total5_s = scale(datatotal[c(2:11)]) 

Creamos data frame:

total5_s=as.data.frame(total5_s)

Confirmamos que esten estandarizados, al fijarnos que la media es 0:

summary(total5_s)
##    ScorePolRi      ScoreCivilLib        PrensaScore      
##  Min.   :-2.0976   Min.   :-2.068443   Min.   :-2.07479  
##  1st Qu.:-0.9204   1st Qu.:-0.725459   1st Qu.:-0.69368  
##  Median : 0.2182   Median : 0.007078   Median :-0.04629  
##  Mean   : 0.0000   Mean   : 0.000000   Mean   : 0.00000  
##  3rd Qu.: 0.9129   3rd Qu.: 0.968532   3rd Qu.: 0.88164  
##  Max.   : 1.2217   Max.   : 1.472151   Max.   : 1.80957  
##   Alfabetismo      Mortalidadinf       AñosEstim           Corrup       
##  Min.   :-3.2538   Min.   :-3.8563   Min.   :-2.4549   Min.   :-1.5881  
##  1st Qu.:-0.4755   1st Qu.:-0.6182   1st Qu.:-0.8226   1st Qu.:-0.7705  
##  Median : 0.4825   Median : 0.3504   Median : 0.2734   Median :-0.3362  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.7699   3rd Qu.: 0.8443   3rd Qu.: 0.7922   3rd Qu.: 0.7113  
##  Max.   : 0.8178   Max.   : 1.0105   Max.   : 1.5909   Max.   : 2.2442  
##   PBINacional        GastoSalud         GastoEdu      
##  Min.   :-0.3425   Min.   :-0.8062   Min.   :-0.9002  
##  1st Qu.:-0.3251   1st Qu.:-0.7222   1st Qu.:-0.7525  
##  Median :-0.2913   Median :-0.4256   Median :-0.4288  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.:-0.1189   3rd Qu.: 0.2264   3rd Qu.: 0.4376  
##  Max.   : 9.3839   Max.   : 4.4531   Max.   : 4.0471

Apreciamos que la estadarizacion es correcta, ya que todas las medias son 0.

Correlacion de puntajes z :

pearson = cor(total5_s)
pearson 
##               ScorePolRi ScoreCivilLib PrensaScore Alfabetismo
## ScorePolRi     1.0000000     0.9633404   0.9241192   0.3122919
## ScoreCivilLib  0.9633404     1.0000000   0.9459047   0.3792780
## PrensaScore    0.9241192     0.9459047   1.0000000   0.2485662
## Alfabetismo    0.3122919     0.3792780   0.2485662   1.0000000
## Mortalidadinf  0.4833039     0.5384796   0.4082705   0.8548904
## AñosEstim      0.5100169     0.5443838   0.4412098   0.7627803
## Corrup         0.7029087     0.7583003   0.7443915   0.4453997
## PBINacional    0.1825161     0.1744903   0.1480271   0.1164164
## GastoSalud     0.5533323     0.6364360   0.6293200   0.5012294
## GastoEdu       0.5140227     0.5968318   0.5934727   0.5401553
##               Mortalidadinf AñosEstim    Corrup PBINacional GastoSalud
## ScorePolRi        0.4833039 0.5100169 0.7029087   0.1825161  0.5533323
## ScoreCivilLib     0.5384796 0.5443838 0.7583003   0.1744903  0.6364360
## PrensaScore       0.4082705 0.4412098 0.7443915   0.1480271  0.6293200
## Alfabetismo       0.8548904 0.7627803 0.4453997   0.1164164  0.5012294
## Mortalidadinf     1.0000000 0.9142169 0.6237240   0.1781218  0.6090388
## AñosEstim         0.9142169 1.0000000 0.6649855   0.2161856  0.6847957
## Corrup            0.6237240 0.6649855 1.0000000   0.2029072  0.8260122
## PBINacional       0.1781218 0.2161856 0.2029072   1.0000000  0.4355199
## GastoSalud        0.6090388 0.6847957 0.8260122   0.4355199  1.0000000
## GastoEdu          0.6384230 0.6957015 0.8441420   0.2122195  0.9038651
##                GastoEdu
## ScorePolRi    0.5140227
## ScoreCivilLib 0.5968318
## PrensaScore   0.5934727
## Alfabetismo   0.5401553
## Mortalidadinf 0.6384230
## AñosEstim     0.6957015
## Corrup        0.8441420
## PBINacional   0.2122195
## GastoSalud    0.9038651
## GastoEdu      1.0000000

Matriz de correlacion de nuestras dimensiones, para ver el grado de asociasion entre ellas:

cor.plot(pearson, 
         numbers=T, 
         upper=FALSE, 
         main = "Correlation", 
         show.legend = FALSE)

Kaiser Meyer Olkin:

KMO(total5_s) # se ve el Overall MSA 
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = total5_s)
## Overall MSA =  0.82
## MSA for each item = 
##    ScorePolRi ScoreCivilLib   PrensaScore   Alfabetismo Mortalidadinf 
##          0.81          0.82          0.91          0.84          0.78 
##     AñosEstim        Corrup   PBINacional    GastoSalud      GastoEdu 
##          0.84          0.94          0.41          0.78          0.84

KMO (Kaiser‐Meyer‐Olkin) nos indica que es adecuado realizar Analisis Factorial, dado que los valores estan mas cerca a 1.

¿Cuantos indices debemos formar?

fa.parallel(pearson, fm="pa", fa="fa", main = "Scree Plot",n.obs = nrow(total5_s)) #El Scree Plot nos recimienda cuantos indices se podrian formar a partir de las dimensiones planteadas

## Parallel analysis suggests that the number of factors =  3  and the number of components =  NA

Nos recomienda que nuestras variables se pueden distribuir en tres indices

Creando los indices y verificando el grado de emparejamiento de nuestras variables seleccionadas:

total5_sFA <- fa(total5_s, 
                     nfactors=3, #Colocamos el numero de indices que el Scree Plot nos recomienda
                     rotate="varimax"
                      ) 
## 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 extraction method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate =
## rotate, : An ultra-Heywood case was detected. Examine the results carefully
total5_sFA #Mostramos los resultados
## Factor Analysis using method =  minres
## Call: fa(r = total5_s, nfactors = 3, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
##                MR1  MR2  MR3   h2       u2 com
## ScorePolRi    0.92 0.22 0.19 0.94  0.05965 1.2
## ScoreCivilLib 0.92 0.26 0.26 0.98  0.01845 1.3
## PrensaScore   0.91 0.10 0.33 0.94  0.05850 1.3
## Alfabetismo   0.10 0.83 0.21 0.74  0.26173 1.2
## Mortalidadinf 0.25 0.94 0.25 1.00  0.00059 1.3
## AñosEstim     0.27 0.80 0.38 0.86  0.14481 1.7
## Corrup        0.56 0.35 0.62 0.81  0.18963 2.6
## PBINacional   0.07 0.07 0.32 0.11  0.88526 1.2
## GastoSalud    0.33 0.33 0.89 1.02 -0.01660 1.6
## GastoEdu      0.33 0.41 0.74 0.83  0.16959 2.0
## 
##                        MR1  MR2  MR3
## SS loadings           3.20 2.73 2.30
## Proportion Var        0.32 0.27 0.23
## Cumulative Var        0.32 0.59 0.82
## Proportion Explained  0.39 0.33 0.28
## Cumulative Proportion 0.39 0.72 1.00
## 
## Mean item complexity =  1.5
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  45  and the objective function was  13.91 with Chi Square of  1847.82
## The degrees of freedom for the model are 18  and the objective function was  0.86 
## 
## The root mean square of the residuals (RMSR) is  0.03 
## The df corrected root mean square of the residuals is  0.04 
## 
## The harmonic number of observations is  138 with the empirical chi square  8.37  with prob <  0.97 
## The total number of observations was  138  with Likelihood Chi Square =  111.9  with prob <  1.4e-15 
## 
## Tucker Lewis Index of factoring reliability =  0.868
## RMSEA index =  0.201  and the 90 % confidence intervals are  0.161 0.231
## BIC =  23.21
## Fit based upon off diagonal values = 1

Observamos como se distribuyen nuestras dimensiones en los posibles indices:

total5_sFA$loadings #Observamos la distribucion de variables en los indices creados
## 
## Loadings:
##               MR1   MR2   MR3  
## ScorePolRi    0.925 0.219 0.192
## ScoreCivilLib 0.918 0.262 0.264
## PrensaScore   0.908 0.104 0.325
## Alfabetismo   0.104 0.828 0.206
## Mortalidadinf 0.251 0.935 0.248
## AñosEstim     0.266 0.800 0.380
## Corrup        0.556 0.346 0.618
## PBINacional               0.324
## GastoSalud    0.332 0.326 0.895
## GastoEdu      0.330 0.412 0.743
## 
##                  MR1   MR2   MR3
## SS loadings    3.201 2.728 2.300
## Proportion Var 0.320 0.273 0.230
## Cumulative Var 0.320 0.593 0.823

Graficamos como se distribuyen:

fa.diagram(total5_sFA) #Lo mostramos de manera grafica

Observamos que Corrupcion y el PBI Nacional tienden a juntarse con las variables de Capacidad del Estado. Sin embargo, no tenemos literatura que respalde esta tendencia. Por tal motivo decidimos que Percepcion de la corrupcion y el PBI sean trabajadas como variables no pertenecientes a un determinado indice.

Eliminamos borradores para poder crear nuestros indices sin PBI Nacional y Corrupción:

total5_s = NULL
pearson = NULL
total5_sFA = NULL

Asimismo, relizaremos un segundo analisis factorial tomando en cuenta todas las variables, exceptuando Percepcion de corrupcion. :

Analisis factorial de Libertades, Bienestar y Capacidad Estatal Estandarizamos:

factorial1_s = scale(datatotal[c(2:7, 10, 11)]) #Factorial1 es libertades, bienestar y capacidad del Estado

Creamos data frame:

factorial1_s=as.data.frame(factorial1_s)

Correlacion de puntajes z de las variables seleccionadas:

library(psych)
pearson1 = cor(factorial1_s)
pearson1 
##               ScorePolRi ScoreCivilLib PrensaScore Alfabetismo
## ScorePolRi     1.0000000     0.9633404   0.9241192   0.3122919
## ScoreCivilLib  0.9633404     1.0000000   0.9459047   0.3792780
## PrensaScore    0.9241192     0.9459047   1.0000000   0.2485662
## Alfabetismo    0.3122919     0.3792780   0.2485662   1.0000000
## Mortalidadinf  0.4833039     0.5384796   0.4082705   0.8548904
## AñosEstim      0.5100169     0.5443838   0.4412098   0.7627803
## GastoSalud     0.5533323     0.6364360   0.6293200   0.5012294
## GastoEdu       0.5140227     0.5968318   0.5934727   0.5401553
##               Mortalidadinf AñosEstim GastoSalud  GastoEdu
## ScorePolRi        0.4833039 0.5100169  0.5533323 0.5140227
## ScoreCivilLib     0.5384796 0.5443838  0.6364360 0.5968318
## PrensaScore       0.4082705 0.4412098  0.6293200 0.5934727
## Alfabetismo       0.8548904 0.7627803  0.5012294 0.5401553
## Mortalidadinf     1.0000000 0.9142169  0.6090388 0.6384230
## AñosEstim         0.9142169 1.0000000  0.6847957 0.6957015
## GastoSalud        0.6090388 0.6847957  1.0000000 0.9038651
## GastoEdu          0.6384230 0.6957015  0.9038651 1.0000000

Matriz de correlacion de nuestra variables seleccionadas para observar la asociasion de nuestras variables:

cor.plot(pearson1, 
         numbers=T, 
         upper=FALSE, 
         main = "Correlation", 
         show.legend = FALSE)

Se determina que hay buena correlacion entre las variables planteadas, y que el Analisis Factorial anterior.

Kaiser Meyer Olkin:

KMO(factorial1_s) # se ve el Overall MSA 
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = factorial1_s)
## Overall MSA =  0.82
## MSA for each item = 
##    ScorePolRi ScoreCivilLib   PrensaScore   Alfabetismo Mortalidadinf 
##          0.81          0.79          0.88          0.86          0.77 
##     AñosEstim    GastoSalud      GastoEdu 
##          0.82          0.82          0.83

Verificamos que el Overall MSA = 0.81 se acerca a 1, por lo que concluimos que es valido realizar Analisis factorial.

¿Cuantos indices debemos formar con las variables seleccionadas? Realizamos el Scree Plot:

fa.parallel(pearson1, fm="pa", fa="fa", main = "Scree Plot",n.obs = nrow(factorial1_s))

## Parallel analysis suggests that the number of factors =  3  and the number of components =  NA

Nos sigue recomendando que debemos crear tres indices

Creando los indices y verificando el grado de emparejamiento de nuestras variables seleccionadas:

factorial1_sFA <- fa(factorial1_s, 
                     nfactors=3, 
                     rotate="varimax"
                      )
## 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 extraction method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate =
## rotate, : An ultra-Heywood case was detected. Examine the results carefully
factorial1_sFA 
## Factor Analysis using method =  minres
## Call: fa(r = factorial1_s, nfactors = 3, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
##                MR2  MR3  MR1   h2      u2 com
## ScorePolRi    0.94 0.23 0.17 0.95  0.0454 1.2
## ScoreCivilLib 0.92 0.27 0.26 0.98  0.0185 1.3
## PrensaScore   0.90 0.10 0.33 0.94  0.0605 1.3
## Alfabetismo   0.10 0.82 0.22 0.74  0.2645 1.2
## Mortalidadinf 0.25 0.94 0.23 1.00 -0.0014 1.3
## AñosEstim     0.27 0.80 0.37 0.85  0.1463 1.6
## GastoSalud    0.36 0.35 0.81 0.92  0.0843 1.8
## GastoEdu      0.31 0.40 0.80 0.90  0.1019 1.8
## 
##                        MR2  MR3  MR1
## SS loadings           2.91 2.63 1.75
## Proportion Var        0.36 0.33 0.22
## Cumulative Var        0.36 0.69 0.91
## Proportion Explained  0.40 0.36 0.24
## Cumulative Proportion 0.40 0.76 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  28  and the objective function was  11.57 with Chi Square of  1544.57
## The degrees of freedom for the model are 7  and the objective function was  0.15 
## 
## The root mean square of the residuals (RMSR) is  0.01 
## The df corrected root mean square of the residuals is  0.01 
## 
## The harmonic number of observations is  138 with the empirical chi square  0.23  with prob <  1 
## The total number of observations was  138  with Likelihood Chi Square =  19.76  with prob <  0.0061 
## 
## Tucker Lewis Index of factoring reliability =  0.966
## RMSEA index =  0.119  and the 90 % confidence intervals are  0.057 0.177
## BIC =  -14.73
## Fit based upon off diagonal values = 1

Observamos como se distribuyen nuestras dimensiones en los posibles indices:

factorial1_sFA$loadings 
## 
## Loadings:
##               MR2   MR3   MR1  
## ScorePolRi    0.935 0.229 0.168
## ScoreCivilLib 0.919 0.266 0.257
## PrensaScore   0.905 0.104 0.332
## Alfabetismo   0.102 0.823 0.219
## Mortalidadinf 0.250 0.941 0.233
## AñosEstim     0.268 0.804 0.367
## GastoSalud    0.360 0.352 0.814
## GastoEdu      0.311 0.399 0.802
## 
##                  MR2   MR3   MR1
## SS loadings    2.908 2.626 1.746
## Proportion Var 0.364 0.328 0.218
## Cumulative Var 0.364 0.692 0.910

Graficamos como se distribuyen:

fa.diagram(factorial1_sFA)

Se concluye que los indices creados son validos

Creando los data frames de nuestros indices creados por FA:

indices1_est=as.data.frame(factorial1_sFA$scores)
names(indices1_est)= c("libertadesFA", "bienestarFA", "capacidadesFA") #Nombramos nuestros indices en base teorica
dimInd=indices1_est
head(dimInd)#resultado
##             libertadesFA bienestarFA capacidadesFA
## Afghanistan   -0.4494916  -4.3655239     1.1463776
## Albania        0.2637731   0.6870005    -0.7691235
## Angola        -0.9526507  -1.9017843     0.3448869
## Argentina      0.7251058   0.6947708    -0.6941596
## Armenia       -0.5296556   0.8491882    -0.8157726
## Australia      0.9612398   0.3806205     1.2779568

Hacemos el plot de todas nuestras dimensiones para observar como se distribuyen nuestros casos:

plot(dimInd[c(1:3)])

Por ejemplo, tomando en cuenta la Percepcion de corrupcion y el indice de Libertades, podemos realizar un ggplot que nos muestra la posición de paises usando ambas dimensiones:

library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
base=ggplot(dimInd,aes(x=libertadesFA,y=capacidadesFA))
base + geom_point() + geom_text(aes(label = row.names(dimInd)),size=3.4)

En el caso de Qatar, por ejemplo, descubrimos que tiene mas alta la dimension de Capacidad a comparación de Portugal. Sin embargo, Portugal tiene mas libertades que Qatar

Verificamos los nombres de nuestras dimensiones finales:

names(dimInd)
## [1] "libertadesFA"  "bienestarFA"   "capacidadesFA"

5.Regresiones

5.1 Regresion Beta

Antes de la regresion de Beta Queremos hacer merge entre democracia (el valor del democracy index) y las variables independientes (con indices incluidos) para poder realizar la regresion Beta: Para ello, estandarizamos las variables que no estan incluidas en los indices:

demoBeta = (datatotal[c(1,8,9)]) 
demoBeta[,c(2,3)] = scale(demoBeta[,c(2,3)])

Hacemos Merge entre demoBeta y los indices

totalBeta=merge(demoBeta, dimInd, by=0) 
totalBeta=as.data.frame(totalBeta)
row.names(totalBeta) = totalBeta$Row.names
totalBeta$Row.names = NULL #Eliminamos la columna row.names

Dividimos entre 10 para hacer que la Variable Independiente oscile entre 0 y 1 para poder realizar la regresion beta

totalBeta$demoindex=(totalBeta$demoindex-5)/35

Modelo de Regresion Beta:

library(betareg)
modeloBeta=betareg(demoindex~.,data=totalBeta)
summary(modeloBeta)
## 
## Call:
## betareg(formula = demoindex ~ ., data = totalBeta)
## 
## Standardized weighted residuals 2:
##     Min      1Q  Median      3Q     Max 
## -4.2370 -0.5579 -0.0810  0.6432  4.1571 
## 
## Coefficients (mean model with logit link):
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -0.007834   0.038475  -0.204    0.839    
## Corrup         0.141180   0.088413   1.597    0.110    
## PBINacional    0.011522   0.043489   0.265    0.791    
## libertadesFA   0.861218   0.063275  13.611  < 2e-16 ***
## bienestarFA    0.369025   0.050920   7.247 4.26e-13 ***
## capacidadesFA  0.295606   0.075389   3.921 8.81e-05 ***
## 
## Phi coefficients (precision model with identity link):
##       Estimate Std. Error z value Pr(>|z|)    
## (phi)   23.963      2.843   8.428   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Type of estimator: ML (maximum likelihood)
## Log-likelihood:   146 on 7 Df
## Pseudo R-squared: 0.812
## Number of iterations: 17 (BFGS) + 4 (Fisher scoring)

Tras realizar la regresión beta se concluye: - Que Libertades, Bienestar y Capacidad Estatal son variables estadisticamente significativas respecto a la calidad de la democracia. - Asimismo, Percepcion de la corrupcion y PBI nacional no son estaditicamente significativas

Para lograr medir el impacto de las variables significativas aplicaremos la tecnica margins

library(margins)

(mrBeta=margins(modeloBeta))
## Average marginal effects
## betareg(formula = demoindex ~ ., data = totalBeta)
##   Corrup PBINacional libertadesFA bienestarFA capacidadesFA
##  0.02762    0.002254       0.1685      0.0722       0.05784

Interpretacion: Se puede apreciar que 3 de las variables independientes propuestas, influyen de manera positiva en la relacion con la democracia. - Así, por ejemplo, por cada punto que aumente el indice de Libertades, el nivel de democracia aumentara en 16.8%. - Por cada punto que aumente el indice de Bienestar, la democracia aumentara un 7.2%. - Por último, cada punto que un pais aumente en el indice de Capacidad estatal, la democracia tambien aumentara en 5.7%.

summary(mrBeta)
##         factor    AME     SE       z      p   lower  upper
##    bienestarFA 0.0722 0.0097  7.4480 0.0000  0.0532 0.0912
##  capacidadesFA 0.0578 0.0146  3.9489 0.0001  0.0291 0.0865
##         Corrup 0.0276 0.0173  1.5987 0.1099 -0.0062 0.0615
##   libertadesFA 0.1685 0.0112 15.1045 0.0000  0.1466 0.1904
##    PBINacional 0.0023 0.0085  0.2650 0.7910 -0.0144 0.0189

Interpretacion: Se puede apreciar que la variable Libertades es la que tiene mayor efecto con la democracia. Para confirmar esto, hacemos el ggplot de los efectos:

library(ggplot2)
base= ggplot(summary(mrBeta),aes(x=factor, y=AME)) + geom_point() 
base +  geom_errorbar(aes(ymin=lower, ymax=upper))

Así, se confirma que Libertades tiene mas efecto que cualquier otra variable. Ademas, se puede ver claramente que Corrup y el PBI son variables que pasan la linea del 0, por lo que no ejercen ningun efecto en la calidad de la democracia.

5.2. Regresión ordinal

Antes de la regresion ordinal

demoOrd=totalBeta 
demoOrd$demoindex=round(demoOrd$demoindex,2)

Ordenamos nuestras observaciones en niveles de democracia segun la teoria:

demoOrd$Regimen[demoOrd$demoindex >= 0.78] <- "1Democracia perfecta"
demoOrd$Regimen[demoOrd$demoindex>= 0.52 & demoOrd$demoindex <= 0.77] <- "2Democracia imperfecta"
demoOrd$Regimen[demoOrd$demoindex >=0.33 & demoOrd$demoindex <= 0.51] <- "3Regimen Hibrido"
demoOrd$Regimen[demoOrd$demoindex<= 0.32] <- "4Regimen Autoritario"
demoOrd$demoindex=NULL #Para elaborar la regresion ordinal descartamos el demoindex y nos quedamos con la variable ordinal creada
# Conocemos el numero de paises pertenecientes a cada categoria de Regimen democratico?
table(demoOrd$Regimen,exclude = 'nothing')
## 
##   1Democracia perfecta 2Democracia imperfecta       3Regimen Hibrido 
##                     18                     50                     30 
##   4Regimen Autoritario 
##                     40
# poner numero delante, ayuda a crear una ordinal
demoOrd$Regimen=as.ordered(demoOrd$Regimen)
demoOrd = as.data.frame(demoOrd)

Grafiquemos la distribucion de los paises en las categorias:

barplot(table(demoOrd$Regimen), cex.names = 0.9, cex.axis = 0.6)

Modelo de Regresion ordinal:

library("oglmx")
## Loading required package: maxLik
## Loading required package: miscTools
## 
## Please cite the 'maxLik' package as:
## Henningsen, Arne and Toomet, Ott (2011). maxLik: A package for maximum likelihood estimation in R. Computational Statistics 26(3), 443-458. DOI 10.1007/s00180-010-0217-1.
## 
## If you have questions, suggestions, or comments regarding the 'maxLik' package, please use a forum or 'tracker' at maxLik's R-Forge site:
## https://r-forge.r-project.org/projects/maxlik/
rOrdi=ologit.reg(Regimen ~.,data = demoOrd,)
## Warning in model.response(mf, "numeric"): using type = "numeric" with a
## factor response will be ignored
summary(rOrdi)
## Ordered Logit Regression 
## Log-Likelihood: -64.25435 
## No. Iterations: 8 
## McFadden's R2: 0.6483878 
## AIC: 144.5087 
##               Estimate Std. error t value  Pr(>|t|)    
## Corrup        -0.68370    0.52899 -1.2925 0.1961993    
## PBINacional    0.13093    0.21096  0.6206 0.5348357    
## libertadesFA  -4.97940    0.75166 -6.6246 3.482e-11 ***
## bienestarFA   -2.21990    0.44157 -5.0273 4.973e-07 ***
## capacidadesFA -2.07832    0.54188 -3.8354 0.0001254 ***
## ----- Threshold Parameters -----
##                                                          Estimate
## Threshold (1Democracia perfecta->2Democracia imperfecta) -8.44727
## Threshold (2Democracia imperfecta->3Regimen Hibrido)      0.32462
## Threshold (3Regimen Hibrido->4Regimen Autoritario)        4.33255
##                                                          Std. error
## Threshold (1Democracia perfecta->2Democracia imperfecta)    1.20125
## Threshold (2Democracia imperfecta->3Regimen Hibrido)        0.44353
## Threshold (3Regimen Hibrido->4Regimen Autoritario)          0.65876
##                                                          t value  Pr(>|t|)
## Threshold (1Democracia perfecta->2Democracia imperfecta) -7.0321 2.035e-12
## Threshold (2Democracia imperfecta->3Regimen Hibrido)      0.7319    0.4642
## Threshold (3Regimen Hibrido->4Regimen Autoritario)        6.5768 4.807e-11
##                                                             
## Threshold (1Democracia perfecta->2Democracia imperfecta) ***
## Threshold (2Democracia imperfecta->3Regimen Hibrido)        
## Threshold (3Regimen Hibrido->4Regimen Autoritario)       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Apreciamos que tanto Libertades como Bienestar y Capacidad Estatal son estadisticamente significativas para explicar la calidad de la democracia

library(margins)
(rmOrdi=margins(rOrdi))
## Marginal Effects on Pr(Outcome==1Democracia perfecta)
##                 Marg. Eff  Std. error t value Pr(>|t|)
## Corrup         1.4658e-04  1.9136e-04  0.7660   0.4437
## PBINacional   -2.8070e-05  5.5656e-05 -0.5044   0.6140
## libertadesFA   1.0676e-03  1.1546e-03  0.9246   0.3552
## bienestarFA    4.7593e-04  5.1384e-04  0.9262   0.3543
## capacidadesFA  4.4558e-04  4.8748e-04  0.9141   0.3607
## ------------------------------------ 
## Marginal Effects on Pr(Outcome==2Democracia imperfecta)
##               Marg. Eff Std. error t value  Pr(>|t|)    
## Corrup         0.166354   0.128844  1.2911    0.1967    
## PBINacional   -0.031857   0.050898 -0.6259    0.5314    
## libertadesFA   1.211557   0.196816  6.1558 7.471e-10 ***
## bienestarFA    0.540131   0.111904  4.8268 1.388e-06 ***
## capacidadesFA  0.505684   0.123168  4.1057 4.032e-05 ***
## ------------------------------------ 
## Marginal Effects on Pr(Outcome==3Regimen Hibrido)
##               Marg. Eff Std. error t value  Pr(>|t|)    
## Corrup        -0.157752   0.122928 -1.2833 0.1993900    
## PBINacional    0.030209   0.048286  0.6256 0.5315543    
## libertadesFA  -1.148909   0.214696 -5.3513 8.731e-08 ***
## bienestarFA   -0.512202   0.117074 -4.3750 1.214e-05 ***
## capacidadesFA -0.479536   0.124282 -3.8584 0.0001141 ***
## ------------------------------------ 
## Marginal Effects on Pr(Outcome==4Regimen Autoritario)
##                Marg. Eff Std. error t value Pr(>|t|)  
## Corrup        -0.0087484  0.0082266 -1.0634  0.28759  
## PBINacional    0.0016753  0.0028707  0.5836  0.55949  
## libertadesFA  -0.0637150  0.0343178 -1.8566  0.06337 .
## bienestarFA   -0.0284052  0.0153504 -1.8505  0.06425 .
## capacidadesFA -0.0265936  0.0153989 -1.7270  0.08417 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Tres variables independientes tienen un efecto significativo en los paises de “Regimen Hibrido” y con “Democracia imperfecta”. Sin embargo, no en las “democracias plenas” o regimenes “Autoritarios”. Asimismo, la Percepcion de Corrupcion y el PBI son las unicas variables que no tienen un efecto significativo en ninguno de los regimenes.

  • Las libertades, el bienestar y la capacidad del estado, tienen una relacion directa con la democracia; de modo que dichas variables aumentan la probabilidad de un pais de tener una democracia imperfecta. Por otro lado, a medida que se registren aumentos en los niveles de libertades, bienestar o capacidad estatal, disminuira la probabilidad de un pais de pertenecer a un regimen hibrido. Es decir, en este caso, la relacion es inversa.

6. Mapa de similitudes, Analisis de conglomerados y Mapas

Para el mapa de similitudes se deben usar las distancias, para poder determinar los paises con mas cercania a otros, y establecer los neighborhoods:

Var_d=dist(indices1_est)

Utilizaremos las distancias entre los paises para crear VarInd_map, que luego utlizaremos para construir el Mapa de similitudes:

VarInd_map = cmdscale(Var_d, eig=TRUE, k=2)
VarInd_map$GOF 
## [1] 0.6883248 0.6883248
#La bondad de ajuste esta relativamente cerca a 1, lo que indica que es adecuado que juntemos las variables para el mapa de similitudes

6.1.Mapa de Similitudes

Queremos saber las distancias entre nuestros casos y qué tipos de vecindarios forman:

titulo= "Mapa de similitudes entre paises"
x = VarInd_map$points[,1]
y = VarInd_map$points[,2]
plot(x, y, xlab= "Dimension 1", ylab = "Dimension 2",  main=titulo, type = "n")
text (x, y,  labels =rownames(VarInd_map$points), cex=0.5)

Guardamos en un data frame:

VarInd_map_DF = as.data.frame(VarInd_map$points)
library(ggrepel)
base=ggplot(VarInd_map_DF,aes(x=V1,y=V2))
base+geom_point() + geom_text_repel(aes(label=row.names(VarInd_map_DF)),size=2) #Para apreciar con mayor detalle la ubicacion de los paises

  • Se aprecia que tanto Cuba, Russia Iran son paises mas cercanos a comparacion de Nigeria, Afghanistan y Sierra Leona

6.2.Analisis de conglomerados

En el analisis de conglomerados lo que se espera es agrupar a los paises teniendo en cuenta la similitud de sus caracteristicas. Hallamos eso utilizando kmeans:

grupos=kmeans(Var_d, centers = 4) #lo separamos en 4 grupos, tomando en cuenta las categorias de la data de democracia

Vemos el total de paises en cada grupo

table(grupos$cluster) # Mostramos cuantos paises se agrupan en cada cluster.
## 
##  1  2  3  4 
## 27 70 22 19

Para observar de mejor los clausters le asignamos colores:

VarInd_map_DF$cluster=as.factor(grupos$cluster)
base=ggplot(VarInd_map_DF,aes(x=V1,y=V2))
base+geom_point(aes(colour=cluster)) + geom_text_repel(aes(label=row.names(VarInd_map_DF)),size=2)

6.3. Mapas

folderMap='MapaMundo'
fileName='world_map.shp'
fileToRead=file.path(folderMap,fileName)

library(rgdal)
## Loading required package: sp
## rgdal: version: 1.4-4, (SVN revision 833)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.1.3, released 2017/20/01
##  Path to GDAL shared files: /usr/share/gdal/2.1
##  GDAL binary built with GEOS: TRUE 
##  Loaded PROJ.4 runtime: Rel. 4.9.2, 08 September 2015, [PJ_VERSION: 492]
##  Path to PROJ.4 shared files: (autodetected)
##  Linking to sp version: 1.3-1
mundoMap = readOGR(fileToRead,stringsAsFactors=FALSE)
## OGR data source with driver: ESRI Shapefile 
## Source: "/cloud/project/MapaMundo/world_map.shp", layer: "world_map"
## with 246 features
## It has 11 fields
## Integer64 fields read as strings:  POP2005

Sin problema, el mapa se dibujará:

plot(mundoMap, border='grey')

head(mundoMap@data)
##   FIPS ISO2 ISO3 UN                NAME   AREA  POP2005 REGION SUBREGION
## 0   AC   AG  ATG 28 Antigua and Barbuda     44    83039     19        29
## 1   AG   DZ  DZA 12             Algeria 238174 32854159      2        15
## 2   AJ   AZ  AZE 31          Azerbaijan   8260  8352021    142       145
## 3   AL   AL  ALB  8             Albania   2740  3153731    150        39
## 4   AM   AM  ARM 51             Armenia   2820  3017661    142       145
## 5   AO   AO  AGO 24              Angola 124670 16095214      2        17
##       LON     LAT
## 0 -61.783  17.078
## 1   2.632  28.163
## 2  47.395  40.430
## 3  20.068  41.143
## 4  44.563  40.534
## 5  17.544 -12.296

Que tan bien saldra el merge…

countryClus=as.data.frame(grupos$cluster)
countryClus
##                          grupos$cluster
## Afghanistan                           1
## Albania                               2
## Angola                                1
## Argentina                             2
## Armenia                               2
## Australia                             4
## Austria                               4
## Azerbaijan                            3
## Bahrain                               3
## Bangladesh                            2
## Belarus                               3
## Belgium                               4
## Benin                                 1
## Bhutan                                2
## Bolivia                               2
## Botswana                              2
## Brazil                                2
## Bulgaria                              2
## Burkina Faso                          1
## Burundi                               1
## Cambodia                              1
## Cameroon                              1
## Canada                                4
## Cape Verde                            2
## Central African Republic              1
## Chad                                  1
## Chile                                 2
## Colombia                              2
## Comoros                               1
## Congo Brazzaville                     1
## Congo Kinshasa                        1
## Costa Rica                            2
## Cote d'Ivoire                         1
## Croatia                               2
## Cuba                                  3
## Cyprus                                2
## Czech Republic                        2
## Denmark                               4
## Ecuador                               2
## El Salvador                           2
## Estonia                               2
## Ethiopia                              3
## Finland                               4
## France                                4
## Gabon                                 2
## Gambia                                1
## Georgia                               2
## Germany                               4
## Ghana                                 2
## Guatemala                             2
## Guinea                                1
## Guinea-Bissau                         1
## Guyana                                2
## Haiti                                 1
## Honduras                              2
## Hungary                               2
## Iceland                               4
## India                                 2
## Indonesia                             2
## Iran                                  3
## Ireland                               4
## Israel                                2
## Italy                                 2
## Jamaica                               2
## Japan                                 2
## Jordan                                2
## Kazakhstan                            3
## Kenya                                 2
## Kyrgyzstan                            2
## Laos                                  1
## Latvia                                2
## Lebanon                               2
## Lesotho                               2
## Liberia                               1
## Lithuania                             2
## Luxembourg                            4
## Madagascar                            2
## Malawi                                2
## Malaysia                              3
## Mali                                  1
## Malta                                 4
## Mauritania                            1
## Mauritius                             2
## Mexico                                2
## Moldova                               2
## Mongolia                              2
## Morocco                               2
## Mozambique                            1
## Namibia                               2
## Nepal                                 2
## Netherlands                           4
## New Zealand                           4
## Nicaragua                             2
## Niger                                 1
## Norway                                4
## Oman                                  3
## Pakistan                              1
## Panama                                2
## Paraguay                              2
## Peru                                  2
## Philippines                           2
## Poland                                2
## Portugal                              2
## Qatar                                 3
## Romania                               2
## Russia                                3
## Rwanda                                3
## Senegal                               1
## Serbia                                2
## Sierra Leone                          1
## Singapore                             3
## Slovakia                              2
## Slovenia                              2
## South Africa                          2
## South Korea                           2
## Spain                                 2
## Sri Lanka                             2
## Sudan                                 3
## Sweden                                4
## Switzerland                           4
## Syria                                 3
## Tajikistan                            3
## Tanzania                              2
## Thailand                              3
## Timor-Leste                           2
## Togo                                  2
## Tunisia                               2
## Turkey                                3
## Turkmenistan                          3
## Uganda                                1
## Ukraine                               2
## United Kingdom                        4
## United States                         4
## Uruguay                               2
## Uzbekistan                            3
## Venezuela                             3
## Vietnam                               3
## Zimbabwe                              2
names(countryClus)='cluster'
countryClus$NAME=row.names(countryClus)
head(countryClus)
##             cluster        NAME
## Afghanistan       1 Afghanistan
## Albania           2     Albania
## Angola            1      Angola
## Argentina         2   Argentina
## Armenia           2     Armenia
## Australia         4   Australia

Renombramos a los paises para evitar perderlos

mundoMap[7,5] = "Samoa"
mundoMap[23,5] = "Brunei"
mundoMap[27,5] = "Congo Brazzaville"
mundoMap[28,5] = "Congo Kinshasa"
mundoMap[58,5] = "Czech Republic"
mundoMap[63,5] = "Micronesia"
mundoMap[84,5] = "Iran"
mundoMap[94,5] = "North Korea"
mundoMap[96,5] = "South Korea"
mundoMap[167,5] = "Guinea"
mundoMap[192,5] = "Syria"
mundoMap[205,5] = "Tanzania"
mundoMap[216,5] = "Vietnam"

Merge entre el mapa y la data de clusters

Mapa_VarInd= merge (mundoMap, countryClus)

Ahora sí grafiquemos:

# colores
myColors=rainbow(4)


plot(mundoMap,col='grey',border=NA)
plot(Mapa_VarInd,col=myColors[Mapa_VarInd$cluster],main='Grupos',border=NA,add=T)

Mapa interactivo sin leyenda Guiandonos de nuestra clasificion de los paises segun su calidad de democracia

library(leaflet)

#newMaps!
c1=Mapa_VarInd[!is.na(Mapa_VarInd$cluster) & Mapa_VarInd$cluster==1,]
c2=Mapa_VarInd[!is.na(Mapa_VarInd$cluster) & Mapa_VarInd$cluster==2,]
c3=Mapa_VarInd[!is.na(Mapa_VarInd$cluster) & Mapa_VarInd$cluster==3,]
c4=Mapa_VarInd[!is.na(Mapa_VarInd$cluster) & Mapa_VarInd$cluster==4,]

title="Clusters"

# base Layer
base= leaflet() %>% addProviderTiles("CartoDB.Positron") 

layer1= base %>%
        addPolygons(data=c1,color='blue',fillOpacity = 1,stroke = F,
                    group = "1")
layer_12= layer1%>%addPolygons(data=c2,color="green",fillOpacity = 1,stroke = F,
                              group = "2")

layer_123= layer_12%>%addPolygons(data=c3,color="orange",fillOpacity = 1,stroke = F,
                              group = "3")

layer_1234= layer_123%>%addPolygons(data=c4,color="red",fillOpacity = 1,stroke = F,
                              group = "4")

layer_1234

Mapa interactivo con leyenda

layer_1234%>% addLayersControl(
        overlayGroups = c("1", "2","3","4"),
        options = layersControlOptions(collapsed = FALSE))

MERGE FINAL DE TODA LA DATA

Primer Merge antes de la data final

datita = demoOrd[,c(1, 6)]#eliminar esas columnas#Seleccionamos solo la variable ordinal
names(datita) = c("bye", "Calidad") #eliminar esas columnas
head(datita)
##                    bye                Calidad
## Afghanistan -1.4347635   4Regimen Autoritario
## Albania     -0.4128416       3Regimen Hibrido
## Angola      -1.2814752   4Regimen Autoritario
## Argentina   -0.2084572 2Democracia imperfecta
## Armenia     -0.4639377       3Regimen Hibrido
## Australia    1.6820982   1Democracia perfecta

merge entre datatotal y la variable categorica ordinal

data1 = merge.data.frame(datatotal, datita , by= 0) #merge entre nuestras variables junto a las categorias creadas de la regresion ordinal 
row.names(data1) = data1$Row.names
data1$Row.names = NULL #Eliminamos la columna row.names
data1$bye = NULL

merge entre data1 y los clusters

datatotal2 = merge.data.frame(data1,VarInd_map_DF , by= 0) #creamos la data final para exportar a formato XLSX
datatotal2$V1 = NULL #eliminamos las coordenadas 
datatotal2$V2 = NULL
row.names(datatotal2) = datatotal2$Row.names
datatotal2$Row.names = NULL #Eliminamos la columna row.names

Merge entre datatotal2 con los indices creados en el analisis factorial

datatotalfinal = merge.data.frame(datatotal2,dimInd , by= 0) #creamos la data final para exportar a formato XLSX
row.names(datatotalfinal) = datatotalfinal$Row.names
datatotalfinal$Row.names = NULL #Eliminamos la columna row.names
datita = NULL

Exportamos archivo XLSX

library (xlsx)
## 
## Attaching package: 'xlsx'
## The following objects are masked from 'package:openxlsx':
## 
##     createWorkbook, loadWorkbook, read.xlsx, saveWorkbook,
##     write.xlsx
write.xlsx (datatotalfinal, file = "datafinal.xlsx")