1 Objetivo 4

A partir de la hipótesis “Los países del norte siempre están más avanzados y desarrollados que los del sur”. Para poder aceptar o rechazar la hipótesis realizaremos un análisis factorial de correspondencia simple sobre los datos del PIB y de la esperanza de vida, teniendo en las filas de las tablas los países y los años en las columnas. Antes de aplicar el propio AFC procederemos una serie de análisis y tratamiento de datos para tener una idea general de la base de datos y abstraer variables categóricas con las que completar el análisis.

1.1 Análisis gráfico

En un principio llevamos a cabo un análisis gráfico aislando del dataframe los años por década(“1980”,“1990”,“2000”,“2010”,“2019”) y filtrando por los países que generalmente son más potencias mundiales.

df[151, "Country"] = "São Tomé and Príncipe" #cambio de nombre de pais debido a un error en utf8
dfdec <- subset(df, select = c("Country", "1980", "1990", "2000", "2010", "2019"))
countries <- c("United States", "United Kingdom", "Canada", "Australia", "Francia", "China", "Japan", "India", "Brazil", "Mexico", "Germany")
dfdec_filtered = dfdec[dfdec$Country %in% countries, ]

dfdec_nonulos = dfdec[complete.cases(dfdec), ]

  # Calcular la media de cada columna
medias = colMeans(dfdec_nonulos[,2:ncol(dfdec_nonulos)])

# Convertir el vector de medias en un data frame de una sola fila
medias_df = data.frame(t(medias))
medias_df$Country = "Media"
medias_df = medias_df[, c(ncol(medias_df), 1:(ncol(medias_df)-1))]
colnames(medias_df) = colnames(dfdec_filtered)
dfdec_filtered <- rbind(dfdec_filtered, medias_df)#adjuntar el vector al dataframe


dfdec_nn_long = dfdec_filtered %>%
  pivot_longer(cols = c("1980","1990","2000","2010","2019"), names_to = "año", values_to = "pib")

  ggplot(dfdec_nn_long, aes(x = año, y = pib, group = Country, color = Country)) +
  geom_line() +
  labs(title = "Evolución del PIB por país",
       x = "Año",
       y = "PIB") +
  theme_minimal()

Lo que a primera vista observamos es que estados unidos y china tienen la pendiente más marcada, siendo estados unidos el país con el PIB más alto con gran diferencia, por otro lado, vemos que el resto de países tienen valores más cercanos entre sí y en general han aumentado su PIB lo que explica que se consideren potencias mundiales, si analizamos estos sin incluir a estados unidos y china obtenemos el siguiente gráfico.

countries1 <- c( "United Kingdom", "Canada", "Australia", "Francia", "Japan", "India", "Brazil", "Mexico", "Germany")
dfdec_filtered1 = dfdec[dfdec$Country %in% countries1, ]

dfdec_nonulos = dfdec[complete.cases(dfdec), ]

  # Calcular la media de cada columna
medias = colMeans(dfdec_nonulos[,2:ncol(dfdec_nonulos)])

# Convertir el vector de medias en un data frame de una sola fila
medias_df = data.frame(t(medias))
medias_df$Country = "Media"
medias_df = medias_df[, c(ncol(medias_df), 1:(ncol(medias_df)-1))]
colnames(medias_df) = colnames(dfdec_filtered1)
dfdec_filtered1 <- rbind(dfdec_filtered1, medias_df)



dfdec_nn_long1 = dfdec_filtered1 %>%
  pivot_longer(cols = c("1980","1990","2000","2010","2019"), names_to = "año", values_to = "pib")

  ggplot(dfdec_nn_long1, aes(x = año, y = pib, group = Country, color = Country)) +
  geom_line() +
  labs(title = "Evolución del PIB por país",
       x = "Año",
       y = "PIB") +
  theme_minimal()

Donde podemos ver mejor las diferencias y las evoluciones de cada país, todos apuntan a un estado de crecimiento, excepto Japón que en 2019 vuelve a valores de 2000, aun siendo el país con PIB más alto dentro de esta selección.

1.1.1 Gráfico por continente

A continuación realizaremos este mismo análisis gráfico para todos los distintos países de nuestra base de datos, agrupándolos por continente. Para ello utilizaremos la librería countrycode que mediante el nombre del país genera una nueva columna con el continente al que pertenece.

