Demand for new homes

Completions

The Government’s Housing for All plan targets 24,600 completions in 2022, 29,000 in 2023 and 33,450 in 2024.

## NDQ07
NDQ07 <- cso_get_data("NDQ07")
NDQ07_long <- NDQ07 %>%
  pivot_longer(!1:2, names_to = "year_qtr")
NDQ07 <- NDQ07_long
rm(NDQ07_long)
NDQ07$Year_Q <- as.yearqtr(NDQ07$year_qtr)
NDQ07$Year <- year(NDQ07$Year_Q)
NDQ07_A <- NDQ07 %>%
  filter(Eircode.Output=="All")

NDQ07_B <- NDQ07 %>%
  filter(Eircode.Output!="All")

NDQ07_join <- full_join(NDQ07_B, GEO_Merge, by = "Eircode.Output")
NDQ07 <- NDQ07_join
rm(NDQ07_join)
rm(NDQ07_B)

NDQ07_A_tail <- tail(NDQ07_A,1)
NDQ07_A_tail_lag <-head(tail(NDQ07_A,2),1)
NDQ07_A_tail_yonylag <-head(tail(NDQ07_A,5),1)

NDQ07_A_24 <- tail(NDQ07_A,24)
Completions_24mth<-ggplot(data=NDQ07_A_24, aes(x=Year_Q, y=value))+
  geom_col(alpha = 0.5, colour="#373634", fill = "#1b5545")+
  theme_bw()+
  labs(title = "New Dwelling Completions, by Quarter - NDQ07" ,
       subtitle = "24 Month Series",
       y="Units Completed",
       x="Year-Qtr")+
  geom_text(aes(label=value),vjust= 1.5, size=2)+
  theme(legend.position = "bottom")
ggsave("Completions_24mth.png")

tbl_NDQ07_A_Year <-  NDQ07_A %>%
  group_by(Year)%>%
  summarise(Average_Value = mean(value),
            Total = sum(value))

tbl_NDQ07_A_Year$Year <- as.character(tbl_NDQ07_A_Year$Year)

Completions_Yearly<-ggplot(data=tbl_NDQ07_A_Year, aes(x=Year, y=Total))+
  geom_col(alpha = 0.5, colour="#373634", fill = "#02218A")+
  theme_bw()+
  labs(title = "New Dwelling Completions, by Year - NDQ07" ,
       subtitle = "total sample",
       y="Units Completed",
       x="Year")+
  geom_text(aes(label=Total),vjust= 1.5, size=3)+
  theme(legend.position = "bottom")
ggsave("Completions_Yearly.png")

NDQ07_Map <- NDQ07 %>%
  filter(year_qtr == NDQ07_A_tail$year_qtr)
NDQ07_Map_Dub <- NDQ07_Map %>% 
  filter(grepl('Dublin|Laoghaire', Seat_Tag))

shpNDQ <- merge(shp,NDQ07_Map, by.x = "CON_SEAT_", by.y="Seat_Tag")
shpNDQDub <- merge(shp,NDQ07_Map_Dub, by.x = "CON_SEAT_", by.y="Seat_Tag")

Map_1 <-  shpNDQ %>%
  ggplot()+
  geom_sf(aes(fill = value))+
 scale_fill_stepsn(n.breaks = 10,
    colors=c("#ECEFFB","#3966FE","#02218A"),
    name = "completions")+
    ggtitle('Eircode Output Aggregated to Constituency: Latest Quarter')+
  theme_void()+
  theme(legend.title = element_text(size = 10),
        legend.text = element_text(size = 8))+
    theme(legend.position = "left")+
  theme(plot.title = element_text(hjust = 1))

Map_2 <- shpNDQDub %>%
  ggplot()+
  geom_sf(aes(fill = value))+
 scale_fill_stepsn(n.breaks = 10,
    colors=c("#ECEFFB","#3966FE","#02218A"),
    name = "completions")+
    theme_void()+
  theme(legend.position = "none")


Map_View <- Map_1 + Map_2 +
  plot_layout(widths = c(2,1))

ggsave("Map_View.png")

rm(Map_1,Map_2,Map_View,NDQ07,NDQ07_A,NDQ07_A_24,NDQ07_A_tail,NDQ07_A_tail_lag,NDQ07_A_tail_yonylag,NDQ07_Map,NDQ07_Map_Dub,shpNDQ,shpNDQDub,tbl_NDQ07_A_Year,Completions_24mth,Completions_Yearly)

Interest Rate

Ireland Retail Interest Rates

CBM02 <- cso_get_data("CBM02")
CBM02 <- CBM02 %>%
  pivot_longer(!1:2, names_to = "year_month")

