INFORMACIÓN DE CONTACTO

GMAIL:

GitHub: https://github.com/delacruz-renzo

¿Qué son las pirámides poblacionales?

Las pirámides poblacionales, también denominadas pirámides demográficas, son representaciones gráficas de la estructura de una población, clasificados por sexo y grupos etarios, en un espacio geográfico y período determinados. Estas representaciones adoptan la forma de un doble histograma horizontal, en el que los datos suelen agruparse en intervalos quinquenales (0–4, 5–9, 10–14, etc.). Convencionalmente, la población masculina se dispone a la izquierda del eje central y la población femenina a la derecha.

De acuerdo con la forma que adopte, la pirámide poblacional se clasifica en cinco tipos:

  • Pirámide Progresiva (Creciente, Triangular o Expansiva): Se caracteriza por una base amplia, mientras que las secciones medias y superiores son más estrechas. Este tipo de pirámide refleja una mayor proporción de población juvenil en comparación con la adulta.

  • Pirámide Estacionária (Estancada, Equilibrada o Campaniforme): Se caracteriza por una base y una parte media de amplitud similar, mientras que la sección superior es más estrecha. En este tipo de pirámide, la proporción de población juvenil y adulta es comparable.

  • Pirámide Regresiva (Decadencia, Bulbo o Rombo): Se caracteriza por una base y una parte superior más estrechas en comparación con la sección media, que es más amplia. Este tipo de pirámide refleja una mayor proporción de población adulta en relación con los juveniles.

  • Pirámide Invertida: Se caracteriza por una base y una parte media más estrechas en comparación con la sección superior, que es más amplia. Este tipo de pirámide refleja un proceso de envejecimiento progresivo de la población. Aunque podría considerarse un subtipo de las pirámides regresivas, a menudo se describe como una categoría distinta debido a su enfoque particular en el envejecimiento poblacional.

  • Pirámide Desequilibrada: Este tipo de pirámide se presenta cuando existe una desproporción, principalmente en la distribución por sexo. No se reconoce ampliamente como una categoría independiente, pero podría considerarse una variación de cualquiera de los tipos anteriores, dependiendo de las circunstancias particulares de la población que se está analizando.

Las pirámides poblacionales son herramientas fundamentales en el análisis demográfico, ya que permiten identificar tendencias clave como el crecimiento de la población, el envejecimiento demográfico y las tasas de natalidad y mortalidad. Estos gráficos no solo ofrecen una representación visual clara de la estructura poblacional, sino que también juegan un papel crucial en la formulación de políticas públicas. Al proporcionar información sobre las proyecciones de población, permiten anticipar las necesidades futuras en áreas como infraestructura, educación, salud y empleo, lo que contribuye a una planificación más eficiente y contribuye al bienestar social de las comunidades.

Objetivo

El objetivo principal de este documento Markdown es proporcionar una guía sobre cómo elaborar gráficos de pirámides poblacionales utilizando el lenguaje de programación R.

Importar Datos

Los datos utilizados en este documento provienen del Censo Nacional 2017, realizado por el Instituto Nacional de Estadística e Informática (INEI). Específicamente, se utilizo la información corresponde a la distribución de la población masculina y femenina por grupos etarios correspondientes a la región de Lima.

