Introducción

Este documento presenta un estudio demográfico histórico sobre la evolución de la población del municipio de Horcajada de la Torre de la provincia de Cuenca entre los años 1930 y 1940.
El objetivo es reconstruir la estructura de edad y sexo del municipio a partir de los censos provinciales del Instituto Nacional de Estadística (INE), generando:

Este documento incluye texto, tablas, gráficos y código R reproducible.


Fuentes utilizadas

Las tablas originales proceden de:

Las tablas fueron transcritas manualmente y convertidas a formato digital (Excel), manteniendo:

Antes de realizar la extrapolación al municipio de Horcajada de la Torre, se presentan las pirámides de población originales de la provincia de Cuenca en 1930, desglosadas por estado civil.

Los datos proceden directamente del Instituto Nacional de Estadística (INE), del Censo de población de 1930.
Las tablas fueron transcritas manualmente desde la publicación original, verificando:

Estas pirámides constituyen la base demográfica real sobre la que se realiza la extrapolación proporcional al municipio de Horcajada de la Torre. # Pirámides provinciales de Cuenca (1940) por estado civil

A continuación se presentan las pirámides de población de la provincia de Cuenca en 1940, desglosadas por estado civil.
Los datos proceden del Censo de población de 1940 del INE, y han sido transcritos manualmente desde las tablas originales, verificando:

En este año no existe la categoría “No consta”, por lo que se incorpora como valor 0 para mantener la estructura gráfica homogénea con 1930.

Este trabajo se desarrolla en paralelo a una investigación sobre los vecinos del municipio que aparecen en documentación de la Guerra Civil y la posguerra, consultada en repositorios como el Portal PARES, el Archivo General de la Administración (AGA) y bases de datos de combatientes.
Muchas de estas ausencias no se deben a migraciones ni a errores censales, sino a que los afectados se encontraban en prisión, formando parte de la población reclusa del periodo, tambien a desapariciones o a muertes en combate o por causa de la represión.

La reconstrucción demográfica ofrece un marco cuantitativo para interpretar esa información.
A partir de las pirámides provinciales del INE y su extrapolación al municipio, se estima cuántas personas deberían aparecer en el censo de 1940 según su cohorte de edad.
La comparación entre esa población esperada y la población realmente registrada permite valorar si las ausencias documentadas en los archivos se corresponden con un impacto demográfico apreciable en Horcajada de la Torre.


library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)

# ============================================================
# 1. Cargar datos desde el Excel (INE 1930)
# ============================================================

df <- read_excel("piramide_1930.xlsx", sheet = "Hoja1")

# ============================================================
# 2. Función para preparar datos para pirámide
# ============================================================

prep_piramide <- function(data, grupo_var) {
  
  # Hombres
  hombres <- data %>%
    transmute(
      grupo = !!grupo_var,
      sexo = "Hombres",
      Solteros = Solteros,
      Casados = Casados,
      Viudos = Viudos,
      No_consta = No_consta_hombres
    ) %>%
    pivot_longer(
      cols = c(Solteros, Casados, Viudos, No_consta),
      names_to = "estado",
      values_to = "n"
    )
  
  # Mujeres
  mujeres <- data %>%
    transmute(
      grupo = !!grupo_var,
      sexo = "Mujeres",
      Solteros = Solteras,
      Casados = Casadas,
      Viudos = Viudas,
      No_consta = No_consta_mujer
    ) %>%
    pivot_longer(
      cols = c(Solteros, Casados, Viudos, No_consta),
      names_to = "estado",
      values_to = "n"
    )
  
  # Unir y preparar
  bind_rows(hombres, mujeres) %>%
    mutate(
      n_plot = ifelse(sexo == "Hombres", -n, n),
      estado = factor(
        estado,
        levels = c("Solteros", "Casados", "Viudos", "No_consta"),
        labels = c("Solter@s", "Casad@s", "Viud@s", "No consta")
      )
    )
}

# ============================================================
# 3. Crear los tres conjuntos de datos
# ============================================================

# --- Por años ---
df_years <- prep_piramide(df, df$Edad)

# --- Por quinquenios ---
df_5 <- df %>%
  mutate(grupo_5 = cut(
    Edad,
    breaks = seq(0, max(Edad) + 1, by = 5),
    right = FALSE,
    include.lowest = TRUE
  )) %>%
  prep_piramide(.$grupo_5)

# --- Por decenios ---
df_10 <- df %>%
  mutate(grupo_10 = cut(
    Edad,
    breaks = seq(0, max(Edad) + 1, by = 10),
    right = FALSE,
    include.lowest = TRUE
  )) %>%
  prep_piramide(.$grupo_10)

# ============================================================
# 4. Función para graficar pirámide
# ============================================================