dfcont = dfdec[complete.cases(dfdec), ]
dfcont$Country = iconv(dfcont$Country, to = "UTF-8", sub = "")
dfcont$continent = countrycode(dfcont$Country, "country.name", "continent")

A continuación mostramos la función que hemos programado para poder graficar directamente el dataframe una vez lo hemos filtrado por continente. Primero se calcula la media del PIB por cada año de los países en el dataframe para a continuación juntarlo con el dataframe del continente, por último se pivota en un formato largo para poder introducirlo en la función gráfica de ggplot.

graficando = function(dfc){


medias = c("Media", colMeans(dfc[,2:6]), "CONT")
dfc =  rbind(dfc, medias)

dfc_long = dfc %>%
  pivot_longer(cols = c("1980","1990","2000","2010","2019"), names_to = "año", values_to = "pib")

dfc_long = subset(dfc_long, select= c("Country","año","pib"))
dfc_long$pib = as.numeric(dfc_long$pib) 

dfc = dfc_long  %>% 
  select(Country, año, pib) %>% 
  pivot_wider(names_from = año, values_from = pib)


ggplot(dfc_long, aes(x = año, y = pib, group = Country, color = Country)) +
geom_line() +
labs(title = "Evolución del PIB por país",
     x = "Año",
     y = "PIB") +
theme_minimal()
}
dfcont_EU = subset(dfcont, continent == "Europe")
graficando(dfcont_EU)

dfcont_AF = subset(dfcont, continent == "Africa")
graficando(dfcont_AF)

dfcont_AS = subset(dfcont, continent == "Asia")
graficando(dfcont_AS)

dfcont_AM = subset(dfcont, continent == "Americas")
graficando(dfcont_AM)

dfcont_OC = subset(dfcont, continent == "Oceania")
graficando(dfcont_OC)

Lo que solemos ver en los gráficos por continente es que suele varios países los cuales tienen valores de PIB mucho más altos en compara ración a los del mismo continente, lo que hace que apreciemos en menor medida las distancias entre los países. Para poder solucionar esto y para tener un análisis del PIB mucho más riguroso decidimos utilizar los valores del PIB per cápita.

1.2 PIB per cápita

Para poder normalizar los valores de modo que los países con mayor población como Estados Unidos o China no tengan valores del PIB tan altos en comparación a otros países, decidimos a partir del dataframe obtener otro similar pero con valores del PIB per cápita. Para ello descargamos los datos de población mundial de la página de las naciones unidas en formato de Excel.

Una vez tenemos ambos data frames con la columna de los países “Country” idénticos y con 196 países de los que tenemos datos.

Poblacion_anual1 = Poblacion_anual
pob <- pivot_wider(Poblacion_anual, names_from = año, values_from = poblacion)

pob[185, "Country"] = "São Tomé and Príncipe"

paises = df$Country

pobcodf = pob[pob$Country %in% paises, ]


paisespob = pob$Country

evil_pibcodf = df[!(df$Country %in% paisespob), ]

col = colnames(df)
pobfin = subset(pobcodf, select = col)
pobfin = pobfin[order(pobfin$Country),]

Para obtener el dataframe final solo tenemos que transformarlos en formato largo y dividir la columna del PIB por la columna de la población en un dataframe aparte.

col = colnames(df)
col = subset(col, col != "Country")

piblong = pivot_longer(df, cols = col , names_to = "año", values_to= "pib")
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
##   # Was:
##   data %>% select(col)
## 
##   # Now:
##   data %>% select(all_of(col))
## 
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
poblong = pivot_longer(pobfin, cols = col , names_to = "año", values_to= "pob")
poblong$pob = as.numeric(poblong$pob) 


dfin = subset(piblong, select= c("Country", "año"))
dfin$pibxpob = piblong$pib/poblong$pob

Finalmente, le devolvemos el formato ancho mediante la función pivot_wider y creamos un subconjunto del dataframe con los valores desde el 2000, ya que desde año la mayoría de países no tienen valores nulos.

