Estadística para el análisis político 2 - POL304
MIDIENDO LA DEMOCRACIA: OTROS FACTORES A TOMAR EN CUENTA
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)
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.
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
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
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
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"
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.
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.
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
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
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)
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")