plot_piramide <- function(data, titulo_sub) {
  
  g <- ggplot(data, aes(x = grupo, y = n_plot, fill = estado)) +
    geom_col(width = 0.9) +
    coord_flip() +
    scale_y_continuous(labels = abs) +
    scale_fill_manual(
      values = c(
        "Solter@s" = "#6baed6",
        "Casad@s"  = "#74c476",
        "Viud@s"   = "#fb6a4a",
        "No consta"= "#9e9ac8"
      )
    ) +
    labs(
      title = "Provincia de Cuenca — Censo de 1930",
      subtitle = titulo_sub,
      x = "Edad",
      y = "Población",
      fill = "Estado civil"
    ) +
    theme_minimal(base_size = 13)
  
  return(g)
}

# ============================================================
# 5. Mostrar las tres pirámides en el documento
# ============================================================

plot_piramide(df_years, "Pirámide por años")

plot_piramide(df_5,     "Pirámide por quinquenios")

plot_piramide(df_10,    "Pirámide por decenios")

library(readxl)
library(dplyr)
library(tidyr)
library(ggplot2)

# ============================================================
# 1. Cargar datos desde el Excel (INE 1940)
# ============================================================

df40 <- read_excel("datos_cuenca_1940.xlsx", sheet = "Hoja1")

# ============================================================
# 2. Seleccionar columnas relevantes
# ============================================================

df40 <- df40 %>%
  transmute(
    Edad = EDADES,
    
    # Hombres
    Solteros_h = SOLTEROS,
    Casados_h  = CASADOS,
    Viudos_h   = VIUDOS,
    
    # Mujeres
    Solteras_m = SOLTERAS,
    Casadas_m  = CASADAS,
    Viudas_m   = VIUDAS
  )

# ============================================================
# 3. Función para preparar datos para pirámide
# ============================================================

prep_piramide_40 <- function(data, grupo_var) {
  
  # Hombres
  hombres <- data %>%
    transmute(
      grupo = !!grupo_var,
      sexo = "Hombres",
      Solteros = Solteros_h,
      Casados  = Casados_h,
      Viudos   = Viudos_h,
      No_consta = 0
    ) %>%
    pivot_longer(
      cols = c(Solteros, Casados, Viudos, No_consta),
      names_to = "estado",
      values_to = "n"
    )
  
  # Mujeres
  mujeres <- data %>%
    transmute(
      grupo = !!grupo_var,
      sexo = "Mujeres",
      Solteros = Solteras_m,
      Casados  = Casadas_m,
      Viudos   = Viudas_m,
      No_consta = 0
    ) %>%
    pivot_longer(
      cols = c(Solteros, Casados, Viudos, No_consta),
      names_to = "estado",
      values_to = "n"
    )
  
  bind_rows(hombres, mujeres) %>%
    mutate(
      n_plot = ifelse(sexo == "Hombres", -n, n),
      estado = factor(
        estado,
        levels = c("Solteros", "Casados", "Viudos", "No_consta"),
        labels = c("Solter@s", "Casad@s", "Viud@s", "No consta")
      )
    )
}

# ============================================================
# 4. Crear los tres conjuntos de datos
# ============================================================

# --- Por años ---
df40_years <- prep_piramide_40(df40, df40$Edad)

# --- Por quinquenios ---
df40_5 <- df40 %>%
  mutate(grupo_5 = cut(
    Edad,
    breaks = seq(0, max(Edad) + 1, by = 5),
    right = FALSE,
    include.lowest = TRUE
  )) %>%
  prep_piramide_40(.$grupo_5)

# --- Por decenios ---
df40_10 <- df40 %>%
  mutate(grupo_10 = cut(
    Edad,
    breaks = seq(0, max(Edad) + 1, by = 10),
    right = FALSE,
    include.lowest = TRUE
  )) %>%
  prep_piramide_40(.$grupo_10)

# ============================================================
# 5. Función para graficar pirámide
# ============================================================

plot_piramide_40 <- function(data, titulo_sub) {
  
  g <- ggplot(data, aes(x = grupo, y = n_plot, fill = estado)) +
    geom_col(width = 0.9) +
    coord_flip() +
    scale_y_continuous(labels = abs) +
    scale_fill_manual(
      values = c(
        "Solter@s" = "#6baed6",
        "Casad@s"  = "#74c476",
        "Viud@s"   = "#fb6a4a",
        "No consta"= "#9e9ac8"
      )
    ) +
    labs(
      title = "Provincia de Cuenca — Censo de 1940",
      subtitle = titulo_sub,
      x = "Edad",
      y = "Población",
      fill = "Estado civil"
    ) +
    theme_minimal(base_size = 13)
  
  return(g)
}