library(readxl)
library(dplyr)
# Importar datos "xlsx".
data <- read_excel("d:/Lenovo/Desktop/GEO/PROJECT_4/data.xlsx")
head(data, 18)
## # A tibble: 18 × 6
##    Grupos   Hombre Mujer   Año Region Fuente
##    <chr>     <dbl> <dbl> <dbl> <chr>  <chr> 
##  1 0 a 4     39164 38678  2017 Lima   INEI  
##  2 5 a 9     34851 33336  2017 Lima   INEI  
##  3 10 a 14   40638 38644  2017 Lima   INEI  
##  4 15 a 19   34830 33510  2017 Lima   INEI  
##  5 20 a 24   37611 38192  2017 Lima   INEI  
##  6 25 a 29   34618 34701  2017 Lima   INEI  
##  7 30 a 34   34695 34349  2017 Lima   INEI  
##  8 35 a 39   31330 30705  2017 Lima   INEI  
##  9 40 a 44   25427 25270  2017 Lima   INEI  
## 10 45 a 49   20612 20553  2017 Lima   INEI  
## 11 50 a 54   15725 15561  2017 Lima   INEI  
## 12 55 a 59   13478 13512  2017 Lima   INEI  
## 13 60 a 64   10231 10254  2017 Lima   INEI  
## 14 65 a 69    7974  8320  2017 Lima   INEI  
## 15 70 a 74    6167  6746  2017 Lima   INEI  
## 16 75 a 79    5533  6238  2017 Lima   INEI  
## 17 80 a 84    3531  3614  2017 Lima   INEI  
## 18 85 y más   4456  5288  2017 Lima   INEI
str(data)
## tibble [18 × 6] (S3: tbl_df/tbl/data.frame)
##  $ Grupos: chr [1:18] "0 a 4" "5 a 9" "10 a 14" "15 a 19" ...
##  $ Hombre: num [1:18] 39164 34851 40638 34830 37611 ...
##  $ Mujer : num [1:18] 38678 33336 38644 33510 38192 ...
##  $ Año   : num [1:18] 2017 2017 2017 2017 2017 ...
##  $ Region: chr [1:18] "Lima" "Lima" "Lima" "Lima" ...
##  $ Fuente: chr [1:18] "INEI" "INEI" "INEI" "INEI" ...
# Calcular los porcentajes de la población por grupo etario.
data1 <- data %>%
  mutate(Hombre_porcentaje = Hombre/sum(Hombre)*100, 
         Mujer_porcentaje = Mujer/sum(Mujer)*100) %>%
  select(Grupos, Hombre_porcentaje, Mujer_porcentaje)
head(data1, 18)
## # A tibble: 18 × 3
##    Grupos   Hombre_porcentaje Mujer_porcentaje
##    <chr>                <dbl>            <dbl>
##  1 0 a 4                9.77             9.73 
##  2 5 a 9                8.69             8.39 
##  3 10 a 14             10.1              9.72 
##  4 15 a 19              8.69             8.43 
##  5 20 a 24              9.38             9.61 
##  6 25 a 29              8.64             8.73 
##  7 30 a 34              8.65             8.64 
##  8 35 a 39              7.82             7.73 
##  9 40 a 44              6.34             6.36 
## 10 45 a 49              5.14             5.17 
## 11 50 a 54              3.92             3.92 
## 12 55 a 59              3.36             3.40 
## 13 60 a 64              2.55             2.58 
## 14 65 a 69              1.99             2.09 
## 15 70 a 74              1.54             1.70 
## 16 75 a 79              1.38             1.57 
## 17 80 a 84              0.881            0.909
## 18 85 y más             1.11             1.33
# Convertir la columnna Grupos en tipo factor (asignar orden específico).
data1$Grupos <- factor(data1$Grupos, levels = unique(data1$Grupos))

pyramid

La librería pyramid es una herramienta especializada en la creación de gráficos de pirámides poblacionales, permitiendo su personalización de manera sencilla y eficiente. Es ampliamente utilizada en análisis demográficos y geográficos.

Puedes consultar la documentación completa de la librería pyramid en el siguiente enlace: https://cran.r-project.org/package=pyramid

# Graficar pirámide poblacional.
library(pyramid)
pyramids(Left = data1$Hombre_porcentaje, 
         Right = data1$Mujer_porcentaje, 
         Center = data1$Grupos,
         Rlab = "Mujeres (%)", Llab = "Hombres (%)", 
         Clab = "Grupo de Edad", Cgap=0.5,
         Lcol = "#07b6c3", Rcol = "#e0706d",
         main = "Pirámide Poblacional de la Región Lima, Perú - 2017")

ggplot2

