Hoy quería yo reivindicar la figura de un tipo bastante maltratado: Thomas Malthus. Maltratado porque era un poco reaccionario y facha, y parece que eso es suficiente para que se olviden de uno, aunque fuera el tipo que más ha aportado a la demografía.

Y el homenaje tenía que hacérselo con el paquete de R que más utilizo últimamente, el XML, y algunos sencillos gráficos creados con R-commander. Malthus lo que venía a decir es que somos muchos, demasiados, y encima la cosa tenía muy mala pinta. Parece que tiene razón, pero vamos a verlo gráficamente. Comenzamos:

library(XML)

pag <- "http://en.wikipedia.org/wiki/World_population"
total_tablas <- readHTMLTable(pag)
str(total_tablas)

Nos interesa saber la población estimada y tenemos 17 elementos. Nos vamos a quedar con las estimaciones desde el siglo XVIII en adelante. Tenemos el problema con los formatos de los números:

poblacion <- data.frame(total_tablas$"Estimated world population at various dates (in millions) [citation needed]")

# NOS QUEDAMOS CON LOS REGISTROS QUE NOS INTERESAN
poblacion <- poblacion[c(16:nrow(poblacion)-1),]

# FUNCION PARA TRANSFORMAR CARACTER A NUMERO
cambio <- function(x){
  x <- gsub("([[:punct:]])", "", x)
  x <- gsub("([[:alpha:]])", "", x)
  # AJUSTE A MEDIDA, POR NO COMPLICAR LA FUNCION
  x <- as.numeric(gsub(" 1 ", "", x))
  return(x)
}

# PODEMOS USAR SAPPLY:
poblacion$Year <- cambio(poblacion$Year)
poblacion$World <- cambio(poblacion$World)
poblacion$Africa <- cambio(poblacion$Africa)
poblacion$Asia <- cambio(poblacion$Asia)
poblacion$Europe <- cambio(poblacion$Europe)
poblacion$Latin.America <- cambio(poblacion$"Latin.America.Note.1.")
poblacion$Northern.America <- cambio(poblacion$"Northern.America.Note.1.")
poblacion$Oceania <- cambio(poblacion$Oceania)

Analicemos si Malthus tenía motivos para ser tan cenizo:

plot(poblacion$Year, poblacion$World, type = "l", col = "red",
     lwd = 3, main = "Evolución de la población desde el siglo XVIII")

# Malthus murió en el 1834. Nada más comenzar a liarla la reina Victoria
# Pintamos una línea vertical
lines(rep(1834, 10), seq(1, 7000, by = 700), lty = "dashed")

pob1.png

Hay que decir que Malthus era clérigo, por eso tenía tanto tiempo para dedicar al pensamiento; eso facilita su genialidad. No es quitarle méritos, pero el resto de la población inglesa (y sobre todo de las colonias inglesas) bastante tenía con poder acceder a la comida. Si realizamos este gráfico con la ayuda del R-commander para cada continente nos encontramos lo siguiente:

.mar <- par(mar = c(5.1, 4.1, 10.5, 2.1))
matplot(poblacion$Year,
        poblacion[, c("Africa", "Asia", "Europe", "Latin.America", "Northern.America", "Oceania", "World")],
        type = "l", lty = 1, lwd = 2, ylab = "Población en millones de habitantes")

.xpd <- par(xpd = TRUE)
legend(1739.68, 11673.16,
       legend = c("Africa", "Asia", "Europe", "Latin.America", "Northern.America", "Oceania", "World"),
       col = c(1, 2, 3, 4, 5, 6, 1), lty = 1, lwd = 2)
par(mar = .mar)
par(xpd = .xpd)

pob2.png

Yo empleo mucho el R-commander para realizar gráficos “rápidos”; es una forma de conseguir código que luego podemos modificar de un modo muy sencillo. En este caso he empleado el menos sofisticado posible: un gráfico lineal. A la vista de los datos, es evidente que el crecimiento exponencial de la población comenzó a primeros del siglo XX en Asia. África comienza a despuntar, pero la esperanza de vida allí es mucho menor:

Si analizamos las pirámides de población, las africanas dan mucho que pensar. Si Malthus está un poco olvidado, el continente africano… Para analizar pirámides de población tenemos el módulo plotrix y la función pyramid.plot. Así, si deseamos hacer la pirámide de población de Mali con R, podemos hacer lo siguiente:

mali <- readHTMLTable("http://data.un.org/Data.aspx?q=age+sex+mali&d=GenderStat&f=inID%3a6%3bcrID%3a48")
mali <- mali[[2]] # Nos quedamos con el segundo elemento

# VECTOR DE ETIQUETAS
etiquetas <- gsub("Male ", "", mali$Subgroup)
etiquetas <- gsub("Female ", "", etiquetas)
etiquetas <- gsub(" yr", "", etiquetas)
etiquetas <- unique(etiquetas)

# DATOS PARA HOMBRES
xx.data <- as.vector(subset(mali, substr(mali$Subgroup, 1, 1) == "M")$Value)
xx.data <- as.numeric(xx.data)
xx.data <- (xx.data / sum(xx.data)) * 100

# DATOS PARA MUJERES
xy.data <- as.vector(subset(mali, substr(mali$Subgroup, 1, 1) == "F")$Value)
xy.data <- as.numeric(xy.data)
xy.data <- (xy.data / sum(xy.data)) * 100

library(plotrix)
pyramid.plot(xy.data, xx.data, labels = etiquetas, gap = 5, show.values = TRUE)

pob3.png

Con este gráfico, lo primero que tenemos que decir es que la BBDD de las Naciones Unidas está un poco hecha polvo; además, los colores que selecciona R por defecto son muy feos. Los rangos se solapan y no parece que actualicen mucho sus estimaciones estos de la ONU. De todos modos nos quedamos con el % de personas mayores de 65: preocupante. En fin, R ha sido buena excusa para recordar a un gran pensador, bajo mi punto de vista muy olvidado. Saludos.