# ============================================================
# 6. Mostrar las tres pirámides en el documento
# ============================================================

plot_piramide_40(df40_years, "Pirámide por años")

plot_piramide_40(df40_5,     "Pirámide por quinquenios")

plot_piramide_40(df40_10,    "Pirámide por decenios")

library(dplyr)
library(readxl)
library(ggplot2)
library(tidyr)
library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.3.3
rm(list = ls())

df30 <- read_excel("piramide_1930.xlsx")
df40 <- read_excel("datos_cuenca_1940.xlsx")

pueblo_1930 <- 661
pueblo_1940 <- 708
breaks_quinquenios <- seq(0, 95, 5)

df30_q <- df30 %>%
  mutate(grupo_5 = cut(Edad, breaks = breaks_quinquenios, right = FALSE)) %>%
  group_by(grupo_5) %>%
  summarise(
    hombres1930 = sum(TOTAL_hombres),
    mujeres1930 = sum(TOTAL_mujer)
  ) %>%
  mutate(
    hombres_pueblo_1930 = round(hombres1930 * pueblo_1930 / sum(hombres1930 + mujeres1930)),
    mujeres_pueblo_1930 = round(mujeres1930 * pueblo_1930 / sum(hombres1930 + mujeres1930))
  )

df40_q <- df40 %>%
  mutate(grupo_5 = cut(EDADES, breaks = breaks_quinquenios, right = FALSE)) %>%
  group_by(grupo_5) %>%
  summarise(
    hombres1940 = sum(TOTALES_hombres),
    mujeres1940 = sum(TOTALES_mujeres)
  ) %>%
  mutate(
    hombres_pueblo_1940 = round(hombres1940 * pueblo_1940 / sum(hombres1940 + mujeres1940)),
    mujeres_pueblo_1940 = round(mujeres1940 * pueblo_1940 / sum(hombres1940 + mujeres1940))
  )

df40_q_original <- df40_q


# 2️⃣ Pirámides de población (1930 vs 1940)
piramide_1930 <- df30_q %>%
  select(grupo_5, hombres_pueblo_1930, mujeres_pueblo_1930) %>%
  mutate(
    hombres = -hombres_pueblo_1930,
    mujeres =  mujeres_pueblo_1930,
    año = "1930"
  )

piramide_1940 <- df40_q_original %>%
  select(grupo_5, hombres_pueblo_1940, mujeres_pueblo_1940) %>%
  mutate(
    hombres = -hombres_pueblo_1940,
    mujeres =  mujeres_pueblo_1940,
    año = "1940"
  )

piramides <- bind_rows(piramide_1930, piramide_1940) %>%
  pivot_longer(cols = c(hombres, mujeres),
               names_to = "sexo",
               values_to = "poblacion")

limite <- max(abs(piramides$poblacion))

ggplot(piramides, aes(x = grupo_5, y = poblacion, fill = sexo)) +
  geom_col(width = 0.9) +
  coord_flip() +
  facet_wrap(~año, ncol = 2) +
  scale_y_continuous(limits = c(-limite, limite), labels = abs) +
  scale_fill_manual(values = c("hombres" = "steelblue", "mujeres" = "tomato")) +
  labs(
    title = "Pirámide de población del municipio (1930 vs 1940)",
    x = "Grupo de edad",
    y = "Población"
  ) +
  theme_minimal(base_size = 13)

# 3️⃣ Faltantes por cohorte
df30_q <- df30_q %>% mutate(id = row_number())
df40_q <- df40_q %>% mutate(id = row_number() - 2) %>% filter(id >= 1)

cohortas <- df40_q %>%
  inner_join(df30_q, by = "id", suffix = c("_1940", "_1930")) %>%
  mutate(
    faltan_hombres = hombres_pueblo_1930 - hombres_pueblo_1940,
    faltan_mujeres = mujeres_pueblo_1930 - mujeres_pueblo_1940
  )

faltantes_long <- cohortas %>%
  pivot_longer(cols = c(faltan_hombres, faltan_mujeres),
               names_to = "sexo", values_to = "faltan") %>%
  mutate(sexo = ifelse(sexo == "faltan_hombres", "Hombres", "Mujeres"))

limite <- max(abs(faltantes_long$faltan))

ggplot(faltantes_long, aes(x = grupo_5_1940, y = faltan)) +
  geom_col(fill = "firebrick") +
  facet_wrap(~sexo, ncol = 1, scales = "fixed") +
  scale_y_continuous(limits = c(-limite, limite), labels = abs) +
  labs(
    title = "Personas faltantes por cohorte (1930 → 1940)",
    x = "Grupo de edad en 1940",
    y = "Personas faltantes"
  ) +
  theme_minimal()