La librería ggplot2 es una de las más populares en R para la creación de gráficos y visualización de datos. Se basa en la gramática de los gráficos (Grammar of Graphics), un sistema que descompone un gráfico en componentes básicos como datos, estética, geometría, estadísticas, coordenadas y facetas. Esto permite crear visualizaciones complejas de manera intuitiva y flexible.

Puedes consultar la documentación completa de la librería ggplot2 en el siguiente enlace: https://cran.r-project.org/package=ggplot2

library(tidyverse)
# Convertir el DataFrame de un formato ancho a largo.
data2 <- data1 %>% gather(Sexo, Poblacion, -1)
head(data2)
## # A tibble: 6 × 3
##   Grupos  Sexo              Poblacion
##   <fct>   <chr>                 <dbl>
## 1 0 a 4   Hombre_porcentaje      9.77
## 2 5 a 9   Hombre_porcentaje      8.69
## 3 10 a 14 Hombre_porcentaje     10.1 
## 4 15 a 19 Hombre_porcentaje      8.69
## 5 20 a 24 Hombre_porcentaje      9.38
## 6 25 a 29 Hombre_porcentaje      8.64
# Graficar pirámide poblacional con un "theme_classic".
library(ggplot2)
ggplot(data2, aes(x = Grupos, fill = Sexo,
                y = ifelse(Sexo == "Hombre_porcentaje", -Poblacion, Poblacion))) +
  geom_bar(stat = "identity") +
  labs(y = "Porcentaje (%)", x = "Grupo de Edad") +
  ggtitle("Pirámide Poblacional de la Región Lima, Perú - 2017") +
  coord_flip() +
  theme_classic() +
  scale_y_continuous(breaks = c(seq(-10, 0, by = 2), seq(0, 10, by = 2)),
    labels = c(seq(-10, 0, by = 2) * -1, seq(0, 10, by = 2))) +
  scale_fill_manual(values = c("Hombre_porcentaje" = "#07b6c3", "Mujer_porcentaje" = "#e0706d"),
                    labels = c("Hombres", "Mujeres")) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        legend.title = element_text(hjust = 0.5, face = "bold"))

# Graficar pirámide poblacional con un "theme_minimal".
library(ggplot2)
ggplot(data2, aes(x = Grupos, fill = Sexo,
                y = ifelse(Sexo == "Hombre_porcentaje", -Poblacion, Poblacion))) +
  geom_bar(stat = "identity") +
  labs(y = "Porcentaje (%)", x = "Grupo de Edad") +
  ggtitle("Pirámide Poblacional de la Región Lima, Perú - 2017") +
  coord_flip() +
  theme_minimal() +
  scale_y_continuous(breaks = c(seq(-10, 0, by = 2), seq(0, 10, by = 2)),
    labels = c(seq(-10, 0, by = 2) * -1, seq(0, 10, by = 2))) +
  scale_fill_manual(values = c("Hombre_porcentaje" = "#07b6c3", "Mujer_porcentaje" = "#e0706d"),
                    labels = c("Hombres", "Mujeres")) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        legend.title = element_text(hjust = 0.5, face = "bold"))

# Graficar pirámide poblacional con un "theme_gray".
library(ggplot2)
ggplot(data2, aes(x = Grupos, fill = Sexo,
                y = ifelse(Sexo == "Hombre_porcentaje", -Poblacion, Poblacion))) +
  geom_bar(stat = "identity") +
  labs(y = "Porcentaje (%)", x = "Grupo de Edad") +
  ggtitle("Pirámide Poblacional de la Región Lima, Perú - 2017") +
  coord_flip() +
  theme_gray() +
  scale_y_continuous(breaks = c(seq(-10, 0, by = 2), seq(0, 10, by = 2)),
    labels = c(seq(-10, 0, by = 2) * -1, seq(0, 10, by = 2))) +
  scale_fill_manual(values = c("Hombre_porcentaje" = "#07b6c3", "Mujer_porcentaje" = "#e0706d"),
                    labels = c("Hombres", "Mujeres")) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        legend.title = element_text(hjust = 0.5, face = "bold"))