CBM02$Month <- as.Date(paste(CBM02$year_month, "01", sep = "-"), "%YM%m-%d")
CBM02$Year <- year(CBM02$Month)
CBM02$month <- months(as.Date(CBM02$Month))

IrlRates<-ggplot(CBM02,aes(x=Month,y=value,group=Statistic,colour=Statistic))+
  geom_line()+
  theme_bw()+
  geom_text_repel(aes(label=round(value, digits=2)),data = CBM02, size = 2.5, max.overlaps = 5)+
  theme(legend.position = "bottom")+
  ggtitle("Ireland: Retail Interest Rates: Households")+
  labs(subtitle = "(CBM02)",y="rate %")

IrlRates

ggsave("IrlRates.png")

rm(CBM02,IrlRates)

ECB Household Cost of Borrowing

COB.H_IE <- get_data("MIR.M.IE.B.A2C.AM.R.A.2250.EUR.N") # cost of borrowing for households for house purchases

COB.H_EA <- get_data("MIR.M.U2.B.A2C.AM.R.A.2250.EUR.N") # cost of borrowing for households for house purchases

###### convert dates
COB.H_IE$obstime<-convert_dates(COB.H_IE$obstime)
COB.H_EA$obstime<-convert_dates(COB.H_EA$obstime)

###### generate (i) lag variables, (ii) difference and (iii) proportional change relative to lag
COB.H_IE$Lag <- Lag(COB.H_IE$obsvalue,1)
COB.H_IE$Diff <- COB.H_IE$obsvalue-COB.H_IE$Lag
COB.H_IE$PropDiff <- COB.H_IE$Diff/COB.H_IE$Lag

COB.H_EA$Lag <- Lag(COB.H_EA$obsvalue,1)
COB.H_EA$Diff <- COB.H_EA$obsvalue-COB.H_EA$Lag
COB.H_EA$PropDiff <- COB.H_EA$Diff/COB.H_EA$Lag

###### bind sets
COB.H <- bind_rows(COB.H_IE,COB.H_EA)

tailCOB.H <- tail(COB.H,1)

Fig.COB.H1 <- ggplot(data=COB.H,aes(x=obstime, y=obsvalue,group=ref_area))+
  geom_line(aes(colour=ref_area))+
  scale_color_manual(values=c("darkgreen", "blue"))+
  geom_text_repel(aes(label=obsvalue),data = COB.H, size = 3)+
  theme_bw()+
  theme(legend.position = "bottom")+
  ggtitle("Household Cost of Borrowing")+
  labs(subtitle = "Monetary Financial Institutions (MFIs) - Interest Rates",
       caption = "Data Source: ECB - U2: Euro Area")+
  ylab("interest rate %")+
  xlab(NULL)

Fig.COB.H2 <- ggplot(data=COB.H,aes(x=obstime, y=Diff,group=ref_area))+
  geom_col(aes(fill=ref_area),alpha=0.5)+
  scale_fill_manual(values=c("darkgreen", "blue"))+
  geom_hline(yintercept = 0, linetype='dotted')+
  geom_text_repel(aes(label=round(Diff,digits=2)),data = COB.H, size = 3)+
  theme_bw()+
  theme(legend.position = "bottom")+
  ylab("monthly change percentage points")+
  xlab(NULL)

Facet1<- Fig.COB.H2+ facet_wrap(~ref_area, nrow = 2)

Fig.COB.H1 + Facet1 + plot_layout(ncol=2,widths = c(2,1))

ggsave("Cost of Borrowing_All.png")

SD_COB.H_IE<- sd(COB.H_IE$Diff, na.rm=TRUE)
SD_COB.H_EA<- sd(COB.H_EA$Diff, na.rm=TRUE)

COB.H_IE_21 <- COB.H_IE %>%
  filter(obstime >= "2021-01-01")

COB.H_EA_21 <- COB.H_EA %>%
  filter(obstime >= "2021-01-01")

COB.H_21 <- bind_rows(COB.H_IE_21,COB.H_EA_21)

# Household graphs
 
Fig.COB.H5 <- ggplot(data=COB.H_21,aes(x=obstime, y=obsvalue,group=ref_area))+
  geom_line(aes(colour=ref_area))+
  scale_color_manual(values=c("darkgreen", "blue"))+
  geom_text_repel(aes(label=obsvalue),data = COB.H_21, size = 2.5,max.overlaps = 3)+
  theme_bw()+
  theme(legend.position = "bottom")+
  ggtitle("Household Cost of Borrowing")+
  labs(subtitle = "Monetary Financial Institutions (MFIs) - Interest Rates",
       caption = "Data Source: ECB - U2: Euro Area")+
  ylab("interest rate %")+
  xlab(NULL)
  