pibxpob <- pivot_wider(dfin, names_from = año, values_from = pibxpob)
pibxpobdesde2000 = subset(pibxpob, select = c("Country", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019"))
head(pibxpobdesde2000)
## # A tibble: 6 × 21
##   Country  `2000` `2001` `2002` `2003` `2004` `2005` `2006` `2007` `2008` `2009`
##   <chr>     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 Afghani… NA     NA      0.208  0.201  0.218  0.253  0.272  0.330  0.390  0.441
## 2 Albania   1.09   1.25   1.39   1.81   2.35   2.66   2.96   3.59   4.36   4.11 
## 3 Algeria   1.78   1.75   1.79   2.12   2.62   3.13   3.50   3.97   4.95   3.90 
## 4 Andorra  21.6   22.8   24.8   32.0   37.6   39.6   43.1   50.6   53.7   49.8  
## 5 Angola    0.681  0.645  0.873  0.983  1.25   1.90   2.60   3.12   4.08   3.12 
## 6 Antigua… 11.0   10.5   10.5   11.0   11.7   12.8   14.3   16.0   16.5   14.5  
## # … with 10 more variables: `2010` <dbl>, `2011` <dbl>, `2012` <dbl>,
## #   `2013` <dbl>, `2014` <dbl>, `2015` <dbl>, `2016` <dbl>, `2017` <dbl>,
## #   `2018` <dbl>, `2019` <dbl>

1.3 Obtención de variables categóricas

1.3.1 Encima o Debajo de la media

En primer lugar, mediante la tabla PIB per cápita, vamos a crear una nueva variable categórica que mida si un país está por encima o por debajo de la media del PIB de su continente, para ello mediremos diferentes años desde el 2000 al 2019.

dfmepxp = pibxpob
dfmepxp$continent = countrycode(dfmepxp$Country, "country.name", "continent") #Funcion de la libreria country code para asignar continente a un país mediante su nombre
## Warning in countrycode_convert(sourcevar = sourcevar, origin = origin, destination = dest, : Some values were not matched unambiguously: Kosovo
dfme = subset(dfmepxp, select = c("Country","2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019", "continent"))

La siguiente función de R se aplica a un dataframe a partir del cual calcula la media de cada columna numérica, recorre los años y por cada año obtiene la columna del dataframe y compara cada valor con la media del año clasificándolo. Una vez lo ha repetido con todos los años, suma las frecuencias y clasifica finalmente en encima o debajo.

midiendo = function(dat){

  dfmi = subset(dat, select = - c(Country)) #extraemos solo las columnas con valores numericos
  rownames(dfmi) = as.character(dat$Country) #cambiamos los nombres de las filas por los nombres de los paises
  
  medias = colMeans(dfmi, na.rm = TRUE) #calculamos las medias de cada año 
  
  años = c("2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019")
  dfcatmi = subset(dat, select = c("Country"))
  
  for (año in años){
    v = dfmi[[año]]
    año = ifelse(v >= medias[[año]], "encima", "debajo")
    dfcatmi = cbind(dfcatmi, año)
  }
  colnames(dfcatmi)[2:10] = años
  dfcatmi$clasificación = ifelse(rowSums(dfcatmi == "encima", na.rm=TRUE), "encima", "debajo")
  dfcatmi = dfcatmi[,-c(2:10)]
  dfcatmi
  
}

Para poder aplicarlo a cada continente sacamos el subconjunto de datos de cada continente en un dataframe y le aplicamos la función.

dfmeEU = subset(dfme, continent == "Europe", select = c("Country","2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019"))
dfme_catEU = midiendo(dfmeEU)
## Warning: Setting row names on a tibble is deprecated.
dfmeAS = subset(dfme, continent == "Asia", select = c("Country","2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019"))
dfme_catAS = midiendo(dfmeAS)
## Warning: Setting row names on a tibble is deprecated.
dfmeAF = subset(dfme, continent == "Africa", select = c("Country","2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019"))
dfme_catAF = midiendo(dfmeAF)
## Warning: Setting row names on a tibble is deprecated.
dfmeOC = subset(dfme, continent == "Oceania", select = c("Country","2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019"))
dfme_catOC = midiendo(dfmeOC)
## Warning: Setting row names on a tibble is deprecated.
dfmeAM = subset(dfme, continent == "Americas", select = c("Country","2000", "2003","2005","2007", "2010","2012", "2015", "2017", "2019"))
dfme_catAM = midiendo(dfmeAM)
## Warning: Setting row names on a tibble is deprecated.

Por último uniremos los dataframes de cada continente en un solo dataframe y lo ordenaremos por orden alfabético del país.

dfmed_cat = rbind(dfme_catEU,dfme_catAM,dfme_catAF, dfme_catAS, dfme_catOC)

orden <- order(dfmed_cat$Country)
dfmed_cat<- dfmed_cat[orden, ]
head(dfmed_cat)
##                 Country clasificación
## 132         Afghanistan        debajo
## 1               Albania        debajo
## 78              Algeria        encima
## 2               Andorra        encima
## 79               Angola        encima
## 42  Antigua and Barbuda        encima

1.3.2 País en crecimiento o en decrecimiento

Para clasificar si un país está en crecimiento o decrecimiento mediremos los incrementos porcentuales de los últimos cinco años y haciendo un sumatorio de las filas comprobaremos si el valor es positivo o negativo, clasificando respectivamente en crecimiento o decrecimiento. Este vector lo añadiremos al dataframe donde guardamos variables categóricas.

Primero obtendremos el dataframe con los valores de incrementos porcentuales a partir del dataframe inicial, sacamos los 5 últimos, los pivotamos en formato largo para calcular más fácil la diferencia entre años. Después volvemos al formato ancho quitamos 2013, ya que la columna esta vacía, mediante la función rowSums podemos sumar los valores.

dfdos = subset(df, select = c("Country","2013","2014","2015","2016","2017","2018","2019"))
dfdos <- dfdos[-91,]

dfdos_nonulos = dfdos[complete.cases(dfdos), ]
#dfdos <- subset(dfdos, subset = !(row_number() == 91))

dfdos_nnlong = dfdos_nonulos %>% 
  pivot_longer(cols = c("2013","2014","2015","2016","2017","2018"  ,"2019"), names_to = "año", values_to = "pib")


pib_incre_dos = dfdos_nnlong %>% 
  group_by(Country) %>% 
  mutate(incremento_pct = (pib - lag(pib))/lag(pib) * 100)

pib_incre_dos = pib_incre_dos  %>% 
  select(Country, año, incremento_pct) %>% 
  pivot_wider(names_from = año, values_from = incremento_pct)


pib_incre_dos = select(pib_incre_dos, -"2013")

paises = as.character(pib_incre_dos$Country)
pib_incre_dos1 = subset(pib_incre_dos, select = - c(Country))
rownames(pib_incre_dos1) = paises
## Warning: Setting row names on a tibble is deprecated.
pib_incre_dos2 = rowSums(pib_incre_dos1)
head(pib_incre_dos)
## # A tibble: 6 × 7
## # Groups:   Country [6]
##   Country             `2014` `2015` `2016` `2017` `2018` `2019`
##   <chr>                <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 Afghanistan           2.21  -2.71 -10.2    4.79  -2.55   2.58
## 2 Albania               3.61 -14.0    4.15  10.0   16.1    1.60
## 3 Algeria               1.93 -22.4   -3.58   4.66   4.40  -1.83
## 4 Andorra               2.32 -14.6    3.80   3.39   7.48  -1.93
## 5 Angola                6.58 -20.3  -13.0   20.7  -16.9  -16.6 
## 6 Antigua and Barbuda   5.84   6.96   7.48   2.16   9.40   5.11

Una vez tenemos el vector con los valores para cada país, clasificaremos según si el valor es positivo o negativo, y lo guardaremos en el dataframe de las variables categóricas

dfcat = subset(pib_incre_dos, select = c("Country"))
vecrec = ifelse(pib_incre_dos2 > 0, "crecimiento", "decrecimiento")
dfmed_cat$crecimiento = vecrec
head(dfmed_cat)
##                 Country clasificación   crecimiento
## 132         Afghanistan        debajo decrecimiento
## 1               Albania        debajo   crecimiento
## 78              Algeria        encima decrecimiento
## 2               Andorra        encima   crecimiento
## 79               Angola        encima decrecimiento
## 42  Antigua and Barbuda        encima   crecimiento

1.3.3 Latitud

Para clasificar los países según su latitud en Sur, Norte o Ecuador, vamos a utilizar los datos de un dataframe de la librería maps llamado “World.cities”.

dflat = subset(dfmed_cat, select = c("Country")) #Dataframe con una sola columna con el nombre de los paises

De este dataframe sacaremos las columnas de países y de latitud y la combinaremos ambos dataframes mediante la columna de países para obtener solo los que coincidan.

paises = dflat$Country

world.cities1 = subset(world.cities, select = c("Country","lat.x"))
dflat <- merge(dflat, world.cities1, by.x = "Country", by.y = "Country", all.x = TRUE)
head(world.cities)
## # A tibble: 6 × 8
##   Country              ...2 lat.x name                pop lat.y   long capital
##   <chr>               <dbl> <dbl> <chr>             <dbl> <dbl>  <dbl>   <dbl>
## 1 Afghanistan             1  33.9 'Ali Hayl         12834  33.9  69.7        0
## 2 Albania                 2  42.4 Bajram Curri       8095  42.4  20.1        0
## 3 Algeria                 3  35.8 'Ayn 'Azl         45884  35.8   5.5        0
## 4 Andorra                 4  42.5 Andorra la Vella  20314  42.5   1.51       1
## 5 Angola                  5 -12.6 Benguela         155711 -12.6  13.4        0
## 6 Antigua and Barbuda     6  17.0 All Saints         2545  17.0 -61.8        0

Una vez tenemos los valores de latitud crearemos dos umbrales, uno para norte por encima de los 15 grados y uno por el sur por debajo de los -15 grados y los países cuya latitud estén entre estos dos umbrales los clasificaremos en ecuador. Una vez tenemos el vector de clasificación lo guardaremos en el dataframe.

umbral_n = 15
umbral_s = -15
veclat = ifelse(dflat$lat > umbral_n, "Norte", ifelse(dflat$lat < umbral_s, "Sur", "Ecuador"))

dflat$lat=veclat
dfmed_cat$latitud = veclat

1.4 AFC

El mejor planteamiento para el análisis de los datos del PIB per cápita es clasificar cada valor del PIB de la tabla por “Bajo”, “Medio” o “Alto” según si se encuentra en el Q1, Q2-Q3 o Q4 respectivamente, para ello hemos programado las siguientes funciones.

La primera obtiene una columna de valores numéricos, calcula los percentiles y a continuación remplaza los valores por el intervalo en el que se encuentra, devolviendo los rangos percentiles de cada valor.

La segunda función remplaza los valores de las columnas clasificando cada valor según si es un valor Bajo, Medio o Alto.

  replace_with_percentile <- function(column) {
    percentiles <- quantile(column, probs = seq(0, 1, 0.01))
    ranks <- findInterval(column, percentiles)
    return(ranks)
}

reemplazar_valores <- function(dataframe, columnas) {
  for (columna in columnas) {
    dataframe[[columna]] <- ifelse(dataframe[[columna]] < 25, "Bajo",
                              ifelse(dataframe[[columna]] <= 75, "Medio", "Alto"))
  }
  return(as.data.frame(dataframe))
}

1.4.1 PIB per cápita

En el siguiente código se aplican las funciones anteriores a los datos del dataframe del PIB por población desde el 2000.

pibxpobdesde2000 = subset(pibxpob, select = c("Country", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019"))
pibxpob4 = pibxpobdesde2000[complete.cases(pibxpobdesde2000),]

pibxpob4 <- subset(pibxpob4, !(row.names(pibxpob4) == 90))
pibxpob4 = merge(pibxpob4, dflat, by="Country")

pibxpob4$continent <- countrycode(pibxpob4$Country, "country.name", "continent")
pibxpob4$continent[which(pibxpob4$Country == "Turkiye")] = "Europe"

pibxpob4[, 2:21] <- apply(pibxpob4[, 2:21], 2, replace_with_percentile)

pibxpob4 = reemplazar_valores(pibxpob4, 2:21)
head(pibxpob4)
##               Country  2000  2001  2002  2003  2004  2005  2006  2007  2008
## 1             Albania Medio Medio Medio Medio Medio Medio Medio Medio Medio
## 2             Algeria Medio Medio Medio Medio Medio Medio Medio Medio Medio
## 3             Andorra  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto
## 4              Angola Medio  Bajo Medio Medio Medio Medio Medio Medio Medio
## 5 Antigua and Barbuda  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto Medio
## 6           Argentina  Alto  Alto Medio Medio Medio Medio Medio Medio Medio
##    2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  lat.x
## 1 Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio  42.36
## 2 Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio  35.85
## 3  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto  Alto  42.51
## 4 Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio -12.58
## 5 Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio  17.05
## 6 Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio Medio -31.66
##       lat continent
## 1   Norte    Europe
## 2   Norte    Africa
## 3   Norte    Europe
## 4 Ecuador    Africa
## 5   Norte  Americas
## 6     Sur  Americas

Una vez tenemos el dataframe con los valores clasificados podemos crear una tabla de contingencia sumando los valores de las filas.

pibxpob4$Bajo = apply(pibxpob4, 1, function(row) sum(str_count(row, "Bajo")))
pibxpob4$Medio = apply(pibxpob4, 1, function(row) sum(str_count(row, "Medio")))
pibxpob4$Alto = apply(pibxpob4, 1, function(row) sum(str_count(row, "Alto")))

AFC simple sobre la tabla de contingencia de la clasificación por percentiles

paisespibCont4 <- pibxpob4[, c(1,22:27)]

afc4 = CA(X = paisespibCont4[,-c(1:4)], graph = FALSE)
eig.val4 <- get_eigenvalue(afc4)
Vmedia4 = 100 * (1/nrow(eig.val4))
fviz_eig(afc4, addlabels = TRUE) +
  geom_hline(yintercept=Vmedia4, linetype=2, color="red")

Display del AFC poniendo solo las elipses de confianza sobre los continentes, no interesan los individuos porque no es interpretable

p1 = fviz_ca_col(afc4)
p2 = fviz_ca_row(afc4, habillage = pibxpob4$continent, addEllipses = TRUE, ellipse.type = "confidence", label = "none", geom = "text")
grid.arrange( p1, nrow = 1)

grid.arrange(p2, nrow = 1)

Por un lado, el primer gráfico posiciona las categorías a partir de las columnas y, por otro lado, en el segundo graficamos las elipses de confianza por continente. Lo que podemos observar es que la elipse de Europa tiene más países en la clasificación de Alto, aunque la forma alargada también indica que tiene países tirando a Medio.

Por otro lado, vemos que ocurre algo similar con África que es abordado por la clasificación baja aunque algunos países pueden acercarse a Medio. En cuanto a Oceanía y América podemos ver que se sitúan muy cerca de medio, pero sus elipses son más grandes y también se acercan a Alto aunque en mucha menor medida, esto puede ser porque la mayoría de países se pueden clasificar en Medio, pero tienen países como Estados Unidos o Australia que se clasificarían en Alto.

Por último quedaría Asia cuya elipses se sitúa en el centro, la explicación es que Asia tiene la misma proporción de países en Alto como en Bajo, pero tiene sobre todo países en medio, ya que la elipse se alarga en el medio.

Podemos confirmar estas conclusiones, a continuación mostramos los histogramas sumando las columnas de clasificación.

par(mfrow=c(1,3))
barplot(colSums(pibxpob4[which(pibxpob4$continent == "Americas"),25:27])) + title("América")
## numeric(0)
barplot(colSums(pibxpob4[which(pibxpob4$continent == "Asia"), 25:27])) + title("Asia")
## numeric(0)
barplot(colSums(pibxpob4[which(pibxpob4$continent == "Europe"), 25:27])) + title("Europa")

## numeric(0)
barplot(colSums(pibxpob4[which(pibxpob4$continent == "Africa"),25:27])) + title("África")
## numeric(0)
barplot(colSums(pibxpob4[which(pibxpob4$continent == "Oceania"), 25:27])) + title("Oceanía")
## numeric(0)

Podemos realizar el mismo análisis mediante la clasificación de la latitud

p1 = fviz_ca_col(afc4)
p2 = fviz_ca_row(afc4, habillage = pibxpob4$lat, addEllipses = TRUE, ellipse.type = "confidence", label = "none", geom = "text")
grid.arrange( p2, nrow = 1)

Como podemos ver, los países clasificados en el norte están ubicados y tienenden a una clasificación alta. Sin embargo, no está completamente en alto, es decir, algunos países del norte tienden a la clasificación de Medio. Por otro lado, los países que se acercan más a Bajo pertenecen a la zona del ecuador, además la elipse tiene un tamaño similar a la del norte, sin embargo, esta se expande hacia el valor Medio por lo que también hay países con un desarrollo Medio.

Por último la elipse más grande y que abarca más espacio es la del Sur, esta está más definida por el valor Medio, aunque por lo grande que es también tiene algunos países con valores Bajos, ya que se acerca a la su clasificacición, y un par de valores Altos, los cuales podrían ser Australia y Nueva Zelanda.

Si comprobamos las frecuencias nuevamente que se cumplen las conclusiones, pero además vemos que en las tres zonas geográficas abundan más valores medios.

par(mfrow=c(1,3))
barplot(colSums(pibxpob4[which(pibxpob4$lat == "Norte"),25:27])) + title("Norte")
## numeric(0)
barplot(colSums(pibxpob4[which(pibxpob4$lat == "Sur"),25:27])) + title("Sur")
## numeric(0)
barplot(colSums(pibxpob4[which(pibxpob4$lat == "Ecuador"),25:27])) + title("Ecuador")

## numeric(0)

1.4.2 Esperanza de vida

A continuación haremos el mismo análisis pero con los datos de esperanza de vida

colnames(lifeExp)[1] = "Country"
lifeExp <- na.omit(lifeExp)

paises = pibxpob4$Country
lifeExp = lifeExp[lifeExp$Country %in% paises, ]
lifeExp = merge(lifeExp, dflat, by = "Country")

lifeExp[, 2:63] <- apply(lifeExp[, 2:63], 2, replace_with_percentile)

lifeExp <- reemplazar_valores(lifeExp, 2:63)

lifeExp$Bajo = apply(lifeExp, 1, function(row) sum(str_count(row, "Bajo")))
lifeExp$Medio = apply(lifeExp, 1, function(row) sum(str_count(row, "Medio")))
lifeExp$Alto = apply(lifeExp, 1, function(row) sum(str_count(row, "Alto")))

lifeExpCont <- lifeExp[, c("Country","lat", "Bajo", "Medio", "Alto")]

lifeExpCont$continente <- countrycode(lifeExpCont$Country, "country.name", "continent")
lifeExpCont <- na.omit(lifeExpCont)
afc = CA(X = lifeExpCont[,3:5], graph = FALSE)
eig.val <- get_eigenvalue(afc)
Vmedia = 100 * (1/nrow(eig.val))
fviz_eig(afc, addlabels = TRUE) +
  geom_hline(yintercept=Vmedia, linetype=2, color="red")

Mismo proceder al hacer el display

p1 = fviz_ca_col(afc)
p2 = fviz_ca_row(afc, habillage = lifeExpCont$continente, addEllipses = TRUE, ellipse.type = "confidence", label = "none", geom = "text")
grid.arrange(p1, nrow=1)

grid.arrange(p2, nrow=1)

De la gráfica podemos ver una situación similar a la del PIB per cápita, teniendo Europa hacia Alto, en esta caso incluso más cerca del valor, ya que la elipse es mucho más fina y está completamente por encima de la segunda dimensión. Ocurre lo mismo con África y el valor Bajo que podríamos decir que están superpuestos, también al igual que Europa se extiende hacia el valor Medio, por lo que aunque en ambos predomine los valores extremos también cuentan con valores Medios.

Por otro lado, el resto de continentes se solapan cerca del valor Medio por lo que tienen sobre todo valores medios, además se dirigen hacia alto, por lo que en comparación tienen más valores altos que bajos. Podemos ver que Asia sigue estando en el centro, pero tiene una posición más baja e inclinada hacia la derecha, Oceanía continúa siendo el más extenso, pero también es el más cercano a medio de los tres, por último América se sitúa entre el valor Medio y Alto y al igual que en el PIB per cápita más cerca de Medio.

Comparativa por gráficos para visualizar los perfiles que describe el AFC

par(mfrow=c(1,3))
barplot(colSums(lifeExpCont[which(lifeExpCont$continente == "Americas"), 3:5])) + title("América")
## numeric(0)
barplot(colSums(lifeExpCont[which(lifeExpCont$continente == "Asia"), 3:5])) + title("Asia")
## numeric(0)
barplot(colSums(lifeExpCont[which(lifeExpCont$continente == "Europe"), 3:5])) + title("Europa")

## numeric(0)
barplot(colSums(lifeExpCont[which(lifeExpCont$continente == "Africa"), 3:5])) + title("África")
## numeric(0)
barplot(colSums(lifeExpCont[which(lifeExpCont$continente == "Oceania"), 3:5])) + title("Oceanía")
## numeric(0)

p1 = fviz_ca_col(afc)
p2 = fviz_ca_row(afc, habillage = lifeExpCont$lat, addEllipses = TRUE, ellipse.type = "confidence", label = "none", geom = "text")
grid.arrange(p1, nrow=1)

grid.arrange(p2, nrow=1)

Por último, al igual que en el primer afc simple, realizaremos el análisis gráfico mediante la categoría de latitud de los países y las elipses que forman. Empezando por el norte tiene un tamaño muy similar, pero en este caso se posiciona entre Alto y Medio, con una inclinación hacia el valor Alto, es decir, tiene más valores Altos que el resto de zonas. En la zona del Ecuador podemos ver una situación similar pero con el valor Bajo; sin embargo, esta zona está más por encima en la primera dimensión, por lo que en proporción tendrá más países con valores bajos, pero no tantos en Medio.

Por último la zona del Sur vuelve a ser la que tiene una elipse más grande, pero en este caso está mucho más centrada, inclinándose un poco hacia Bajo, es decir, tiene en su mayoría valores medios, pero entre bajos y altos tiene más bajos.

par(mfrow=c(1,3))
barplot(colSums(lifeExpCont[which(lifeExpCont$lat == "Norte"), 3:5])) + title("Norte")
## numeric(0)
barplot(colSums(lifeExpCont[which(lifeExpCont$lat == "Sur"), 3:5])) + title("Sur")
## numeric(0)
barplot(colSums(lifeExpCont[which(lifeExpCont$lat == "Ecuador"), 3:5])) + title("Ecuador")

## numeric(0)

1.5 Conclusiones y limitaciones

A partir de los análisis mediante afc simple de los datos de PIB per cápita y esperanza de vida hemos podido dar respuesta a la hipótesis inicialmente planteada “Los países del norte siempre están más avanzados y desarrollados que los del sur”, por un lado, si es verdad que por zona geográfica hemos visto que las elipses de confianza del Norte siempre están más cerca de la clasificación Alta, aun teniendo muchos valores medios.

Aunque el Norte tenga más valores altos por lo que hemos visto en los histogramas, también tienen algunos países cuyo valor en algún año se ha clasificado en Bajo, esto junto con la información obtenida respecto a la zona del Sur (elipses e histogramas) nos hace rechazar la hipótesis inicial; y es que no todos los países del Norte están más desarrollados que los países del Sur, existen países en ambas zonas que están más desarrollados y otros que están menos desarrollados. Si podríamos afirmar que en general los países del Norte suelen estar más desarrollados que los del Sur y que los países del ecuador son los menos desarrollados de las tres zonas.

En cuanto a las limitaciones que hemos tenido en el desarrollo de este objetivo es que debido a los datos faltantes, algunos países han tenido que ser suprimidos del análisis, pero los faltantes más problemáticos se trataban de los valores en el PIB en los años antes del 2000, por lo tanto, los años incluidos eran a partir de este año para tener la cantidad máxima de países, esto no ocurría con los datos de esperanza de vida. También encontramos que para la clasificación por latitud el número de países situados en el Sur eran muchos menos que los del Norte o Ecuador, quizás con la misma proporción de países para las tres zonas hubiéramos obtenido resultados diferente.

Por último al utilizar cuartiles para clasificar los valores de los datos el 50 % de los datos se clasificaría como Medio, por lo tanto, los valores medios son los más frecuentes en las agrupaciones por continente y por país, forma de clasificar los datos ha sido suficiente para el análisis, pero quizás con otro tipo de clasificación podríamos obtener mejores conclusiones.