Este informe documenta el análisis cuantitativo realizado para estudiar la relación entre las viviendas de uso turístico (VUT) y la pérdida de población residente en el municipio de Cádiz. El análisis se basa principalmente en datos abiertos del INE para el periodo 2021-2025.
## Secciones únicas: 107
## Años disponibles: 2021, 2022, 2023, 2024, 2025
La población de Cádiz pasa de 114.442 habitantes en 2021 a 110.123 en 2025. Esto supone una pérdida de 4.319 residentes, equivalente a un descenso del 3,8%.
En la serie original del INE, las VUT pasan de 1.474 en agosto de 2021 a 1.706 en agosto de 2024, lo que supone un crecimiento del 15,7%. A partir de noviembre de 2024 se produce un cambio metodológico en la fuente, por lo que el análisis principal utiliza la serie homogénea de agosto entre 2021 y 2024.
Durante el periodo analizado también cambia el seccionado censal de Cádiz: 110 secciones en 2021 y 2022, 111 en 2023 y 107 en 2024. Para mantener una base territorial estable, el análisis por sección censal se realiza sobre las 107 secciones vigentes en 2024.
## Polígonos en Cádiz municipio: 107
## Sistema de referencia: ETRS89 / UTM zone 30N
La cartografía utilizada corresponde al seccionado censal de 2024, con 107 secciones para el municipio de Cádiz.
La renta neta media por persona crece un 19,1% entre 2020 y 2023, pasando de 12.887 € a 15.352 €. Para los cruces con el resto de variables, se utiliza el periodo común del panel.
Las fuentes se integran en un único objeto espacial, con una fila por sección censal y año.
## Filas: 535
## Variables: cod_seccion, cod_distrito, anio, poblacion, vut, plazas, renta_persona, geometry
Antes de continuar, se revisa la cobertura de datos por año. Esto permite comprobar qué variables están disponibles en cada momento y qué comparaciones pueden hacerse con seguridad.
La población tiene cobertura completa entre 2021 y 2025. Las VUT están disponibles entre 2021 y 2024, salvo los dos valores ausentes aislados en la misma sección censal, uno en 2021 y otro en 2022. La renta llega hasta 2023.
Antes de comenzar el análisis exploratorio, conviene señalar algunas particularidades de las fuentes y del diseño del panel, ya que condicionan la interpretación de los resultados.
A partir del segundo semestre de 2024, el INE modificó la metodología de la EVT y cambió los meses de referencia de la estadística. Hasta entonces, la serie utilizada en este trabajo se basaba en los datos de agosto. A partir de la nueva metodología aparecen datos de noviembre, que no son directamente comparables con la serie homogénea de agosto de 2021 a agosto de 2024.
En el caso de Cádiz, este cambio coincide con el descenso entre agosto de 2024, con 1.706 VUT, y noviembre de 2024, con 1.463. Por este motivo, los datos de noviembre de 2024 y noviembre de 2025 se revisan como referencia, pero no se incorporan al análisis principal.
El número de secciones censales varía durante el periodo: la EVT incluye 110 secciones en agosto de 2021 y 2022, 111 en agosto de 2023 y 107 desde agosto de 2024. La cartografía de referencia utilizada en este trabajo contiene 107 secciones censales. Por ello, el análisis se realiza sobre este seccionado común, lo que permite comparar los años sobre una base territorial estable.
Estas modificaciones del seccionado suelen responder a ajustes técnicos derivados de cambios en la distribución de la población. En este trabajo, su efecto principal es que algunas secciones presentes al inicio del periodo no coinciden exactamente con el seccionado vigente en 2024.
En este apartado se revisan las principales variables continuas del panel: población, VUT, plazas y renta neta media por persona. El objetivo es conocer su distribución, detectar valores ausentes o atípicos y valorar si alguna variable necesita una transformación para mejorar su representación.
La revisión de valores ausentes permite comprobar qué variables están disponibles en cada año y qué cruces pueden realizarse sin perder coherencia temporal.
## Valores ausentes por variable y año
## # A tibble: 5 × 8
## anio n_secciones na_poblacion na_vut na_plazas na_renta pct_vut_na
## <int> <int> <int> <int> <int> <int> <dbl>
## 1 2021 107 0 1 1 0 0.9
## 2 2022 107 0 1 1 0 0.9
## 3 2023 107 0 0 0 0 0
## 4 2024 107 0 0 0 107 0
## 5 2025 107 0 107 107 107 100
## # ℹ 1 more variable: pct_renta_na <dbl>
##
## Secciones con VUT ausente en 2021 y 2022
## anio cod_distrito cod_seccion
## 1 2021 1101210 1101210026
## 2 2022 1101210 1101210026
##
## Cobertura del panel por año y variable
## # A tibble: 5 × 5
## anio Poblacion VUT Plazas `Renta por persona`
## <int> <chr> <chr> <chr> <chr>
## 1 2021 Completa 1 NA aislado (sección 1101210026) 1 NA ai… Completa
## 2 2022 Completa 1 NA aislado (sección 1101210026) 1 NA ai… Completa
## 3 2023 Completa Completa Completa Completa
## 4 2024 Completa Completa Completa No disponible
## 5 2025 Completa No disponible No disp… No disponible
El recuento confirma tres patrones.
La población, que cuenta con una cobertura completa en todo el periodo.
Las VUT y plazas presentan un único valor ausente en 2021 y otro en 2022, ambos en la sección 1101210026 del distrito 10. Esta sección probablemente no superó los umbrales de difusión del INE en los primeros años de la EVT y aparece por primera vez en 2023 con cero VUT. No hay datos de VUT ni de plazas para 2025 por desfase de publicación de la EVT.
En cuanto a la renta neta, la cobertura llega hasta 2023. Por este motivo, los análisis que cruzan renta con presión turística se limitan al periodo 2021-2023, mientras que los cruces entre VUT y población pueden extenderse hasta 2024.
El análisis univariante muestra comportamientos distintos según la variable.
La población residente presenta una distribución moderadamente asimétrica, con la mayoría de secciones entre 700 y 1.200 habitantes. Entre 2021 y 2025 se aprecia un ligero desplazamiento hacia valores menores, coherente con la pérdida de población observada en el municipio.
Las VUT presentan una distribución mucho más desigual. La mayoría de secciones tiene valores bajos, mientras que unas pocas concentran cifras elevadas. En escala logarítmica se observa mejor cómo la distribución se desplaza hacia valores mayores entre 2021 y 2024, especialmente en las secciones con más presencia turística.
Las plazas turísticas siguen un patrón similar al de las VUT, aunque con valores mayores.
La renta neta por persona, disponible hasta 2023, muestra un desplazamiento general al alza, en línea con la evolución nominal de la renta municipal.
La figura muestra la evolución agregada de los tres indicadores principales del análisis.
La población residente desciende de forma continuada entre 2021 y 2025, pasando de 114.442 a 110.123 habitantes. Esto equivale a una pérdida aproximada del 3,8%, con un ritmo medio anual cercano al 1%.
Las VUT aumentan un 20,1% entre 2021 y 2024 en el panel armonizado, al pasar de 1.420 a 1.706 viviendas. Este crecimiento se acelera a partir de 2022, con casi 270 nuevas VUT en los dos años siguientes.
La renta neta media por persona, ponderada por población, sube un 13,8% nominal entre 2021 y 2023. Este dato debe leerse con cautela, ya que coincide con un periodo de inflación elevada y no implica necesariamente una mejora real del poder adquisitivo.
El crecimiento de las VUT cambia según la base territorial utilizada. En la serie original del INE, el aumento es del 15,7%. En el panel armonizado de 107 secciones, utilizado en este trabajo, alcanza el 20,1%. Ambas cifras son correctas, pero se calculan sobre bases territoriales distintas. En adelante se emplea el 20,1%, por ser el dato coherente con el panel de análisis.
Se utiliza la regla de Tukey para localizar valores atípicos en las variables continuas de cada año. Este método no exige asumir una distribución normal, algo importante en variables como las VUT o las plazas turísticas, que presentan una distribución muy desigual.
En este estudio, un valor atípico no tiene por qué indicar un error. Puede señalar precisamente aquellas secciones donde la actividad turística está más concentrada. Por este motivo, estos casos se mantienen en el análisis y se interpretan como parte del fenómeno estudiado.
## Outliers por variable y año (regla 1.5·IQR)
## # A tibble: 16 × 3
## variable anio superior
## <fct> <int> <int>
## 1 Población 2021 3
## 2 Población 2022 4
## 3 Población 2023 3
## 4 Población 2024 4
## 5 Población 2025 3
## 6 VUT 2021 5
## 7 VUT 2022 5
## 8 VUT 2023 4
## 9 VUT 2024 2
## 10 Plazas 2021 4
## 11 Plazas 2022 4
## 12 Plazas 2023 4
## 13 Plazas 2024 3
## 14 Renta por persona 2021 1
## 15 Renta por persona 2022 1
## 16 Renta por persona 2023 2
##
## Outliers superiores en VUT por año (límite 1.5·IQR de referencia)
## # A tibble: 16 × 5
## anio cod_distrito cod_seccion valor limite_sup
## <int> <chr> <chr> <dbl> <dbl>
## 1 2021 1101202 1101202001 61 45.5
## 2 2021 1101201 1101201003 60 45.5
## 3 2021 1101206 1101206006 60 45.5
## 4 2021 1101201 1101201004 59 45.5
## 5 2021 1101202 1101202003 53 45.5
## 6 2022 1101201 1101201003 61 46
## 7 2022 1101201 1101201004 59 46
## 8 2022 1101206 1101206006 58 46
## 9 2022 1101202 1101202001 56 46
## 10 2022 1101202 1101202005 50 46
## 11 2023 1101201 1101201004 66 51.8
## 12 2023 1101201 1101201003 61 51.8
## 13 2023 1101202 1101202001 61 51.8
## 14 2023 1101206 1101206006 60 51.8
## 15 2024 1101201 1101201004 77 61.8
## 16 2024 1101201 1101201003 67 61.8
Los diagramas de caja muestran dos perfiles claros. Población y renta presentan distribuciones más estables, con pocos valores atípicos. En cambio, las VUT y las plazas presentan varias secciones con valores altos respecto al conjunto del municipio.
El ranking por número de VUT permite identificar un grupo reducido de secciones que aparecen con valores atípicos durante varios años. Esto sugiere que no son casos puntuales, sino zonas donde la oferta turística se concentra de forma persistente. Estas secciones se analizarán más adelante en el bloque territorial.
Para completar el análisis univariante se revisan las distribuciones del año 2023, el último con cobertura completa de población, VUT, plazas y renta. También se compara la distribución de las VUT en escala lineal y logarítmica para comprobar si la transformación \(\log(x+1)\) mejora la lectura de la variable.
Figura 1: La distribución conjunta confirma lo observado anteriormente. Población y renta presentan formas más equilibradas. VUT y plazas, sin embargo, concentran muchos valores bajos y una cola larga hacia la derecha. Esto refleja que la actividad turística no se reparte de forma homogénea entre secciones.
Figura 2: La comparación entre escala lineal y \(\log(x+1)\) para las VUT muestra que la transformación ayuda a leer mejor esta variable. En escala lineal, los valores bajos quedan muy comprimidos y no se diferencian. Con la transformación logarítmica se distinguen mejor las secciones sin actividad turística (valor cero) de aquellas con presencia de VUT.
Figura 3: La evolución de la distribución de VUT entre 2021 y 2024 muestra una forma bastante estable, aunque con una ligera reducción de las secciones sin VUT y una cola más extendida en 2024. Esto encaja con la idea de crecimiento concentrado en las zonas con mayor presencia turística.
## Difusión e intensificación de la presencia turística por año
## -------------------------------------------------------------
## # A tibble: 4 × 7
## anio secciones_con_datos con_alguna_vut con_oferta_consolidada
## <int> <int> <int> <int>
## 1 2021 106 95 66
## 2 2022 106 94 71
## 3 2023 107 98 70
## 4 2024 107 103 71
## # ℹ 3 more variables: con_concentracion_alta <int>, pct_con_alguna_vut <dbl>,
## # pct_con_oferta_consolidada <dbl>
El número de secciones con datos varía ligeramente entre años: 106 en 2021 y 2022, y 107 en 2023 y 2024. La diferencia se debe a la sección 1101210026, sin datos de VUT en los dos primeros años.
La presencia de viviendas turísticas ya estaba bastante extendida al inicio del periodo. En 2021, el 89,6% de las secciones con datos tenía al menos una VUT, y el 62,3% contaba con cinco o más. En 2024, la proporción de secciones con alguna VUT alcanza el 96,3%, pero las secciones con oferta consolidada se mantienen en torno a 70.
Estos datos matizan el crecimiento agregado de las VUT. El aumento del 20,1% entre 2021 y 2024 no parece deberse principalmente a una expansión hacia muchas secciones nuevas, sino a una intensificación en secciones donde la actividad turística ya estaba presente.
Este resultado encaja con lo observado en la detección de valores atípicos. En ese análisis se identificaba un grupo reducido de secciones con valores elevados de forma recurrente. Ambos resultados apuntan a una densificación de la oferta turística más que a una expansión territorial generalizada.
El análisis univariante permite fijar varias decisiones para los bloques siguientes.
En primer lugar, la cobertura temporal no es la misma para todas las variables. Los análisis que incorporen la renta se limitan al periodo 2021-2023, mientras que los centrados en población y VUT pueden ampliarse hasta 2024.
En segundo lugar, las variables turísticas presentan una distribución muy desigual. La mayoría de secciones tiene valores bajos o moderados, pero un grupo reducido concentra cifras elevadas de forma persistente. Por este motivo, los valores atípicos no se eliminan del análisis, sino que se consideran parte relevante del fenómeno.
En tercer lugar, el crecimiento de las VUT no parece responder tanto a una expansión hacia zonas nuevas de la ciudad. La presencia turística ya estaba muy extendida al inicio del periodo. Los datos apuntan más bien a una intensificación en secciones donde el fenómeno ya estaba presente.
A partir de aquí, el análisis se centra en comprobar qué secciones concentran ese crecimiento y cómo se relaciona esta dinámica con la evolución de la población residente.
A partir del panel armonizado se construyen varios indicadores para comparar la evolución de las secciones censales. No basta con observar los valores absolutos, ya que las secciones tienen tamaños de población diferentes. Por eso se calculan indicadores relativos, como las VUT por cada 1.000 habitantes, junto con variaciones absolutas y porcentuales.
En el caso de las VUT se utiliza como métrica principal la variación absoluta entre 2021 y 2024. La variación porcentual puede resultar problemática en secciones que parten de cero o de valores muy bajos, por lo que se conserva solo como indicador auxiliar.
# Construcción de la tabla con los 7 indicadores derivados
# Pivot ancho con columnas para 2021, 2023 y 2024. 2023 se incluye porque
# es el último año con datos de renta.
# var_vut_pct e if_else evitan la división por cero cuando vut_2021 == 0.
# tam_medio_vut_2024 idem cuando vut_2024 == 0.
indicadores_tabla <- tabla |>
sf::st_drop_geometry() |>
dplyr::filter(anio %in% c(2021, 2023, 2024)) |>
dplyr::select(cod_seccion, cod_distrito, anio,
poblacion, vut, plazas, renta_persona) |>
tidyr::pivot_wider(names_from = anio,
values_from = c(poblacion, vut, plazas, renta_persona),
names_sep = "_") |>
dplyr::mutate(
var_pob_pct = 100 * (poblacion_2024 - poblacion_2021) / poblacion_2021,
var_vut_abs = vut_2024 - vut_2021,
var_vut_pct = dplyr::if_else(
!is.na(vut_2021) & vut_2021 > 0,
100 * (vut_2024 - vut_2021) / vut_2021,
NA_real_
),
vut_por_mil_2024 = 1000 * vut_2024 / poblacion_2024,
plazas_por_mil_2024 = 1000 * plazas_2024 / poblacion_2024,
var_renta_pct = 100 * (renta_persona_2023 - renta_persona_2021) /
renta_persona_2021,
tam_medio_vut_2024 = dplyr::if_else(
!is.na(vut_2024) & vut_2024 > 0,
plazas_2024 / vut_2024,
NA_real_
)
)
# Cobertura: número de secciones con dato válido por cada indicador
cat("Recuento de secciones por indicador (con dato válido):\n")
## Recuento de secciones por indicador (con dato válido):
indicadores_recuento <- indicadores_tabla |>
dplyr::summarise(
var_pob_pct = sum(!is.na(var_pob_pct)),
var_vut_abs = sum(!is.na(var_vut_abs)),
var_vut_pct = sum(!is.na(var_vut_pct)),
vut_por_mil_2024 = sum(!is.na(vut_por_mil_2024)),
plazas_por_mil_2024 = sum(!is.na(plazas_por_mil_2024)),
var_renta_pct = sum(!is.na(var_renta_pct)),
tam_medio_vut_2024 = sum(!is.na(tam_medio_vut_2024))
)
print(indicadores_recuento)
## # A tibble: 1 × 7
## var_pob_pct var_vut_abs var_vut_pct vut_por_mil_2024 plazas_por_mil_2024
## <int> <int> <int> <int> <int>
## 1 107 106 95 107 107
## # ℹ 2 more variables: var_renta_pct <int>, tam_medio_vut_2024 <int>
# Tabla descriptiva: n, media, mediana, sd, min, max para cada indicador.
# pivot_longer convierte el ancho en largo (una fila por indicador-valor),
# luego se agrupa por indicador y se calculan los estadísticos.
resumen_indicadores <- indicadores_tabla |>
dplyr::select(var_pob_pct, var_vut_abs, var_vut_pct,
vut_por_mil_2024, plazas_por_mil_2024,
var_renta_pct, tam_medio_vut_2024) |>
tidyr::pivot_longer(cols = dplyr::everything(),
names_to = "indicador", values_to = "valor") |>
dplyr::filter(!is.na(valor)) |>
dplyr::group_by(indicador) |>
dplyr::summarise(
n = dplyr::n(),
media = round(mean(valor), 2),
mediana = round(stats::median(valor), 2),
sd = round(stats::sd(valor), 2),
minimo = round(min(valor), 2),
maximo = round(max(valor), 2),
.groups = "drop"
)
cat("\nDescriptivos de los indicadores derivados\n")
##
## Descriptivos de los indicadores derivados
print(resumen_indicadores)
## # A tibble: 7 × 7
## indicador n media mediana sd minimo maximo
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 plazas_por_mil_2024 107 68.1 44.9 65.9 0 339.
## 2 tam_medio_vut_2024 103 4.37 4.29 0.8 1 6.33
## 3 var_pob_pct 107 -2.72 -3.06 2.91 -8.77 5.35
## 4 var_renta_pct 107 13.9 13.7 3.35 5.55 23.7
## 5 var_vut_abs 106 2.66 1 5.83 -13 21
## 6 var_vut_pct 95 31.6 20 65.0 -100 300
## 7 vut_por_mil_2024 107 16.0 9.28 16.3 0 85.2
# Histograma 1: variación % de población. Línea vertical en 0 como referencia.
g_var_pob <- ggplot2::ggplot(
indicadores_tabla |> dplyr::filter(!is.na(var_pob_pct)),
ggplot2::aes(x = var_pob_pct)
) +
ggplot2::geom_histogram(bins = 25, fill = "steelblue",
color = "white", alpha = 0.85) +
ggplot2::geom_vline(xintercept = 0, color = "grey40", linetype = "dashed") +
ggplot2::labs(
title = "Variación de población por sección (%) · 2021-2024",
x = "Variación (%)", y = "Número de secciones"
) +
ggplot2::theme_minimal(base_size = 11)
# Histograma 2: presión turística (VUT/1000 hab) en 2024
g_pres_tur <- ggplot2::ggplot(
indicadores_tabla |> dplyr::filter(!is.na(vut_por_mil_2024)),
ggplot2::aes(x = vut_por_mil_2024)
) +
ggplot2::geom_histogram(bins = 25, fill = "darkorange",
color = "white", alpha = 0.85) +
ggplot2::labs(
title = "Presión turística por sección · 2024",
subtitle = "VUT por 1.000 habitantes",
x = "VUT/1.000 hab", y = "Número de secciones"
) +
ggplot2::theme_minimal(base_size = 11)
# Histograma 3: tamaño medio de VUT (plazas/VUT) en 2024
g_tam_medio <- ggplot2::ggplot(
indicadores_tabla |> dplyr::filter(!is.na(tam_medio_vut_2024)),
ggplot2::aes(x = tam_medio_vut_2024)
) +
ggplot2::geom_histogram(bins = 25, fill = "darkgreen",
color = "white", alpha = 0.85) +
ggplot2::labs(
title = "Tamaño medio de VUT por sección · 2024",
subtitle = "Plazas por VUT",
x = "Plazas/VUT", y = "Número de secciones"
) +
ggplot2::theme_minimal(base_size = 11)
# Apilamos los tres histogramas
print(g_var_pob / g_pres_tur / g_tam_medio)
# Caso emblemático: extraemos la serie completa de la sección 1101210026
caso_emblematico <- tabla |>
sf::st_drop_geometry() |>
dplyr::filter(cod_seccion == "1101210026") |>
dplyr::select(anio, poblacion, vut, plazas, renta_persona) |>
dplyr::arrange(anio)
cat("\nSección 1101210026 · evolución 2021-2025\n")
##
## Sección 1101210026 · evolución 2021-2025
print(caso_emblematico)
## anio poblacion vut plazas renta_persona
## 1 2021 1069 NA NA 13003
## 2 2022 1048 NA NA 13857
## 3 2023 1030 0 0 15261
## 4 2024 1002 4 16 NA
## 5 2025 989 NA NA NA
# Variación de población 2021-2025 y de renta 2021-2023 para esta sección,
# para compararlas con la media municipal
pob_inicio <- caso_emblematico$poblacion[caso_emblematico$anio == 2021]
pob_fin <- caso_emblematico$poblacion[caso_emblematico$anio == 2025]
var_pob_caso <- 100 * (pob_fin - pob_inicio) / pob_inicio
renta_inicio <- caso_emblematico$renta_persona[caso_emblematico$anio == 2021]
renta_fin <- caso_emblematico$renta_persona[caso_emblematico$anio == 2023]
var_renta_caso <- 100 * (renta_fin - renta_inicio) / renta_inicio
cat(sprintf(
"\nVariación poblacional 2021-2025: %.1f%% (frente a -3,8%% del municipio)\n",
var_pob_caso
))
##
## Variación poblacional 2021-2025: -7.5% (frente a -3,8% del municipio)
cat(sprintf(
"Variación de renta 2021-2023: %.1f%% (frente a +13,8%% del municipio)\n",
var_renta_caso
))
## Variación de renta 2021-2023: 17.4% (frente a +13,8% del municipio)
cat("Aparición de VUT: registradas por primera vez en 2023\n")
## Aparición de VUT: registradas por primera vez en 2023
Los indicadores calculados permiten comparar secciones censales con tamaños y situaciones de partida diferentes. Son siete a escala de sección censal:
La cobertura de los indicadores es prácticamente completa. Aquellos que dependen solo de datos de población o valores de 2024 están disponibles para las 107 secciones censales analizadas. La variación absoluta de VUT se calcula para 106 secciones, ya que la sección 1101210026 no dispone de datos de VUT en 2021. La variación porcentual de VUT, en cambio, solo puede calcularse en 95 secciones, las que ya contaban con al menos una VUT al inicio del periodo. El tamaño medio de las viviendas turísticas se obtiene para 103 secciones, aquellas con al menos una VUT registrada en 2024.
Los resultados obtenidos son coherentes con lo observado en el análisis univariante. La variación de población se concentra en torno al -3%, con una distribución relativamente simétrica, que encaja con la pérdida demográfica registrada a escala municipal. La presión turística, sin embargo, muestra una distribución asimétrica. La mediana se sitúa en 9,3 VUT por cada 1.000 habitantes, pero la media asciende a 16. Esta diferencia se explica por la presencia de secciones del centro histórico con valores mucho más elevados, que alcanzan hasta 85,2 VUT por cada 1.000 habitantes.
La variación porcentual de VUT también muestra una dispersión muy acusada, con valores que van desde el -100% hasta el +300% y una desviación típica de 65. Por este motivo, la variación absoluta se utiliza como métrica principal para analizar el crecimiento de las VUT. En muchas secciones el número inicial de viviendas turísticas era muy bajo, de modo que pequeñas variaciones absolutas generan porcentajes demasiado inestables.
El tamaño medio de las VUT en 2024 se concentra principalmente entre 3 y 6 plazas por vivienda, con una mediana de 4,3 plazas. Este resultado apunta a una oferta formada mayoritariamente por viviendas turísticas pequeñas y medianas, más próxima al alquiler turístico de plataforma que a establecimientos de gran capacidad.
En cuanto a la renta, se observa una evolución bastante homogénea. Entre 2021 y 2023, la variación de la mediana es del 13,7%, mientras que la media alcanza el 13,9%. Estos valores son prácticamente los mismos que el crecimiento municipal ponderado. Ninguna sección muestra una caída de renta nominal, aunque este resultado debe interpretarse con cautela por el contexto de inflación elevada del periodo.
Dentro de este bloque destaca la sección 1101210026, situada en el distrito 10 de extramuros. Esta sección no tenía datos publicados de VUT en 2021 ni en 2022, probablemente por no superar el umbral de difusión del INE. En 2023 aparece con 0 VUT y en 2024 pasa a contabilizar 4 viviendas turísticas y 16 plazas. Al mismo tiempo, su población desciende un 7,5% entre 2021 y 2025, una pérdida superior a la media municipal del 3,8%, y su renta aumenta un 17,4% entre 2021 y 2023, por encima del conjunto del municipio.
Por estas características, la sección 1101210026 se considera un caso de interés. No permite extraer conclusiones generales para toda la ciudad, pero sí muestra a pequeña escala una combinación de rasgos compatibles con procesos iniciales de gentrificación turística: aparición reciente de actividad turística, pérdida de población por encima de la media y crecimiento relativo de la renta. En los análisis posteriores se tendrá en cuenta como ejemplo puntual, sin convertirlo en una prueba general del fenómeno.
Una vez construidos los indicadores, se analiza si las secciones donde más crecen las VUT son también las que más población pierden.
# Se usa indicadores_tabla (construida en el bloque anterior) filtrando
# la sección sin dato de VUT en 2021 para mantener la misma muestra.
indicadores <- indicadores_tabla |>
dplyr::filter(!is.na(var_vut_abs), !is.na(var_pob_pct))
cat("Secciones analizadas:", nrow(indicadores), "\n")
## Secciones analizadas: 106
# Función auxiliar para no repetir código en los dos scatters.
# Recibe el dataframe, el nombre de la variable X, el título y la etiqueta del eje X.
# Eje Y siempre var_pob_pct. Línea horizontal en 0 como referencia.
scatter_bivariado <- function(datos, x_var, titulo, eje_x) {
ggplot2::ggplot(datos, ggplot2::aes(x = .data[[x_var]], y = var_pob_pct)) +
ggplot2::geom_hline(yintercept = 0, color = "grey70", linetype = "dashed") +
ggplot2::geom_point(alpha = 0.7, color = "steelblue", size = 2) +
ggplot2::geom_smooth(method = "lm", se = FALSE,
color = "firebrick", linewidth = 0.7) +
ggplot2::labs(
title = titulo,
x = eje_x,
y = "Variación de población (%) 2021-2024"
) +
ggplot2::theme_minimal(base_size = 11)
}
# Dos scatters: variación absoluta de VUT y presión turística, ambos contra
# variación % de población
g1 <- scatter_bivariado(
indicadores, "var_vut_abs",
"Variación de VUT y variación de población por sección",
"Variación absoluta de VUT (2024 - 2021)"
)
g2 <- scatter_bivariado(
indicadores, "vut_por_mil_2024",
"Presión turística y variación de población por sección",
"VUT por 1.000 habitantes (2024)"
)
# Apilados verticalmente con patchwork
print(g1 / g2)
# Pearson y Spearman para los dos cruces, redondeados a 3 decimales
correlaciones <- data.frame(
Cruce = c("Variación VUT vs variación población",
"Presión turística vs variación población"),
Pearson = c(cor(indicadores$var_vut_abs, indicadores$var_pob_pct, method = "pearson"),
cor(indicadores$vut_por_mil_2024, indicadores$var_pob_pct, method = "pearson")),
Spearman = c(cor(indicadores$var_vut_abs, indicadores$var_pob_pct, method = "spearman"),
cor(indicadores$vut_por_mil_2024, indicadores$var_pob_pct, method = "spearman"))
) |>
dplyr::mutate(dplyr::across(c(Pearson, Spearman), \(x) round(x, 3)))
cat("\nCoeficientes de correlación\n")
##
## Coeficientes de correlación
print(correlaciones)
## Cruce Pearson Spearman
## 1 Variación VUT vs variación población 0.057 0.014
## 2 Presión turística vs variación población 0.092 0.111
En este bloque se analiza si existe relación entre la evolución de las viviendas de uso turístico y la pérdida de población residente a escala de sección censal. Para ello se utilizan dos medidas de la variable turística: la variación absoluta de VUT entre 2021 y 2024 y la presión turística en 2024, medida como VUT por cada 1.000 habitantes.
La variación de VUT se mide en términos absolutos porque algunas secciones partían de cero o de valores muy bajos en 2021, lo que hace que la variación porcentual sea poco estable. En cambio, la población sí se expresa en porcentaje, ya que todas las secciones tienen dato inicial y esta medida permite comparar mejor unidades de distinto tamaño. La sección 1101210026 se excluye del cruce porque no dispone de dato de VUT en 2021, por lo que el análisis se realiza sobre 106 secciones censales.
Los resultados no muestran una relación clara entre las variables. En el cruce entre variación de VUT y variación de población, los coeficientes son muy bajos: Pearson = 0,057 y Spearman = 0,014. En el cruce entre presión turística y variación de población ocurre algo parecido, con Pearson = 0,092 y Spearman = 0,111.
Los gráficos confirman esta idea. Los puntos aparecen bastante dispersos y no forman una tendencia definida. La mayoría de secciones se sitúa alrededor de una pérdida de población cercana al -3%, independientemente de que tengan mayor o menor presencia de VUT. Esto indica que las secciones donde más crece la oferta turística, o donde mayor es la presión turística en 2024, no son necesariamente las que más población pierden.
Este resultado matiza la hipótesis inicial del trabajo. A escala de sección censal, y para el periodo 2021-2024, no se observa una asociación estadística relevante entre crecimiento turístico y pérdida de población. Además, el hecho de que las dos medidas turísticas apunten en la misma dirección refuerza la interpretación: la debilidad de la relación no parece depender del indicador elegido.
Una posible explicación es que la pérdida de población en Cádiz tenga un carácter bastante generalizado. Si muchas secciones pierden habitantes a ritmos parecidos, la correlación con la presión turística tiende a ser débil. También puede ocurrir que algunas zonas con alta presencia turística, especialmente en el centro histórico, ya hubieran perdido población antes de 2021, de modo que durante el periodo analizado tengan menos margen de descenso adicional. Por otra parte, el periodo disponible puede ser corto para captar procesos residenciales que suelen desarrollarse a más largo plazo.
En conjunto, este análisis no permite confirmar que el aumento reciente de las VUT explique directamente la pérdida de población por sección censal. El siguiente paso es analizar los datos a escala de distrito, donde la agregación puede reducir parte del ruido de las secciones pequeñas y mostrar patrones territoriales más generales.
Además del análisis por sección censal, el análisis se repite a escala de distrito. Esta escala permite observar patrones territoriales más generales y evitar que secciones pequeñas distorsionen la lectura general. Contando con diez distritos, los coeficientes tienen valor exploratorio, no confirmatorio.
# Agregación a distrito: suma de población y VUT por las secciones de cada
# distrito, para 2021 y 2024. Luego pivot ancho y cálculo de los tres
# indicadores. Para presión turística usamos los totales del distrito, no
# el promedio de las presiones de sus secciones (evita ponderar mal).
distritos <- tabla |>
sf::st_drop_geometry() |>
dplyr::filter(anio %in% c(2021, 2024)) |>
dplyr::group_by(cod_distrito, anio) |>
dplyr::summarise(
poblacion = sum(poblacion, na.rm = TRUE),
vut = sum(vut, na.rm = TRUE),
.groups = "drop"
) |>
tidyr::pivot_wider(names_from = anio,
values_from = c(poblacion, vut),
names_sep = "_") |>
dplyr::mutate(
var_pob_pct = 100 * (poblacion_2024 - poblacion_2021) / poblacion_2021,
var_vut_abs = vut_2024 - vut_2021,
vut_por_mil_2024 = 1000 * vut_2024 / poblacion_2024
)
cat("Tabla resumen por distrito\n")
## Tabla resumen por distrito
print(distritos |>
dplyr::mutate(dplyr::across(where(is.numeric), \(x) round(x, 1))))
## # A tibble: 10 × 8
## cod_distrito poblacion_2021 poblacion_2024 vut_2021 vut_2024 var_pob_pct
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1101201 5880 5693 217 233 -3.2
## 2 1101202 5608 5482 227 235 -2.2
## 3 1101203 6519 6299 129 156 -3.4
## 4 1101204 4054 3973 83 95 -2
## 5 1101205 4529 4535 110 150 0.1
## 6 1101206 4164 4064 138 164 -2.4
## 7 1101207 3581 3494 93 121 -2.4
## 8 1101208 27068 26208 99 129 -3.2
## 9 1101209 24515 23665 112 156 -3.5
## 10 1101210 28524 27767 212 267 -2.7
## # ℹ 2 more variables: var_vut_abs <dbl>, vut_por_mil_2024 <dbl>
# Barras horizontales: variación % de población por distrito.
# reorder() ordena los distritos por la variable; coord_flip() voltea
# a horizontal. Etiquetas a la izquierda o derecha de la barra según signo.
g_pob <- ggplot2::ggplot(
distritos,
ggplot2::aes(x = stats::reorder(cod_distrito, var_pob_pct),
y = var_pob_pct)
) +
ggplot2::geom_col(fill = "steelblue", alpha = 0.85) +
ggplot2::geom_text(ggplot2::aes(label = sprintf("%.1f%%", var_pob_pct)),
hjust = ifelse(distritos$var_pob_pct < 0, 1.1, -0.1),
size = 3.3) +
ggplot2::coord_flip() +
ggplot2::labs(
title = "Variación de población por distrito",
subtitle = "Cádiz municipio · 2021-2024",
x = "Distrito",
y = "Variación de población (%)"
) +
ggplot2::theme_minimal(base_size = 11)
# Mismo esquema para presión turística
g_pres <- ggplot2::ggplot(
distritos,
ggplot2::aes(x = stats::reorder(cod_distrito, vut_por_mil_2024),
y = vut_por_mil_2024)
) +
ggplot2::geom_col(fill = "darkorange", alpha = 0.85) +
ggplot2::geom_text(ggplot2::aes(label = sprintf("%.1f", vut_por_mil_2024)),
hjust = -0.15, size = 3.3) +
ggplot2::coord_flip() +
ggplot2::labs(
title = "Presión turística por distrito",
subtitle = "VUT por 1.000 habitantes · 2024",
x = "Distrito",
y = "VUT por 1.000 habitantes"
) +
ggplot2::theme_minimal(base_size = 11)
print(g_pob / g_pres)
# Scatter del cruce a nivel distrito (n=10). Cada punto etiquetado con el
# código del distrito. Misma estructura que el bivariado a nivel sección.
g_biv_distrito <- ggplot2::ggplot(
distritos,
ggplot2::aes(x = vut_por_mil_2024, y = var_pob_pct)
) +
ggplot2::geom_hline(yintercept = 0, color = "grey70", linetype = "dashed") +
ggplot2::geom_point(color = "steelblue", size = 3.5, alpha = 0.85) +
ggplot2::geom_text(ggplot2::aes(label = cod_distrito),
vjust = -1.2, size = 3.2, color = "grey25") +
ggplot2::geom_smooth(method = "lm", se = FALSE,
color = "firebrick", linewidth = 0.7) +
ggplot2::labs(
title = "Presión turística y variación de población por distrito",
subtitle = "Cádiz municipio · n = 10 distritos · 2021-2024",
x = "VUT por 1.000 habitantes (2024)",
y = "Variación de población (%) 2021-2024",
caption = "Línea de tendencia: ajuste lineal por mínimos cuadrados"
) +
ggplot2::theme_minimal(base_size = 11) +
ggplot2::theme(plot.caption = ggplot2::element_text(size = 9, color = "grey40"))
print(g_biv_distrito)
# Pearson y Spearman con n=10. Etiquetados como exploratorios porque
# el tamaño muestral no permite contraste estadístico formal.
correlaciones_distrito <- data.frame(
Cruce = c("Variación VUT vs variación población",
"Presión turística vs variación población"),
Pearson = c(cor(distritos$var_vut_abs, distritos$var_pob_pct, method = "pearson"),
cor(distritos$vut_por_mil_2024, distritos$var_pob_pct, method = "pearson")),
Spearman = c(cor(distritos$var_vut_abs, distritos$var_pob_pct, method = "spearman"),
cor(distritos$vut_por_mil_2024, distritos$var_pob_pct, method = "spearman"))
) |>
dplyr::mutate(dplyr::across(c(Pearson, Spearman), \(x) round(x, 3)))
cat("\nCoeficientes de correlación a nivel distrito (n = 10, exploratorios)\n")
##
## Coeficientes de correlación a nivel distrito (n = 10, exploratorios)
print(correlaciones_distrito)
## Cruce Pearson Spearman
## 1 Variación VUT vs variación población 0.045 -0.321
## 2 Presión turística vs variación población 0.364 0.358
Los datos se agregan por distrito para comprobar si a una escala territorial más amplia aparece algún patrón que no era visible a nivel de sección censal. Dado que Cádiz cuenta solo con diez distritos, los coeficientes obtenidos deben interpretarse con carácter exploratorio, no confirmatorio.
Los distritos del centro histórico (1101201 a 1101207) tienen entre 3.500 y 6.500 habitantes, mientras que los tres distritos de extramuros (1101208, 1101209 y 1101210) concentran entre 23.000 y 28.000 habitantes cada uno. Es relevante considerar esta diferencia de tamaño, ya que no todas las unidades territoriales tienen el mismo peso en la lectura de los resultados.
El primer gráfico muestra una pérdida de población bastante homogénea: nueve de los diez distritos registran descensos de entre el -2,0% y el -3,5%. Solo el distrito 1101205 se mantiene estable, con un +0,1%. La presión turística, en cambio, presenta una distribución mucho más desigual, desde 4,9 VUT por cada 1.000 habitantes en el distrito 1101208 hasta 42,9 en el 1101202.
El cruce entre ambas variables no muestra el patrón esperado. Los distritos con mayor presión turística no son los que más población pierden. De hecho, los coeficientes de correlación entre presión turística y variación de población son positivos (Pearson = 0,364; Spearman = 0,358), mientras que la relación entre variación absoluta de VUT y variación de población es prácticamente nula e inestable (Pearson = 0,045; Spearman = -0,321).
Es posible que los distritos más turistificados ya vinieran perdiendo población antes de 2021 y tengan menos margen de descenso adicional en el periodo analizado. En los grandes distritos residenciales de extramuros, donde las VUT son escasas, la pérdida de población parece estar más relacionada con el envejecimiento y la salida de población joven que con la presión turística.
Para completar el análisis se calculan matrices de correlación entre los principales indicadores derivados. El objetivo es observar qué variables tienden a moverse juntas y cuáles presentan relaciones débiles o independientes. Estas correlaciones son un recurso exploratorio, no una prueba de causalidad.
# Selección de los siete indicadores derivados (sin identificadores).
matriz_datos <- indicadores_tabla |>
dplyr::select(var_pob_pct, var_vut_abs, var_vut_pct,
vut_por_mil_2024, plazas_por_mil_2024,
var_renta_pct, tam_medio_vut_2024)
# Etiquetas legibles para la matriz.
nombres_legibles <- c(
var_pob_pct = "Var. población (%)",
var_vut_abs = "Var. VUT (abs)",
var_vut_pct = "Var. VUT (%)",
vut_por_mil_2024 = "VUT/1000 hab",
plazas_por_mil_2024 = "Plazas/1000 hab",
var_renta_pct = "Var. renta (%)",
tam_medio_vut_2024 = "Tam. medio VUT"
)
colnames(matriz_datos) <- nombres_legibles[colnames(matriz_datos)]
# Matrices de correlación con pairwise.complete.obs.
cor_pearson <- stats::cor(matriz_datos, method = "pearson", use = "pairwise.complete.obs")
cor_spearman <- stats::cor(matriz_datos, method = "spearman", use = "pairwise.complete.obs")
# n efectivo de cada par (cuántas secciones tienen dato en ambas variables).
n_efectivo <- crossprod(!is.na(as.matrix(matriz_datos)))
cat("n efectivo por par de variables\n")
## n efectivo por par de variables
print(n_efectivo)
## Var. población (%) Var. VUT (abs) Var. VUT (%) VUT/1000 hab
## Var. población (%) 107 106 95 107
## Var. VUT (abs) 106 106 95 106
## Var. VUT (%) 95 95 95 95
## VUT/1000 hab 107 106 95 107
## Plazas/1000 hab 107 106 95 107
## Var. renta (%) 107 106 95 107
## Tam. medio VUT 103 102 94 103
## Plazas/1000 hab Var. renta (%) Tam. medio VUT
## Var. población (%) 107 107 103
## Var. VUT (abs) 106 106 102
## Var. VUT (%) 95 95 94
## VUT/1000 hab 107 107 103
## Plazas/1000 hab 107 107 103
## Var. renta (%) 107 107 103
## Tam. medio VUT 103 103 103
cat("\nMatriz de Pearson\n")
##
## Matriz de Pearson
print(round(cor_pearson, 3))
## Var. población (%) Var. VUT (abs) Var. VUT (%) VUT/1000 hab
## Var. población (%) 1.000 0.057 0.218 0.099
## Var. VUT (abs) 0.057 1.000 0.625 0.331
## Var. VUT (%) 0.218 0.625 1.000 -0.012
## VUT/1000 hab 0.099 0.331 -0.012 1.000
## Plazas/1000 hab 0.095 0.339 -0.004 0.992
## Var. renta (%) -0.078 0.171 -0.017 0.291
## Tam. medio VUT 0.015 -0.035 0.153 -0.167
## Plazas/1000 hab Var. renta (%) Tam. medio VUT
## Var. población (%) 0.095 -0.078 0.015
## Var. VUT (abs) 0.339 0.171 -0.035
## Var. VUT (%) -0.004 -0.017 0.153
## VUT/1000 hab 0.992 0.291 -0.167
## Plazas/1000 hab 1.000 0.293 -0.094
## Var. renta (%) 0.293 1.000 -0.012
## Tam. medio VUT -0.094 -0.012 1.000
cat("\nMatriz de Spearman\n")
##
## Matriz de Spearman
print(round(cor_spearman, 3))
## Var. población (%) Var. VUT (abs) Var. VUT (%) VUT/1000 hab
## Var. población (%) 1.000 0.014 0.102 0.120
## Var. VUT (abs) 0.014 1.000 0.811 0.381
## Var. VUT (%) 0.102 0.811 1.000 0.157
## VUT/1000 hab 0.120 0.381 0.157 1.000
## Plazas/1000 hab 0.127 0.382 0.158 0.992
## Var. renta (%) -0.008 0.049 0.003 0.201
## Tam. medio VUT 0.003 -0.010 0.116 -0.158
## Plazas/1000 hab Var. renta (%) Tam. medio VUT
## Var. población (%) 0.127 -0.008 0.003
## Var. VUT (abs) 0.382 0.049 -0.010
## Var. VUT (%) 0.158 0.003 0.116
## VUT/1000 hab 0.992 0.201 -0.158
## Plazas/1000 hab 1.000 0.202 -0.053
## Var. renta (%) 0.202 1.000 -0.079
## Tam. medio VUT -0.053 -0.079 1.000
# Visualización Pearson.
corrplot::corrplot(
cor_pearson,
method = "color",
type = "upper",
order = "hclust",
addCoef.col = "black",
number.cex = 0.75,
tl.col = "grey20",
tl.srt = 45,
tl.cex = 0.85,
diag = FALSE,
col = colorRampPalette(c("firebrick", "white", "steelblue"))(200),
mar = c(0, 0, 2, 0),
title = "Correlaciones de Pearson entre indicadores derivados"
)
# Visualización Spearman.
corrplot::corrplot(
cor_spearman,
method = "color",
type = "upper",
order = "hclust",
addCoef.col = "black",
number.cex = 0.75,
tl.col = "grey20",
tl.srt = 45,
tl.cex = 0.85,
diag = FALSE,
col = colorRampPalette(c("firebrick", "white", "steelblue"))(200),
mar = c(0, 0, 2, 0),
title = "Correlaciones de Spearman entre indicadores derivados"
)
Se emplean dos matrices de correlación: Pearson, para relaciones lineales, y Spearman, para relaciones por rangos. Dado que no todos los indicadores tienen la misma cobertura, el número de secciones varía entre 94 y 107 según el par de variables comparado.
La relación entre los indicadores turísticos y la variación de población es muy baja: 0,06 en Pearson y 0,01 en Spearman para el cruce con la variación absoluta de VUT. Los resultados son similares cuando se utiliza la presión turística medida mediante VUT o plazas por habitante. En conjunto, la pérdida de población no sigue el mismo patrón territorial que la presión turística.
Dentro de los propios indicadores turísticos sí aparecen relaciones más claras. La variación absoluta de VUT correlaciona de forma moderada con la presión turística en 2024 (Pearson = 0,33; Spearman = 0,38), lo que apunta a que el crecimiento de la oferta se concentra en zonas donde ya había actividad turística, más que en áreas completamente nuevas.
La relación entre presión turística y variación de renta es más débil (Pearson = 0,29; Spearman = 0,20), aunque apunta en la misma dirección: las zonas con más VUT tienden a coincidir con aquellas donde la renta nominal ha crecido más en el periodo disponible.
Dos correlaciones adicionales sirven como comprobación de coherencia. Las VUT por 1.000 habitantes y las plazas por 1.000 habitantes presentan una correlación de aproximadamente 0,99, algo esperable porque ambas variables miden la misma dimensión de presión turística con unidades distintas.
Por último, la variación absoluta y la variación porcentual de VUT presentan una relación alta, especialmente en Spearman (Pearson = 0,62; Spearman = 0,81). Esto indica que ambos indicadores están relacionados, aunque miden aspectos distintos del mismo fenómeno. La variación porcentual es más sensible a secciones que partían de valores bajos.
En este bloque se representan los principales indicadores sobre el seccionado censal de Cádiz. La lectura cartográfica permite comprobar si los patrones observados en los análisis anteriores se concentran en zonas concretas o si aparecen repartidos por el conjunto del municipio.
El mapa muestra las 107 secciones censales del municipio de Cádiz utilizadas en el análisis. Se aprecia la diferencia entre el casco antiguo, con secciones más pequeñas y compactas, y las del resto del municipio, donde las unidades territoriales ocupan superficies más amplias. Esta cartografía sirve como base para los mapas posteriores.
Antes de interpretar los mapas temáticos, se localizan algunas secciones que aparecen de forma recurrente en el análisis. En naranja se muestran las cuatro secciones detectadas como valores atípicos de presión turística, todas situadas en el casco antiguo. En morado aparece la sección 1101210026, ubicada en extramuros, que se analiza como caso de interés por la aparición reciente de VUT.
Este mapa funciona como referencia visual para identificar estas secciones sin sobrecargar de etiquetas los mapas siguientes.
## Secciones con NA en presión turística: 0
El mapa muestra una distribución muy desigual de la presión turística. Los valores más altos se concentran en la zona norte del municipio, especialmente en el casco antiguo y su entorno próximo. En varias secciones se superan las 30 VUT por cada 1.000 habitantes, y el valor máximo alcanza 85,2.
Hacia el sur, la presión turística desciende con claridad. Buena parte de las secciones residenciales de extramuros presentan valores inferiores a 15 VUT por cada 1.000 habitantes, y en muchas zonas se sitúan por debajo de 5. La diferencia entre el casco antiguo y el resto de la ciudad es, por tanto, muy marcada.
También aparecen algunos valores intermedios fuera del centro histórico, sobre todo en zonas próximas al litoral o relativamente cercanas al centro. Esto sugiere cierta presencia turística fuera del casco antiguo, aunque todavía lejos de los niveles observados en las secciones más turistificadas.
En conjunto, el mapa muestra que la presión turística no se distribuye de forma homogénea: se concentra en una parte concreta de la ciudad, mientras que la mayor parte del municipio presenta valores más bajos.
## Secciones con NA en variación de población: 0
## Rango de variación: -8.77 % a 5.35 %
El mapa de variación de población muestra un patrón distinto al de la presión turística. La pérdida de residentes aparece repartida por buena parte del municipio y no se concentra únicamente en las secciones con más VUT.
La categoría más habitual es la de pérdida moderada, entre el 0% y el -3%, en línea con la evolución general de Cádiz durante el periodo. También aparecen secciones con descensos más intensos, superiores al -6%, distribuidas tanto en el casco antiguo como en zonas intermedias y de extramuros.
Esta lectura ayuda a entender por qué las correlaciones entre presión turística y pérdida de población eran bajas. Las VUT se concentran territorialmente, mientras que la caída demográfica tiene una distribución más extendida. Por tanto, ambos fenómenos coinciden en algunas zonas, pero no siguen exactamente el mismo patrón espacial.
## Mediana presión turística: 9.28 VUT/1000 hab
## Mediana variación poblacional: -3.06 %
## # A tibble: 4 × 3
## cuadrante n porcentaje
## <fct> <int> <dbl>
## 1 Alta presión + alta pérdida 24 22.4
## 2 Alta presión + baja pérdida 30 28
## 3 Baja presión + alta pérdida 30 28
## 4 Baja presión + baja pérdida 23 21.5
Este mapa cruza las dos variables principales del análisis: presión
turística y pérdida de población. Para ello, las secciones se clasifican
en cuatro grupos a partir de la mediana de cada indicador: 9,3 VUT por
cada 1.000 habitantes para la presión turística y -2,7% para la
variación de población.
El resultado muestra una coincidencia parcial, pero no una relación uniforme. Hay 24 secciones con alta presión turística y alta pérdida de población, situadas sobre todo en el casco antiguo. Sin embargo, también aparecen 30 secciones con alta presión turística y una pérdida de población menor. Esto indica que el centro histórico no funciona como un bloque homogéneo.
En extramuros se observa el patrón contrario: varias secciones presentan baja presión turística y alta pérdida de población. Estas zonas pierden habitantes sin tener una presencia elevada de VUT, lo que apunta a la influencia de otros factores demográficos y urbanos.
El mapa matiza la hipótesis inicial. La presión turística y la pérdida de población existen en Cádiz, pero no siempre aparecen en las mismas secciones. Solo en una parte del municipio ambos procesos se solapan de forma clara; en otras zonas siguen dinámicas diferentes.
## Secciones con NA en variación de VUT: 1
## Rango de variación absoluta: -13 a 21 VUT
Este mapa muestra dónde aumentan o disminuyen las VUT entre 2021 y 2024. A diferencia del mapa de presión turística, que representa la situación en 2024, este permite observar la evolución durante el periodo.
Los mayores incrementos, superiores a 10 VUT, se concentran principalmente en el casco antiguo y en la zona norte del municipio. Se trata de áreas que ya presentaban una presión turística elevada, por lo que el crecimiento reciente apunta más a una intensificación de la oferta que a la aparición del fenómeno en zonas completamente nuevas.
Un ejemplo claro es la sección 1101201004, que pasa de 59 a 77 VUT entre 2021 y 2024. Este caso ilustra que algunas secciones con una oferta turística ya consolidada siguen acumulando nuevas viviendas turísticas.
Fuera del casco antiguo también aparecen aumentos, aunque más moderados, especialmente en zonas litorales o residenciales. Al mismo tiempo, algunas secciones del centro muestran variaciones nulas o incluso negativas, lo que recuerda que el crecimiento no es uniforme ni siquiera dentro de las zonas más turistificadas.
La sección 1101210026 aparece en gris porque no dispone de dato de VUT en 2021 y, por tanto, no puede calcularse su variación. En años posteriores empieza a registrar actividad turística, por lo que se mantiene como caso de interés.
En conjunto, el mapa refuerza la idea de que el crecimiento de las VUT combina dos dinámicas: intensificación en zonas donde la oferta ya estaba presente, especialmente en el casco antiguo, y aumentos más moderados en otras áreas de la ciudad.
Los resultados anteriores muestran que la pérdida de población no sigue exactamente el mismo patrón territorial que la presión turística. Por este motivo, se incorpora una lectura complementaria de la estructura por edad, centrada en dos grupos: población joven, de 20 a 39 años, y población mayor, de 65 años o más.
El objetivo no es sustituir la explicación turística, sino comprobar si el envejecimiento y la pérdida de población joven ayudan a contextualizar mejor la evolución demográfica observada en Cádiz.
La información por edad procede también del Censo Anual de Población del INE. A diferencia de la población total, los datos se organizan en grupos quinquenales de edad, lo que permite construir indicadores de estructura demográfica por sección censal y año.
## Filas: 11235
## Secciones: 107
## Años: 2021, 2022, 2023, 2024, 2025
## Grupos de edad: 21
La carga de población por edad confirma que se dispone de la misma estructura territorial que en el resto del panel: sección censal y año. Esto permite incorporar la edad como lectura complementaria para contextualizar la pérdida de población observada en los bloques anteriores.
A partir de la tabla por edades se calculan dos indicadores: el porcentaje de población joven y el porcentaje de población mayor. La población joven se define como la comprendida entre 20 y 39 años, mientras que la población mayor corresponde a las personas de 65 años o más.
grupos_jovenes <- c("De 20 a 24 años", "De 25 a 29 años",
"De 30 a 34 años", "De 35 a 39 años")
grupos_mayores <- levels(df_pob_edad$grupo_edad)[
stringr::str_detect(levels(df_pob_edad$grupo_edad),
"^De (6[5-9]|[7-9]\\d|100)")
]
cat("Grupos clasificados como mayores (65+):\n")
## Grupos clasificados como mayores (65+):
print(grupos_mayores)
## [1] "De 65 a 69 años" "De 70 a 74 años" "De 75 a 79 años" "De 80 a 84 años"
## [5] "De 85 a 89 años" "De 90 a 94 años" "De 95 a 99 años"
df_edad_resumen <- df_pob_edad |>
dplyr::mutate(
categoria = dplyr::case_when(
grupo_edad %in% grupos_jovenes ~ "jovenes",
grupo_edad %in% grupos_mayores ~ "mayores",
TRUE ~ "otros"
)
) |>
dplyr::group_by(cod_seccion, cod_distrito, anio, categoria) |>
dplyr::summarise(poblacion = sum(poblacion, na.rm = TRUE),
.groups = "drop") |>
tidyr::pivot_wider(names_from = categoria,
values_from = poblacion,
values_fill = 0) |>
dplyr::mutate(
poblacion_total = jovenes + mayores + otros,
pct_jovenes = 100 * jovenes / poblacion_total,
pct_mayores = 100 * mayores / poblacion_total
)
cat("\nDistribución de pct_mayores (todas las secciones y años):\n")
##
## Distribución de pct_mayores (todas las secciones y años):
print(summary(df_edad_resumen$pct_mayores))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 12.93 21.72 25.04 25.86 29.74 39.82
cat("\nDistribución de pct_jovenes (todas las secciones y años):\n")
##
## Distribución de pct_jovenes (todas las secciones y años):
print(summary(df_edad_resumen$pct_jovenes))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13.06 18.50 20.00 20.09 21.86 26.13
head(df_edad_resumen)
Los indicadores muestran una ciudad con una estructura demográfica envejecida. El peso medio de la población mayor se sitúa en torno al 26% durante el periodo analizado, mientras que la población joven ronda el 20%.
Esta diferencia ayuda a interpretar la pérdida de población desde una perspectiva más amplia. Una menor presencia de población joven reduce el relevo generacional y puede hacer más difícil compensar la pérdida de residentes, incluso en zonas con baja presión turística.
## Tabla por distrito: variación poblacional, presión turística, % jóvenes y % mayores en 2024
## # A tibble: 10 × 5
## cod_distrito var_pob_pct vut_por_mil_2024 pct_jovenes pct_mayores
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 1101202 -2.2 42.9 22.2 22.6
## 2 1101201 -3.2 40.9 21.6 23
## 3 1101206 -2.4 40.4 22.4 20.1
## 4 1101207 -2.4 34.6 22 21
## 5 1101205 0.1 33.1 22.9 22.1
## 6 1101203 -3.4 24.8 20.7 26.8
## 7 1101204 -2 23.9 20.1 24.8
## 8 1101210 -2.7 9.6 19.1 27.8
## 9 1101209 -3.5 6.6 18.7 29
## 10 1101208 -3.2 4.9 18.9 26.4
Los porcentajes se calculan sobre los totales de cada distrito, no como promedio de sus secciones, para evitar que las unidades más pequeñas distorsionen el resultado.
La lectura por distrito muestra diferencias territoriales relevantes. Los distritos de extramuros, especialmente los de mayor tamaño residencial, presentan porcentajes de población mayor relativamente altos y menor peso de población joven. En cambio, varios distritos del casco antiguo combinan mayor presión turística con una estructura por edad algo menos envejecida.
Esta comparación refuerza la idea de que la pérdida de población no puede atribuirse únicamente a la presencia de VUT. En algunas zonas residenciales con baja presión turística, el envejecimiento aparece como un factor relevante para entender la evolución demográfica.
# Misma muestra de 106 secciones que el bloque bivariado original:
# se excluye la sección sin dato de VUT en 2021 para que las
# correlaciones sean comparables con las del análisis turístico.
indicadores_seccion_edad <- tabla |>
sf::st_drop_geometry() |>
dplyr::filter(anio %in% c(2021, 2024)) |>
dplyr::select(cod_seccion, anio, poblacion, vut) |>
tidyr::pivot_wider(names_from = anio, values_from = c(poblacion, vut),
names_sep = "_") |>
dplyr::mutate(
var_pob_pct = 100 * (poblacion_2024 - poblacion_2021) / poblacion_2021,
vut_por_mil_2024 = 1000 * vut_2024 / poblacion_2024
) |>
dplyr::left_join(
df_edad_resumen |> dplyr::filter(anio == 2024) |>
dplyr::select(cod_seccion, pct_jovenes, pct_mayores),
by = "cod_seccion"
) |>
dplyr::filter(!is.na(var_pob_pct), !is.na(pct_mayores))
cat("Secciones analizadas:", nrow(indicadores_seccion_edad), "\n\n")
## Secciones analizadas: 107
correlaciones_seccion <- tibble::tibble(
Cruce = c(
"pct_mayores vs var_pob_pct",
"pct_jovenes vs var_pob_pct",
"vut_por_mil vs pct_mayores",
"vut_por_mil vs pct_jovenes"
),
Pearson = c(
cor(indicadores_seccion_edad$pct_mayores, indicadores_seccion_edad$var_pob_pct, method = "pearson"),
cor(indicadores_seccion_edad$pct_jovenes, indicadores_seccion_edad$var_pob_pct, method = "pearson"),
cor(indicadores_seccion_edad$vut_por_mil_2024, indicadores_seccion_edad$pct_mayores, method = "pearson"),
cor(indicadores_seccion_edad$vut_por_mil_2024, indicadores_seccion_edad$pct_jovenes, method = "pearson")
),
Spearman = c(
cor(indicadores_seccion_edad$pct_mayores, indicadores_seccion_edad$var_pob_pct, method = "spearman"),
cor(indicadores_seccion_edad$pct_jovenes, indicadores_seccion_edad$var_pob_pct, method = "spearman"),
cor(indicadores_seccion_edad$vut_por_mil_2024, indicadores_seccion_edad$pct_mayores, method = "spearman"),
cor(indicadores_seccion_edad$vut_por_mil_2024, indicadores_seccion_edad$pct_jovenes, method = "spearman")
)
) |>
dplyr::mutate(dplyr::across(c(Pearson, Spearman), \(x) round(x, 3)))
cat("Correlaciones a nivel sección censal (n =",
nrow(indicadores_seccion_edad), ")\n")
## Correlaciones a nivel sección censal (n = 107 )
print(correlaciones_seccion)
## # A tibble: 4 × 3
## Cruce Pearson Spearman
## <chr> <dbl> <dbl>
## 1 pct_mayores vs var_pob_pct -0.292 -0.257
## 2 pct_jovenes vs var_pob_pct 0.22 0.17
## 3 vut_por_mil vs pct_mayores -0.36 -0.316
## 4 vut_por_mil vs pct_jovenes 0.467 0.397
correlaciones_distrito <- tibble::tibble(
Cruce = c(
"pct_mayores vs var_pob_pct",
"pct_jovenes vs var_pob_pct",
"vut_por_mil vs pct_mayores",
"vut_por_mil vs pct_jovenes"
),
Pearson = c(
cor(tabla_distrito_edad$pct_mayores, tabla_distrito_edad$var_pob_pct, method = "pearson"),
cor(tabla_distrito_edad$pct_jovenes, tabla_distrito_edad$var_pob_pct, method = "pearson"),
cor(tabla_distrito_edad$vut_por_mil_2024, tabla_distrito_edad$pct_mayores, method = "pearson"),
cor(tabla_distrito_edad$vut_por_mil_2024, tabla_distrito_edad$pct_jovenes, method = "pearson")
),
Spearman = c(
cor(tabla_distrito_edad$pct_mayores, tabla_distrito_edad$var_pob_pct, method = "spearman"),
cor(tabla_distrito_edad$pct_jovenes, tabla_distrito_edad$var_pob_pct, method = "spearman"),
cor(tabla_distrito_edad$vut_por_mil_2024, tabla_distrito_edad$pct_mayores, method = "spearman"),
cor(tabla_distrito_edad$vut_por_mil_2024, tabla_distrito_edad$pct_jovenes, method = "spearman")
)
) |>
dplyr::mutate(dplyr::across(c(Pearson, Spearman), \(x) round(x, 3)))
cat("\nCorrelaciones a nivel distrito (n = 10, exploratorias)\n")
##
## Correlaciones a nivel distrito (n = 10, exploratorias)
print(correlaciones_distrito)
## # A tibble: 4 × 3
## Cruce Pearson Spearman
## <chr> <dbl> <dbl>
## 1 pct_mayores vs var_pob_pct -0.508 -0.648
## 2 pct_jovenes vs var_pob_pct 0.59 0.661
## 3 vut_por_mil vs pct_mayores -0.872 -0.721
## 4 vut_por_mil vs pct_jovenes 0.933 0.806
Se añaden cruces con la estructura por edad para comprobar si las secciones más envejecidas, o con menor presencia de población joven, presentan también una evolución demográfica más negativa. El objetivo no es identificar una causa única, sino apoyar la interpretación de los resultados anteriores.
Los resultados a nivel de distrito deben tomarse con prudencia, ya que solo hay diez observaciones. Aun así, apuntan en la misma dirección: la pérdida de población en Cádiz no puede explicarse únicamente por las VUT. La dinámica demográfica propia, relacionada con el envejecimiento y la falta de relevo generacional, también ayuda a entender el patrón observado.
## Secciones con NA en pct_mayores: 0
## Rango pct_mayores 2024: 15.4 % a 39.8 %
El mapa muestra que el envejecimiento no se distribuye de manera uniforme por Cádiz. Hay secciones donde la población de 65 años o más tiene un peso especialmente alto, mientras que otras mantienen valores más moderados.
Esta distribución ayuda a entender por qué la pérdida de población no coincide siempre con las zonas de mayor presión turística. La presión turística se concentra sobre todo en el casco antiguo, mientras que el envejecimiento aparece también en otras zonas del municipio.
Esta lectura refuerza la idea de que la caída de población responde a una combinación de factores.
## Mediana presión turística: 9.28 VUT/1000 hab
## Mediana envejecimiento: 25.28 %
## cuadrante n porcentaje
## 1 Alta presión + alto envejecimiento 20 18.7
## 2 Alta presión + bajo envejecimiento 34 31.8
## 3 Baja presión + alto envejecimiento 34 31.8
## 4 Baja presión + bajo envejecimiento 19 17.8
El mapa cruza presión turística y envejecimiento para identificar secciones donde ambos factores coinciden con valores altos. Estas zonas, representadas en morado, se concentran principalmente en el casco antiguo.
Sin embargo, también aparecen secciones envejecidas con baja presión turística, sobre todo en extramuros. Esto indica que el envejecimiento no puede interpretarse únicamente como consecuencia de la turistificación, sino como un fenómeno con distribución propia que afecta a zonas con perfiles turísticos distintos.
A partir de los grupos quinquenales se construyen dos indicadores, población joven y población mayor, para explorar si la evolución demográfica de Cádiz tiene relación con el envejecimiento y la falta de relevo generacional.
Las series siguientes recogen los valores anuales agregados que sirven de base para los dos gráficos de este apartado.
El gráfico muestra de forma visual la evolución simultánea de la población residente y las VUT: mientras la población desciende de forma continua, la oferta de VUT crece en el periodo analizado. Que ambos fenómenos coincidan en el tiempo no implica que uno explique el otro, como ha quedado de manifiesto en los análisis anteriores.
El gráfico ayuda a interpretar la pérdida de población en Cádiz dentro
de un contexto de envejecimiento progresivo. El peso de la población
mayor de 65 años aumenta del 24,4% en 2021 al 27,0% en 2025, mientras
que la población joven de 20 a 39 años baja del 20,9% al 19,5%.
Esta evolución apunta a una pérdida de relevo generacional. La ciudad tiene cada vez más peso de población mayor y menos presencia de población joven adulta, una franja asociada a la emancipación, la formación de hogares y la permanencia residencial.
Por tanto, la caída demográfica no puede explicarse solo por la presión turística. Debe entenderse dentro de una dinámica más amplia, en la que coinciden el crecimiento de las VUT, el envejecimiento de la población y la pérdida de peso de los grupos jóvenes.
Los mapas siguientes reproducen los análisis territoriales en formato interactivo. Permiten consultar el valor de cada sección censal pasando el cursor por encima.