Fig.COB.H6 <- ggplot(data=COB.H_21,aes(x=obstime, y=Diff,group=ref_area))+
  geom_col(aes(fill=ref_area),alpha=0.5)+
  scale_fill_manual(values=c("darkgreen", "blue"))+
  geom_hline(yintercept = 0, linetype='dotted')+
  geom_text_repel(aes(label=round(Diff,digits=2)),data = COB.H_21, size = 2.5,max.overlaps = 3)+
  theme_bw()+
  theme(legend.position = "bottom")+
  ylab("monthly change percentage points")+
  xlab(NULL)+
  geom_hline(yintercept=SD_COB.H_EA,linetype='dashed',colour="blue")+
  geom_hline(yintercept=-SD_COB.H_EA,linetype='dashed',colour="blue")+
  geom_hline(yintercept=SD_COB.H_IE,linetype='dashed',colour="darkgreen")+
  geom_hline(yintercept=-SD_COB.H_IE,linetype='dashed',colour="darkgreen")+
  labs(caption="dashed lines represent 1 +/- standard deviation moves")
 
FacetH21<- Fig.COB.H6+ facet_wrap(~ref_area, nrow = 2)
 
Fig.COB.H5 + FacetH21 + plot_layout(ncol=2,widths = c(2,1))

ggsave("Cost of Borrowing_21.png")

rm(COB.H,COB.H_21,COB.H_EA,COB.H_EA_21,COB.H_IE,COB.H_IE_21,Facet1,FacetH21,Fig.COB.H1,Fig.COB.H2,Fig.COB.H5,Fig.COB.H6)

House Price

HPM09 <- cso_get_data("HPM09")
HPM09_long <- HPM09 %>%
  pivot_longer(!1:2, names_to = "year_month")
rm(HPM09)
HPM09 <- HPM09_long
rm(HPM09_long)

HPM09$Month <- as.Date(paste(HPM09$year_month, "01", sep = "-"), "%YM%m-%d")
HPM09$Year <- year(HPM09$Month)
HPM04 <- cso_get_data("HPM04")
HPM04_long <- HPM04 %>%
  pivot_longer(!1:5, names_to = "year_month")
rm(HPM04)
HPM04 <- HPM04_long
rm(HPM04_long)
### Date transformation
HPM04$Year <-substr(HPM04$year_month,1,4)
HPM04$Month <- sub(".* ", "", HPM04$year_month)
HPM04$Month_NR <- as.integer(factor(HPM04$Month, levels=month.name))
HPM04$Date <- as.yearmon(paste(HPM04$Year, HPM04$Month_NR), "%Y %m")
HPM04_join <- full_join(HPM04, GEO_Merge, by = "Eircode.Output")
HPM04 <- HPM04_join
rm(HPM04_join)

HPM09$month <- months(as.Date(HPM09$Month))

HPM09_1 <- HPM09 %>%
  filter(Statistic == "Residential Property Price Index")%>%
  filter(Type.of.Residential.Property == "National - all residential properties")

HPM09_2 <- HPM09 %>%
  filter(Statistic == "Percentage Change over 12 months for Residential Property Price Index")%>%
  filter(Type.of.Residential.Property == "National - all residential properties")

RPPI_tail_2 <- tail(HPM09_2,1)
RPPI_tail_2_lag <-head(tail(HPM09_2,2),1)

RRPI_Line_1 <- ggplot(data=HPM09_1, aes(x=Month, y=value, group = Type.of.Residential.Property))+
  geom_line(linejoin="mitre",size = 1.25, linetype = 1,alpha = 0.5, colour="#1b5545")+
  theme_bw()+
  labs(title = "Residential Property Price Index" ,
       y="2015 = 100",
       x="Month")+
  geom_text_repel(aes(label=value),data = HPM09_1, size = 3)+
  theme(legend.position = "bottom")

RRPI_Line_1

ggsave("PriceIndex.png")

HPM09_2_T24 <- tail(HPM09_2,24)
colour <- ifelse(HPM09_2_T24$value < 0,"#CC0000","#1b5545")
RPPI_Bar_2 <- ggplot(data=HPM09_2_T24, aes(x=Month, y=value, group = Type.of.Residential.Property))+
  theme_bw()+
  geom_col(alpha = 0.5, colour="#373634", fill = colour)+
  labs(title = "Year on Year Percentage Change for Residential Property Price Index" ,
       subtitle = "24 Month Series",
       y="Percentage change",
       x="Month")+
  geom_text(aes(label=value),vjust= 1.5, size=3)+
  theme(legend.position = "bottom")

RPPI_Bar_2

ggsave("PriceInflation.png")

rm(HPM09)

