El mercado de la vivienda es clave para la estabilidad económica y financiera en Europa.
El trabajo analiza España, Francia y Alemania desde una perspectiva comparada.
Se estudian factores demográficos, precios, construcción y relación con los ingresos.
El objetivo es identificar diferencias, tendencias y problemas de asequibilidad.
Se busca entender cómo los cambios económicos y sociales afectan al acceso a la vivienda.
Código
#Cargamos las librerías que vamos a usarlibrary(tidyverse)library(eurostat)library(sf)library(rnaturalearth)library(knitr)library(ggplot2)library(dplyr)library(plotly)library(countrycode)library(sf)library(rio)library(extrafont)library(patchwork)library(leaflet)library(htmltools)library(RColorBrewer)library(giscoR)library(gt)#seleccionamos los países que vamos a compararcodigos_paises <-c("ES", # España"FR", # Francia"DE"# Alemania)codigos_paises_00 <-c("EU27_2020","ES", # España"FR"# Francia)
2. Factores demograficos
2.1. Edad de la población
Se compara la estructura por edades en 2000 y 2024.
Se observa un envejecimiento poblacional en los tres países.
Implica una gran transferencia de viviendas heredadas que aumenta la oferta en el mercado.
El indicador mide el ingreso disponible tras pagar costes de vivienda.
Se observa un deterioro hasta 2012 por la crisis financiera.
Alemania mantiene mayor estabilidad y mejor asequibilidad.
España sufre un fuerte deterioro y posterior estabilización.
Francia muestra un empeoramiento moderado gracias a políticas sociales.
Existen claras desigualdades regionales en Europa.
Código
#Asequibilidad de la viviendadf_05 <- rio::import("./datos/Housing_affordability.csv")codigos_paises_03 <-c("ESP", # España"FRA", # Francia"DEU"#Alemania )df_06 <- df_05 %>%select("REF_AREA", "OBS_VALUE", "TIME_PERIOD") %>%filter(REF_AREA %in% codigos_paises_03)ggplot(data = df_06, aes(x = TIME_PERIOD, y = OBS_VALUE)) +geom_line(data= df_06 %>%filter(REF_AREA =="DEU"), aes(color = REF_AREA, group = REF_AREA), color ="#8B7D6B", linewidth =1)+geom_line(data= df_06 %>%filter(REF_AREA =="ESP"), aes(color = REF_AREA, group = REF_AREA), color ="#36648B", linewidth =1) +geom_line(data= df_06 %>%filter(REF_AREA =="FRA"), aes(color = REF_AREA, group = REF_AREA), color ="#A2B5CD", linewidth =1) +scale_y_continuous(labels =function(x) paste0(x, "%")) +labs(title ="Asequibilidad de la vivienda",subtitle ="Porcentaje del ingreso bruto disponible del hogar que queda, después de las \ndeducciones por alquileres y mantenimiento de la vivienda",x ="Año",y ="Tasa de ingreso bruto dispobible",caption ="Fuente: OECD") +annotate("text", x =2020, y =78.4, label ="Francia", color ="#A2B5CD", size =3) +annotate("text", x =2020, y =78.7, label ="España", color ="#36648B", size =3) +annotate("text", x =2020, y =80.8, label ="Alemania", color ="#8B7D6B", size =3) +theme_minimal() +theme(panel.grid.major.x =element_blank(), panel.grid.minor.x =element_blank(), axis.text.x =element_text(angle =0, hjust =1, size =8),axis.text.y =element_text(size =8), plot.title =element_text(family ="sans",size =12,face ="plain"), plot.subtitle =element_text(family ="sans",size =10,face ="plain"))
4.5. Distribución de la población según la carga del coste de la vivienda y el grado de urbanización
Se analiza la sobrecarga (>40% de la renta) en grandes ciudades.
La tasa disminuye en la UE, España y Francia desde 2010.
España presenta mayor volatilidad y sensibilidad a crisis.
Francia mantiene niveles bajos y estables gracias a intervención pública.
Persisten riesgos para hogares de bajos ingresos en zonas urbanas.
Código
my_table <-"ilc_lvho29"label_eurostat_tables(my_table) #> [1] "Distribution of population by housing cost burden and degree of urbanisation"df <-get_eurostat(my_table, time_format ='raw', keepFlags =TRUE)#> indexed 0B in0s, 0B/sindexed 2.15GB in0s, 2.15GB/sdf %>%distinct(unit)#> # A tibble: 1 × 1#> unit #> <chr>#> 1 PCdf %>%distinct(freq) #> # A tibble: 1 × 1#> freq #> <chr>#> 1 Acodigos_paises <-c("EU27_2020","ES", # España"FR", # Francia"DE", # Alemania"IT", # Italia"BE", #Belgica"PT", #Portugal"IE"# Irlanda)codigos_paises_00 <-c("EU27_2020","ES", # España"FR"# Francia)df_0 <- df %>%filter (TIME_PERIOD >=2010) %>%filter(freq =="A") %>%filter(deg_urb =="DEG1") %>%filter(indic_il =="A40DI") %>%filter(geo %in% codigos_paises_00) %>%filter( unit =="PC", !is.na(values) ) %>%mutate(TIME_PERIOD =as.integer(TIME_PERIOD))ggplot(data = df_0, aes(x = TIME_PERIOD, y = values)) +geom_line(aes(group = geo), color ="#A2B5CD", linewidth =0.7, alpha =0.6) +geom_line(data = df_0 %>%filter(geo =="ES"), aes(group = geo), color ="#36648B", linewidth =1) +geom_line(data = df_0 %>%filter(geo =="EU27_2020"), aes(group = geo), color ="#8B2323", linewidth =1) +scale_y_continuous(labels =function(x) paste0(x, "%")) +labs(title ="Distribución de la población según la carga del coste de la vivienda",subtitle ="Carga de los costes de vivienda superior al 40 % de la renta disponible del hogar \nen zonas urbanas grandes ",x ="Año",y ="Tasa de sobrecarga del coste de la vivienda",caption ="Fuente: Eurostat" ) +annotate("text", x =2025, y =8.5, label ="España", color ="#36648B", size =3) +annotate("text", x =2025, y =9.3, label ="Francia", color ="#A2B5CD", size =3) +annotate("text", x =2025, y =9.7, label ="UE", color ="#8B2323", size =3) +scale_y_continuous(labels =function(x) paste0(x, "%")) +theme_minimal() +theme(legend.position ="right", panel.grid.major.x =element_blank(), panel.grid.minor.x =element_blank(), axis.text.x =element_text(angle =0, hjust =1, size =8),axis.text.y =element_text(size =8), plot.title =element_text(family ="sans", size =12, face ="plain"), plot.subtitle =element_text(family ="sans", size =10, face ="plain") )
4.6. Hogares que viven en condiciones de hacinamiento
La tasa de hacinamiento disminuye en la mayoría de países.
Indica mejoras en acceso y calidad de la vivienda post-crisis.
Italia y Bélgica muestran empeoramientos leves.
España mantiene niveles bajos y mejora moderadamente.
Persisten desigualdades regionales dentro de la UE.
Código
#Hogares que viven en condiciones de hacinamientodf_03 <- rio::import("./datos/Households_living_in_overcrowded_conditions.csv")codigos_paises_02 <-c("ESP", # España"FRA", # Francia"ITA", # Italia"BEL", #Belgica"PRT", #Portugal"IRL"# Irlanda)df_04 <- df_03 %>%select(REF_AREA, OBS_VALUE, TIME_PERIOD) %>%filter(REF_AREA %in% codigos_paises_02) %>%filter(TIME_PERIOD %in%c(2010,2018))df_04 %>%mutate(REF_AREA =fct_reorder(REF_AREA, OBS_VALUE, .fun = max)) %>%ggplot(aes(REF_AREA, OBS_VALUE, fill =factor(TIME_PERIOD))) +geom_col(position =position_dodge(0.8)) +scale_fill_manual(values =c("2010"="#A6B8CF","2018"="#355C7D" )) +scale_y_continuous(labels =function(x) paste0(x, "%")) +labs(title ="Porcentaje de hogares que viven en condiciones de hacinamiento",subtitle ="Comparación entre los años 2010 y 2018",x ="País",y ="Tasa de hacinamiento",fill ="Año" ) +theme_minimal() +theme(plot.title =element_text(family ="sans",size =12,face ="plain"), axis.text.x =element_text(size =8),axis.text.y =element_text(size =8))
5. Acceso a la vivienda en términos financieros
El tipo de interés es un factor clave del ciclo inmobiliario.
Tipos bajos (2009–2021) impulsan el crédito y los precios de la vivienda.
Desde 2022, la subida de tipos encarece las hipotecas y reduce la demanda.
El endurecimiento monetario frena el mercado inmobiliario.
El acceso a la vivienda depende fuertemente de la política monetaria del BCE.
Código
tabla_tipo_interes <- rio::import("./datos/datos_ECB_tipo_interes.csv")tabla_tipo_interes_2 <- tabla_tipo_interes |>separate(`TIME PERIOD`, into =c("Year", "Month"), sep =4) |>group_by(Year) |>summarise(media_anual_interes =mean(`Cost of borrowing for households for house purchase (MIR.M.U2.B.A2C.AM.R.A.2250.EUR.N)`))ggplot(tabla_tipo_interes_2, aes(x = Year, y = media_anual_interes)) +geom_line(aes(group =1), color ="#36648B", linewidth =0.8) +labs(title ="Tipo de interés hipotecario promedio aplicado por bancos de la zona euro a nuevas hipotecas /n para compra de vivienda", subtitle ="AAR Interes", x ="Año", y ="Tipo de interés", caption ="Fuente: Banco Central Europeo") +scale_x_discrete(breaks =seq(2003, 2025, by =4))