HPM04_1A <- HPM04 %>%
  filter(Statistic == "Mean Sale Price")%>%
  filter(Dwelling.Status == "All Dwelling Statuses") %>%
  filter(Stamp.Duty.Event == "Executions") %>%
  filter(Type.of.Buyer == "All Buyer Types") %>%
  filter(Eircode.Output == "All")

HPM04_1B <- HPM04 %>%
  filter(Statistic == "Mean Sale Price")%>%
  filter(Dwelling.Status == "All Dwelling Statuses") %>%
  filter(Stamp.Duty.Event == "Executions") %>%
  filter(Type.of.Buyer == "All Buyer Types") %>%
  filter(Eircode.Output != "All")

HPM04_1B_Map <- na.omit(HPM04_1B)
HPM04_1B_Map<- HPM04_1B_Map %>%
  group_by(Seat_Tag, Date)%>% # change to/from County / Constituency
  summarise(Average_Value = mean(value))

HPM04_1B_Map$lagvalue_12mth <- Lag(HPM04_1B_Map$Average_Value,12)
HPM04_1B_Map$Diff <- HPM04_1B_Map$Average_Value - HPM04_1B_Map$lagvalue_12mth
HPM04_1B_Map$Diffpc <- HPM04_1B_Map$Diff / HPM04_1B_Map$lagvalue_12mth
HPM04_1B_Map$Diffpc<-percent(HPM04_1B_Map$Diffpc,2)


HPM04_1B_Map_June2022 <- HPM04_1B_Map%>%
  filter(Date == "June 2022")

shpHPM <- merge(shp,HPM04_1B_Map_June2022, by.x = "CON_SEAT_", by.y="Seat_Tag")
HPM04_1B_Map_June2022_GDA <- HPM04_1B_Map_June2022 %>% 
  filter(grepl('Dublin|Laoghaire|Meath|Louth|Kildare|Wicklow', Seat_Tag))

shpHPMGDA <- merge(shp,HPM04_1B_Map_June2022_GDA, by.x = "CON_SEAT_", by.y="Seat_Tag")

Map2_ValueAll <-  shpHPM %>%
  ggplot()+
  geom_sf(aes(fill = Average_Value))+
 scale_fill_stepsn(n.breaks = 15,
    colors=c("#0c233f","#FFFFFF","#b4862d"),
    name = "Average Price")+
    ggtitle('Average Price by Constituency - HPM04')+
  theme_void()+
  theme(legend.title = element_text(size = 10),
        legend.text = element_text(size = 8))+
    theme(legend.position = "left")+
  theme(plot.title = element_text(hjust = 1))

Map2_ValueGDA <-  shpHPMGDA %>%
  ggplot()+
  geom_sf(aes(fill = Average_Value))+
 scale_fill_stepsn(n.breaks = 15,
                   colors=c("#0c233f","#FFFFFF","#b4862d"))+
  theme_void()+
  theme(legend.title = element_text(size = 10),
        legend.text = element_text(size = 8))+
    theme(legend.position = "none")

Map2_ValueAll+Map2_ValueGDA+plot_layout(widths = c(2,1.5))

ggsave("ASPMapJune.png")

rm(HPM04,HPM04_1A,HPM04_1B,HPM04_1B_Map,HPM04_1B_Map_June2022,HPM04_1B_Map_June2022_GDA,HPM04_join,HPM04_long,HPM09,HPM09_long,HPM09_1,HPM09_2,HPM09_2_T24)

HPQ01 <- cso_get_data("HPQ01")
HPQ01_long <- HPQ01 %>%
  pivot_longer(!1:2, names_to = "year_qtr")
HPQ01 <- HPQ01_long
rm(HPQ01_long)
HPQ01$Year_Q <- as.yearqtr(HPQ01$year_qtr)
HPQ01$Year <- year(HPQ01$Year_Q)

HPQ01<- HPQ01 %>%
  filter(Statistic == "Residential Property Price Index")%>%
  filter(Dwelling.Status!="All Dwelling Statuses")

NewVsExist<-ggplot(HPQ01,aes(x=Year_Q,y=value,group=Dwelling.Status,colour=Dwelling.Status))+
  geom_line()+
  scale_color_manual(values=c("#4aa98a","#ed6f35"))+
  geom_text_repel(aes(label=value),data = HPQ01, size = 3, max.overlaps = 5)+
  geom_hline(yintercept = 100, linetype='dotted')+
  theme_bw()+
  theme(legend.position = "bottom")+
  labs(title = "Residential Property Price Index - HPQ01" ,
       y="Index (2015 = 100)",
       x="Year-Quarter")
ggsave("NewVsExist.png")

New vs Existing

NewVsExist

Daft prices 2022