The Budget package is €11 bn, consisting of a €6.9 bn in the main and a €4.1 bn in once off measures
Paschal Donohoe addressed the inflation outlook, the Governments view is:
The reliance on corporation tax receipts from a small number of was acknowledged. Debt to GNI (Gross National Income) is approximately 70%, the lowest since 2009. The debt per capita is €44k.
Key points for Housing:
The Irish Times have summarised the points by One off vs “Multi-year”/Permanent measure
The Great British Peso, a disservice to the Peso
There is a commonly held belief that the Tories are financially competent, in my view a myth.
Not many people were familiar with Kwasi Kwarteng, the newest Chancellor of the Exchequer in the UK, until he crashed the pound with a “mini budget” which introduced a series of tax cuts. Of which there was no plan, figures or any detail on how these cuts will be funded. This sent the market spinning as the sovereign debt prices corrected and the pound went on a wild ride.
Timeline of events:
The BOE and the Government are incongruous, the result is a poor outlook for the Brits.
Russia & Ukraine
Timeline of events:
Putin is talking up nuclear war and now finding himself on the backfoot is likely the one behind the sabotage of the energy supply.
Europes energy supply continues to be the defining geo-political and economic issue.
In addition to the Nord Stream leaks which, oil pipelines are also leaking. “The discovery of the leak in the main route carrying oil to Germany, which operator PERN said it found on Tuesday evening, comes as Europe is on high alert over its energy security as it faces a severe crisis in the aftermath of Moscow’s invasion of Ukraine which has cut supplies of gas.” - Reuters.
This comes as German proposed energy package of 200 bn has not went down well with the rest of the eurogroup. French finance minister, Bruno le Maire was joined by Paschal Donohue and Mario Draghi in calling for a more co-ordinated approach. All eyes on Ursula von der Leyen to find a compromise as Orban and the other more troublesome leaders, make headlines for devisive comments. Thus far the Germans have been against an EU wide gas price cap proposed by von der Leyen
All the while, the ECB has warned that governments fiscal responses risk feeding a self-reinforcing cycle of inflation. Another 75bps at the end of the month looks likely.
OPEC cuts supply
Last issue we looked at oil and gas are off yearly highs with the former being down about 30%. OPEC plus have met in Vienna to surpise the market with an oil cut. This is a bold move lead by the Saudis, the FT report that Riyadh could be expecting increasing hostility from the US.
Skip to the commodities section for more on this.
China
The World Banks latest forecast projects that Chinas Economic output will lag behind the rest of Asia for the first time since the 1990s.
I’ve read that due to the Chinese Communist Party congress on the 16th of the month, Xi may be leaning on lockdowns to damage competitors. We will soon find out.
Elsewhere
US impose semi-conducter export restrictions on China while marijuanas pardoned, all as Biden acknowledges chance of a “slight” recession.
Even when China reopens there is no going back for trade. The U.S. Department of Commerce introduced sweeping rules aimed at cutting China off from obtaining or manufacturing key chips and components for supercomputers. This is the latest escalation in US - China tensions.
# Ensure to change CSV name to apprpriate version number / working directory
SNP <- getSymbols("^GSPC",src='yahoo',auto.assign=FALSE)
ISEQ <- getSymbols("^ISEQ",src='yahoo',auto.assign=FALSE)
SNP$Close.MA5 <- rollmean(SNP$GSPC.Close,5)
SNP$Close.MA5 <- Lag(SNP$Close.MA5,2)
SNP$Close.MA10 <- rollmean(SNP$GSPC.Close,10)
SNP$Close.MA10 <- Lag(SNP$Close.MA10,5)
ISEQ$Close.MA5 <- rollmean(ISEQ$ISEQ.Close,5)
ISEQ$Close.MA5 <- Lag(ISEQ$Close.MA5,2)
ISEQ$Close.MA10 <- rollmean(ISEQ$ISEQ.Close,10)
ISEQ$Close.MA10 <- Lag(ISEQ$Close.MA10,5)
write.csv(SNP,"SNP.N1.1.csv")
write.csv(ISEQ,"ISEQ.N1.1.csv")
SNP_Sep22 <- SNP %>%
subset(date(index(.))>= "2022-09-01")
ISEQ_Sep22 <- ISEQ %>%
subset(date(index(.))>= "2022-09-01")
SNP_YTD <- SNP %>%
subset(date(index(.))>= "2022-01-01")
ISEQ_YTD <- ISEQ %>%
subset(date(index(.))>= "2022-01-01")
The S&P and ISEQ continue to show a visual correlation.
SNP_end <- as.data.frame(tail(SNP_YTD,1))
ISEQ_end <- as.data.frame(tail(ISEQ_YTD,1))
Fig.SNP.YTD<-ggplot(data=SNP_YTD,aes(x=Index,y=GSPC.Close,group=1))+
geom_line(data=SNP_YTD,aes(x=Index,y=Close.MA5,group=1),alpha=0.5,colour="#9200ff")+
geom_line(data=SNP_YTD,aes(x=Index,y=Close.MA10,group=1),alpha=0.5,colour="#290047",linetype="dashed")+
geom_line(colour="#D49CFE",size=1)+
geom_text_repel(aes(label=round(GSPC.Close,digits=2)),data = SNP_YTD, size = 2.5,max.overlaps = 4,colour="#f6f7f6")+
theme_dark()+
ggtitle("S&P YTD")+
xlab("Dates")+ scale_y_continuous(sec.axis = sec_axis(~ ., breaks = SNP_end$GSPC.Close))+ theme(axis.text = element_text(size = 6))
Fig.ISEQ.YTD<-ggplot(data=ISEQ_YTD,aes(x=Index,y=ISEQ.Close,group=1))+
geom_line(data=ISEQ_YTD,aes(x=Index,y=Close.MA5,group=1),alpha=0.5,colour="#15e600")+
geom_line(data=ISEQ_YTD,aes(x=Index,y=Close.MA10,group=1),alpha=0.5,colour="#0f6606",linetype="dashed")+
geom_line(colour="#A5FE9C",size=1)+
geom_text_repel(aes(label=round(ISEQ.Close,digits=2)),data = ISEQ_YTD, size = 2.5,max.overlaps = 4,colour="#f6f7f6")+
theme_dark()+
ggtitle("ISEQ YTD")+
xlab("Dates")+ scale_y_continuous(sec.axis = sec_axis(~ ., breaks = ISEQ_end$ISEQ.Close))+ theme(axis.text = element_text(size = 6))
Fig.SNP.YTD+Fig.ISEQ.YTD+plot_layout(ncol=2)+
labs(caption = "Moving Averages: dashed line = 5 day, solid line = 10 day")
Fig.SNP.Sep<-ggplot(data=SNP_Sep22,aes(x=Index,y=GSPC.Close,group=1))+
geom_line(data=SNP_Sep22,aes(x=Index,y=Close.MA5,group=1),alpha=0.5,colour="#9200ff")+
geom_line(data=SNP_Sep22,aes(x=Index,y=Close.MA10,group=1),alpha=0.5,colour="#290047",linetype="dashed")+
geom_line(colour="#D49CFE",size=1)+
geom_text_repel(aes(label=round(GSPC.Close,digits=2)),data = SNP_Sep22, size = 2.5,max.overlaps = 4,colour="#f6f7f6")+
theme_dark()+
ggtitle("S&P Sep22")+
xlab("Dates")+ scale_y_continuous(sec.axis = sec_axis(~ ., breaks = SNP_end$GSPC.Close))+ theme(axis.text = element_text(size = 6))
Fig.ISEQ.Sep<-ggplot(data=ISEQ_Sep22,aes(x=Index,y=ISEQ.Close,group=1))+
geom_line(data=ISEQ_Sep22,aes(x=Index,y=Close.MA5,group=1),alpha=0.5,colour="#15e600")+
geom_line(data=ISEQ_Sep22,aes(x=Index,y=Close.MA10,group=1),alpha=0.5,colour="#0f6606",linetype="dashed")+
geom_line(colour="#A5FE9C",size=1)+
geom_text_repel(aes(label=round(ISEQ.Close,digits=2)),data = ISEQ_Sep22, size = 2.5,max.overlaps = 4,colour="#f6f7f6")+
theme_dark()+
ggtitle("ISEQ Sep22")+
xlab("Dates")+ scale_y_continuous(sec.axis = sec_axis(~ ., breaks = ISEQ_end$ISEQ.Close))+ theme(axis.text = element_text(size = 6))
Fig.SNP.Sep+Fig.ISEQ.Sep+plot_layout(ncol=2)+
labs(caption = "Moving Averages: dashed line = 5 day, solid line = 10 day")
The dollar is the safe haven, note the USD vs Chinese Yuan differs to the other series as the others are the home currency in terms of the dollar. So an increase in this chart shows a stronger dollar.
# Plot Currency
Fig.EURYTD + Fig.GBPYTD + Fig.AUDYTD + Fig.CHNYTD + plot_layout(ncol=2)
A nod to the GBP performing worse than the Peso which was alluded to in the Headline Roundup.
# Plot Dec Futures
Fig.YEN.FYTD + Fig.PES.FYTD + plot_layout(ncol=2)
#Plot Gold
Fig.GOLD + Fig.GOLDYTD + plot_layout(ncol=2)
Fig_BTC.YTD + Fig_ETH.YTD + plot_layout(nrow=2)
As mentioned in the headline roundup see below OPEC Plus (which includes Russia) will be cutting production by 2 million barrels per day. I read that this will actually be more like 1 million as they were falling short of quotas anyways. This is in response to sanctions and oil price caps. I’ve seen some iteration of the below chart in recent months. It’s naive to assume just because the trends are closely correlated that one will predict the other, however, OPEC are acting in what they assume to be in their best interests.
The US have responded by releasing their oil reserves, likely because they have mid term elections. Today, Biden has warned of “consequences” for the Saudis.
Why should we care? Higher prices for oil means more inflation, which means higher rate increases, which in turn means that recession is (even) more likely.
# Load
## Oil
#BRENT <- getSymbols("BZ=F",src='yahoo',auto.assign=FALSE)
WTI <- getSymbols("CL=F",src='yahoo',auto.assign=FALSE)
#BRENT_AVG <- mean(BRENT$`BZ=F.Close`,na.rm=TRUE)
#BRENT_TAIL <- tail(BRENT,1)
#BRENT_CLOSE <- mean(BRENT_TAIL$`BZ=F.Close`,na.rm=TRUE)
WTI_AVG <- mean(WTI$`CL=F.Close`,na.rm=TRUE)
WTI_TAIL <- tail(WTI,1)
WTI_CLOSE <- mean(WTI_TAIL$`CL=F.Close`,na.rm=TRUE)
#BRENT.YTD <- BRENT %>%
# subset(date(index(.))>= "2022-01-01")
WTI.YTD <- WTI %>%
subset(date(index(.))>= "2022-01-01")
#BRENT.YTD_AVG <- mean(BRENT.YTD$`BZ=F.Close`,na.rm=TRUE)
#BRENT.YTD_TAIL <- tail(BRENT.YTD,1)
#BRENT.YTD_CLOSE <- mean(BRENT.YTD_TAIL$`BZ=F.Close`,na.rm=TRUE)
WTI.YTD_AVG <- mean(WTI.YTD$`CL=F.Close`,na.rm=TRUE)
WTI.YTD_TAIL <- tail(WTI.YTD,1)
WTI.YTD_CLOSE <- mean(WTI.YTD_TAIL$`CL=F.Close`,na.rm=TRUE)
# Run the past and present periods for a naive correlation
WTI.Past <- WTI %>%
subset(date(index(.))>= "2007-01-01") %>%
subset(date(index(.))<= "2008-12-31")
WTI.Pres <- WTI %>%
subset(date(index(.))>= "2021-01-01")
WTI.Past <- data.frame(date=index(WTI.Past), coredata(WTI.Past))
WTI.Past$Period <- "Jan 07 to Dec 08"
WTI.Pres <- data.frame(date=index(WTI.Pres), coredata(WTI.Pres))
WTI.Pres$Period <- "Jan 21 to Date"
WTI.Past$day <- yday(WTI.Past$date)
WTI.Past$year <- format(WTI.Past$date,"%Y")
WTI.Past$a <- ifelse(WTI.Past$year == "2007",0,365)
WTI.Past$t <- WTI.Past$day+WTI.Past$a
WTI.Pres$day <- yday(WTI.Pres$date)
WTI.Pres$year <- format(WTI.Pres$date,"%Y")
WTI.Pres$a <- ifelse(WTI.Pres$year == "2021",0,365)
WTI.Pres$t <- WTI.Pres$day+WTI.Pres$a
WTI.Past_Pres <- rbind(WTI.Past,WTI.Pres)
arrows <- tibble(
x1 = c(500,638),
x2 = c(45,40)
)
WTI.Past_Pres %>%
ggplot(aes(x=t,y=CL.F.Close,group=Period))+
geom_line(aes(colour=Period),size=1.25,alpha=0.7)+
scale_colour_manual(values=c("#FF3B47","black"))+
theme_bw()+
theme(legend.position = "bottom")+
ylab("USD per barrell")+xlab("t = days")+
ggtitle("West Texas Intermediary (WTI)")+
geom_vline(xintercept=641,size=0.25,alpha=0.9,linetype="dashed",colour="navy")+
geom_vline(xintercept=561,size=0.25,alpha=0.9,linetype="dashed")+
annotate("text", x = 550, y = 45, label = "OPEC Plus supply cut hits market",size=3,colour="navy")+
annotate("text", x = 475, y = 60, label = "Biden visit to Saudi Arabia",size=3)
BRENT <- getSymbols("BZ=F",src='yahoo',auto.assign=FALSE)
WTI <- getSymbols("CL=F",src='yahoo',auto.assign=FALSE)
NGAS <- getSymbols("NG=F",src='yahoo',auto.assign=FALSE)
write.csv(BRENT,"BRENT.N2.2.csv")
write.csv(WTI,"WTI.N2.2.csv")
write.csv(NGAS,"NGAS.N2.2.csv")
BRENT_AVG <- mean(BRENT$`BZ=F.Close`,na.rm=TRUE)
BRENT_TAIL <- tail(BRENT,1)
BRENT_CLOSE <- mean(BRENT_TAIL$`BZ=F.Close`,na.rm=TRUE)
WTI_AVG <- mean(WTI$`CL=F.Close`,na.rm=TRUE)
WTI_TAIL <- tail(WTI,1)
WTI_CLOSE <- mean(WTI_TAIL$`CL=F.Close`,na.rm=TRUE)
NGAS_AVG <- mean(NGAS$`NG=F.Close`,na.rm=TRUE)
NGAS_TAIL <- tail(NGAS,1)
NGAS_CLOSE <- mean(NGAS_TAIL$`NG=F.Close`,na.rm=TRUE)
#Oil Plots
Fig.Brent1<-ggplot(data=BRENT,aes(x=Index,y=`BZ=F.Close`,group=1))+
geom_line()+
geom_hline(yintercept=BRENT_CLOSE,alpha=0.5)+
geom_hline(yintercept=BRENT_AVG,linetype='dashed')+
theme_bw()+
ggtitle("Brent Crude Price (BZ=F)")+
ylab("Price - USD")+
xlab(NULL)+ theme(axis.text = element_text(size = 6))
Fig.WTI1<-ggplot(data=WTI,aes(x=Index,y=`CL=F.Close`,group=1))+
geom_line(colour="darkgrey")+
geom_hline(yintercept=WTI_CLOSE,colour="darkgrey",alpha=0.8)+
geom_hline(yintercept=WTI_AVG,linetype='dashed',colour="darkgrey")+
theme_bw()+
ggtitle("West Texas Intermediary (WTI) Price (CL=F)")+
ylab("Price - USD")+
xlab(NULL)+ theme(axis.text = element_text(size = 6))
#Gas Plots
Fig.NGAS1<-ggplot(data=NGAS,aes(x=Index,y=`NG=F.Close`,group=1))+
geom_line(colour="darkblue")+
geom_hline(yintercept=NGAS_CLOSE,colour="darkblue",alpha=0.5)+
geom_hline(yintercept=NGAS_AVG,linetype='dashed',colour="darkblue")+
theme_bw()+
ggtitle("Natural Gas Price (NG=F)")+
ylab("Price - USD")+
xlab("Dates")+
labs(caption = "dashed line = average, solid line = closing price")+ theme(axis.text = element_text(size = 6))
# Total Series for Energy
Fig.Energy.TS<-Fig.Brent1 + Fig.WTI1 + Fig.NGAS1 +
plot_layout(nrow=3)
BRENT_YTD <- BRENT %>%
subset(date(index(.))>= "2022-01-01")
WTI_YTD <- WTI %>%
subset(date(index(.))>= "2022-01-01")
NGAS_YTD <- NGAS %>%
subset(date(index(.))>= "2022-01-01")
BRENT_YTD_AVG <- mean(BRENT_YTD$`BZ=F.Close`,na.rm=TRUE)
BRENT_YTD_TAIL <- tail(BRENT_YTD,1)
BRENT_YTD_CLOSE <- mean(BRENT_YTD_TAIL$`BZ=F.Close`,na.rm=TRUE)
WTI_YTD_AVG <- mean(WTI_YTD$`CL=F.Close`,na.rm=TRUE)
WTI_YTD_TAIL <- tail(WTI_YTD,1)
WTI_YTD_CLOSE <- mean(WTI_YTD_TAIL$`CL=F.Close`,na.rm=TRUE)
NGAS_YTD_AVG <- mean(NGAS_YTD$`NG=F.Close`,na.rm=TRUE)
NGAS_YTD_TAIL <- tail(NGAS_YTD,1)
NGAS_YTD_CLOSE <- mean(NGAS_YTD_TAIL$`NG=F.Close`,na.rm=TRUE)
#Oil Plots
Fig.Brent2<-ggplot(data=BRENT_YTD,aes(x=Index,y=`BZ=F.Close`,group=1))+
geom_line()+
geom_hline(yintercept=BRENT_YTD_CLOSE,alpha=0.5)+
geom_hline(yintercept=BRENT_YTD_AVG,linetype='dashed')+
theme_bw()+
ggtitle("Brent Crude Price (BZ=F)")+
ylab(NULL)+
xlab(NULL)+ theme(axis.text = element_text(size = 6))
Fig.WTI2<-ggplot(data=WTI_YTD,aes(x=Index,y=`CL=F.Close`,group=1))+
geom_line(colour="darkgrey")+
geom_hline(yintercept=WTI_YTD_CLOSE,colour="darkgrey",alpha=0.8)+
geom_hline(yintercept=WTI_YTD_AVG,linetype='dashed',colour="darkgrey")+
theme_bw()+
ggtitle("West Texas Intermediary (WTI) Price (CL=F)")+
ylab(NULL)+
xlab(NULL)+ theme(axis.text = element_text(size = 6))
#Gas Plots
Fig.NGAS2<-ggplot(data=NGAS_YTD,aes(x=Index,y=`NG=F.Close`,group=1))+
geom_line(colour="darkblue")+
geom_hline(yintercept=NGAS_YTD_CLOSE,colour="darkblue",alpha=0.5)+
geom_hline(yintercept=NGAS_YTD_AVG,linetype='dashed',colour="darkblue")+
theme_bw()+
ggtitle("Natural Gas Price (NG=F)")+
ylab(NULL)+
xlab("Dates")+
labs(caption = "dashed line = average, solid line = closing price")+ theme(axis.text = element_text(size = 6))
# YTD
Fig.Energy.YTD<-Fig.Brent2 + Fig.WTI2 + Fig.NGAS2 +
plot_layout(nrow=3)
Fig.Brent1+Fig.Brent2+Fig.WTI1+Fig.WTI2+Fig.NGAS1+Fig.NGAS2+
plot_layout(nrow=3)
rm(ISEQ)
rm(ISEQ_July22)
rm(ISEQ_YTD)
rm(SNP)
rm(SNP_July22)
rm(SNP_YTD)
# Euro Area
EA.1YR <- get_data("YC.B.U2.EUR.4F.G_N_A.SV_C_YM.SR_1Y")
EA.1YR$obstime<-convert_dates(EA.1YR$obstime)
Fig_EA.1YR<-ggplot(data=EA.1YR,aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="blue")+
geom_hline(yintercept = 0, linetype='dotted')+
geom_text_repel(aes(label=round(obsvalue,digits=2)),data = EA.1YR, size = 3)+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("1 Year Maturity")+
ylab("yield (%)")+
xlab(NULL)
EA.5YR <- get_data("YC.B.U2.EUR.4F.G_N_A.SV_C_YM.SR_5Y")
EA.5YR$obstime<-convert_dates(EA.5YR$obstime)
Fig_EA.5YR<-ggplot(data=EA.5YR,aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="blue")+
geom_hline(yintercept = 0, linetype='dotted')+
geom_text_repel(aes(label=round(obsvalue,digits=2)),data = EA.5YR, size = 3)+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("5 Year Maturity")+
ylab("yield (%)")+
xlab(NULL)
EA.10YR <- get_data("YC.B.U2.EUR.4F.G_N_A.SV_C_YM.SR_10Y")
EA.10YR$obstime<-convert_dates(EA.10YR$obstime)
Fig_EA.10YR<-ggplot(data=EA.10YR,aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="blue")+
geom_hline(yintercept = 0, linetype='dotted')+
geom_text_repel(aes(label=round(obsvalue,digits=2)),data = EA.10YR, size = 3)+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("10 Year Maturity")+
ylab("yield (%)")+
xlab(NULL)
EA.30YR <- get_data("YC.B.U2.EUR.4F.G_N_A.SV_C_YM.SR_30Y")
EA.30YR$obstime<-convert_dates(EA.30YR$obstime)
Fig_EA.30YR<-ggplot(data=EA.30YR,aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="blue")+
geom_hline(yintercept = 0, linetype='dotted')+
geom_text_repel(aes(label=round(obsvalue,digits=2)),data = EA.30YR, size = 3)+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("30 Year Maturity")+
ylab("yield (%)")+
xlab(NULL)
Fig_EA.1YR+Fig_EA.5YR+Fig_EA.10YR+Fig_EA.30YR+
plot_layout(nrow=2,ncol=2)
# Generate yield curve
EA.1YR_Print<-tail(EA.1YR,1)
EA.5YR_Print<-tail(EA.5YR,1)
EA.10YR_Print<-tail(EA.10YR,1)
EA.30YR_Print<-tail(EA.30YR,1)
EA.YieldCurve <- rbind(EA.1YR_Print,EA.5YR_Print,EA.10YR_Print,EA.30YR_Print)
EA.YieldCurve$year <- sub("\\Y.*","",EA.YieldCurve$data_type_fm)
EA.YieldCurve$year <- sub(".*SR_","",EA.YieldCurve$year)
EA.YieldCurve$year <- as.numeric(EA.YieldCurve$year)
Fig_EA.YieldCurve<-ggplot(data=EA.YieldCurve,aes(x=year,y=obsvalue,group=ref_area))+
geom_line(colour="blue")+
geom_text(label=round(EA.YieldCurve$obsvalue,digits=2),vjust=-1,hjust=1,colour="blue")+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Yield Curve")+
ylab("yield (%)")+
xlab(NULL)
Fig_EA.YieldCurve
Irish trend yet to move, elsewhere in Europe continues to rise.
# Generate Each Plot, title the Irish plot and add the deposit rate to each. Then create the four panels. Adding footnote to the final panel
Facet1 <- IE.BIR_H %>%
ggplot(aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="darkgreen")+geom_step(data=MRO.DF_03,aes(x=obstime,y=obsvalue),linetype="dotted",alpha=0.7)+
geom_hline(yintercept = 0, colour = "red",alpha=0.2)+
geom_text_repel(aes(label=obsvalue),size=2.5,colour="#666666")+
geom_text_repel(aes(label=lab),data=IE.BIR_H_end,size=2.75,colour="black",fontface='bold')+
geom_text_repel(aes(label=lab),data=MRO.DF_03_end,size=2.75,colour="black",fontface='bold')+
theme_bw()+
theme(legend.position = "bottom")+
ylab("%")+
xlab(NULL)+
ggtitle("Bank Interest Rates: Loans to households for house purchase")+
labs(subtitle = "Ireland")
Facet2 <- DE.BIR_H %>%
ggplot(aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="#FFCE00")+geom_step(data=MRO.DF_03,aes(x=obstime,y=obsvalue),linetype="dotted",alpha=0.7)+
geom_hline(yintercept = 0, colour = "red",alpha=0.2)+
geom_text_repel(aes(label=obsvalue),size=2.5,colour="#666666")+
geom_text_repel(aes(label=lab),data=DE.BIR_H_end,size=2.75,colour="black",fontface='bold')+
theme_bw()+
theme(legend.position = "bottom")+
ylab(NULL)+
xlab(NULL)+
labs(subtitle = "Germany")
Facet3 <- FR.BIR_H %>%
ggplot(aes(x=obstime,y=obsvalue,group=ref_area))+
geom_hline(yintercept = 0, colour = "red",alpha=0.2)+
geom_line(colour="#0055A4")+geom_step(data=MRO.DF_03,aes(x=obstime,y=obsvalue),linetype="dotted",alpha=0.7)+
geom_text_repel(aes(label=obsvalue),size=2.5,colour="#666666")+
geom_text_repel(aes(label=lab),data=FR.BIR_H_end,size=2.75,colour="black",fontface='bold')+
theme_bw()+
theme(legend.position = "bottom")+
ylab("%")+
xlab(NULL)+
labs(subtitle = "France")
Facet4 <- IT.BIR_H %>%
ggplot(aes(x=obstime,y=obsvalue,group=ref_area))+
geom_line(colour="#008C45")+geom_step(data=MRO.DF_03,aes(x=obstime,y=obsvalue),linetype="dotted",alpha=0.7)+
geom_hline(yintercept = 0, colour = "red",alpha=0.2)+
geom_text_repel(aes(label=obsvalue),size=2.5,colour="#666666")+
geom_text_repel(aes(label=lab),data=IT.BIR_H_end,size=2.75,colour="black",fontface='bold')+
theme_bw()+
theme(legend.position = "bottom")+
ylab(NULL)+
xlab(NULL)+
labs(subtitle = "Italy",caption="ECB Deposit Facility = dotted line")
Facet1 + Facet2 + Facet3 + Facet4 + plot_layout(ncol=2)
In 2014 Non Banks involvement spiked, likely this is significant in the etymology of the term “Vulture Fund”.
# Step 1. Load Bank of Ireland Mortgage Arrears: https://www.centralbank.ie/statistics/data-and-analysis/credit-and-banking-statistics/mortgage-arrears
MOA <- readxl::read_xlsx(path="C:\\Users\\charten\\OneDrive - Glenveagh Properties\\Research & Development\\1. Analysis\\Banking\\moa-data-tables-new.sep.xlsx",sheet = 1)
### dates
MOA$date <- as.Date(MOA$Reporting.Date)
### Subsets
MOA.PDH <- MOA %>%
filter(Format=="PDH")
MOA.PDH.N <- MOA.PDH %>%
filter(Unit =="Number")
MOA.PDH.B <- MOA.PDH %>%
filter(Unit =="Balance € (000)")
MOA.PDH.A <- MOA.PDH %>%
filter(Unit =="Arrears € (000)")
MOA.BTL <- MOA %>%
filter(Format=="BTL")
MOA.BTL.N <- MOA.BTL %>%
filter(Unit =="Number")
MOA.BTL.B <- MOA.BTL %>%
filter(Unit =="Balance € (000)")
MOA.BTL.A <- MOA.BTL %>%
filter(Unit =="Arrears € (000)")
# Step 2. Filter Categories & Subcategories
## A: Arrears (1) Number
MOA.PDH.N.AR <- MOA.PDH.N %>%
filter(Category == "Arrears")
MOA.BTL.N.AR <- MOA.BTL.N %>%
filter(Category == "Arrears")
### PDH
#### Total
MOA.PDH.N.AR_T <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears")
MOA.PDH.N.AR_T$lag <- lag(MOA.PDH.N.AR_T$value)
MOA.PDH.N.AR_T$diff <- MOA.PDH.N.AR_T$value - MOA.PDH.N.AR_T$lag
MOA.PDH.N.AR_T$diffpc <- round((MOA.PDH.N.AR_T$diff/MOA.PDH.N.AR_T$lag),digits=4)*100
MOA.PDH.N.AR_T$lag[MOA.PDH.N.AR_T$date=="2009-09-30"] <- NA
MOA.PDH.N.AR_T$diff[MOA.PDH.N.AR_T$date=="2009-09-30"] <- NA
MOA.PDH.N.AR_T$diffpc[MOA.PDH.N.AR_T$date=="2009-09-30"] <- NA
#### up to 90 days
MOA.PDH.N.AR_90 <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - up to 90 days")
MOA.PDH.N.AR_90$lag <- lag(MOA.PDH.N.AR_90$value)
MOA.PDH.N.AR_90$diff <- MOA.PDH.N.AR_90$value - MOA.PDH.N.AR_90$lag
MOA.PDH.N.AR_90$diffpc <- round((MOA.PDH.N.AR_90$diff/MOA.PDH.N.AR_90$lag),digits=4)*100
MOA.PDH.N.AR_90$lag[MOA.PDH.N.AR_90$date=="2009-09-30"] <- NA
MOA.PDH.N.AR_90$diff[MOA.PDH.N.AR_90$date=="2009-09-30"] <- NA
MOA.PDH.N.AR_90$diffpc[MOA.PDH.N.AR_90$date=="2009-09-30"] <- NA
#### 91 to 180 days
MOA.PDH.N.AR_180 <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 91 to 180 days")
MOA.PDH.N.AR_180$lag <- lag(MOA.PDH.N.AR_180$value)
MOA.PDH.N.AR_180$diff <- MOA.PDH.N.AR_180$value - MOA.PDH.N.AR_180$lag
MOA.PDH.N.AR_180$diffpc <- round((MOA.PDH.N.AR_180$diff/MOA.PDH.N.AR_180$lag),digits=4)*100
MOA.PDH.N.AR_180$lag[MOA.PDH.N.AR_180$date=="2009-09-30"] <- NA
MOA.PDH.N.AR_180$diff[MOA.PDH.N.AR_180$date=="2009-09-30"] <- NA
MOA.PDH.N.AR_180$diffpc[MOA.PDH.N.AR_180$date=="2009-09-30"] <- NA
#### 181 to 365 days
MOA.PDH.N.AR_365 <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 181 to 365 days")
MOA.PDH.N.AR_365$lag <- lag(MOA.PDH.N.AR_365$value)
MOA.PDH.N.AR_365$diff <- MOA.PDH.N.AR_365$value - MOA.PDH.N.AR_365$lag
MOA.PDH.N.AR_365$diffpc <- round((MOA.PDH.N.AR_365$diff/MOA.PDH.N.AR_365$lag),digits=4)*100
MOA.PDH.N.AR_365$lag[MOA.PDH.N.AR_365$date=="2012-09-28"] <- NA
MOA.PDH.N.AR_365$diff[MOA.PDH.N.AR_365$date=="2012-09-28"] <- NA
MOA.PDH.N.AR_365$diffpc[MOA.PDH.N.AR_365$date=="2012-09-28"] <- NA
#### 365 to 730 days (2YR)
MOA.PDH.N.AR_2YR <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 365 to 730 days (1 to 2 YRS)")
MOA.PDH.N.AR_2YR$lag <- lag(MOA.PDH.N.AR_2YR$value)
MOA.PDH.N.AR_2YR$diff <- MOA.PDH.N.AR_2YR$value - MOA.PDH.N.AR_2YR$lag
MOA.PDH.N.AR_2YR$diffpc <- round((MOA.PDH.N.AR_2YR$diff/MOA.PDH.N.AR_2YR$lag),digits=4)*100
MOA.PDH.N.AR_2YR$lag[MOA.PDH.N.AR_2YR$date=="2012-09-28"] <- NA
MOA.PDH.N.AR_2YR$diff[MOA.PDH.N.AR_2YR$date=="2012-09-28"] <- NA
MOA.PDH.N.AR_2YR$diffpc[MOA.PDH.N.AR_2YR$date=="2012-09-28"] <- NA
#### 2 to 5 YR
MOA.PDH.N.AR_5YR <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 2 to 5 yrs")
MOA.PDH.N.AR_5YR$lag <- lag(MOA.PDH.N.AR_5YR$value)
MOA.PDH.N.AR_5YR$diff <- MOA.PDH.N.AR_5YR$value - MOA.PDH.N.AR_5YR$lag
MOA.PDH.N.AR_5YR$diffpc <- round((MOA.PDH.N.AR_5YR$diff/MOA.PDH.N.AR_5YR$lag),digits=4)*100
MOA.PDH.N.AR_5YR$lag[MOA.PDH.N.AR_5YR$date=="2019-09-30"] <- NA
MOA.PDH.N.AR_5YR$diff[MOA.PDH.N.AR_5YR$date=="2019-09-30"] <- NA
MOA.PDH.N.AR_5YR$diffpc[MOA.PDH.N.AR_5YR$date=="2019-09-30"] <- NA
#### 5 to 10 YR
MOA.PDH.N.AR_10YR <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 5 to 10 yrs")
MOA.PDH.N.AR_10YR$lag <- lag(MOA.PDH.N.AR_10YR$value)
MOA.PDH.N.AR_10YR$diff <- MOA.PDH.N.AR_10YR$value - MOA.PDH.N.AR_10YR$lag
MOA.PDH.N.AR_10YR$diffpc <- round((MOA.PDH.N.AR_10YR$diff/MOA.PDH.N.AR_10YR$lag),digits=4)*100
MOA.PDH.N.AR_10YR$lag[MOA.PDH.N.AR_10YR$date=="2019-09-30"] <- NA
MOA.PDH.N.AR_10YR$diff[MOA.PDH.N.AR_10YR$date=="2019-09-30"] <- NA
MOA.PDH.N.AR_10YR$diffpc[MOA.PDH.N.AR_10YR$date=="2019-09-30"] <- NA
#### 10 YR Plus
MOA.PDH.N.AR_10PLUS <- MOA.PDH.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - over 10 yrs")
MOA.PDH.N.AR_10PLUS$lag <- lag(MOA.PDH.N.AR_10PLUS$value)
MOA.PDH.N.AR_10PLUS$diff <- MOA.PDH.N.AR_10PLUS$value - MOA.PDH.N.AR_10PLUS$lag
MOA.PDH.N.AR_10PLUS$diffpc <- round((MOA.PDH.N.AR_10PLUS$diff/MOA.PDH.N.AR_10PLUS$lag),digits=4)*100
MOA.PDH.N.AR_10PLUS$lag[MOA.PDH.N.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.PDH.N.AR_10PLUS$diff[MOA.PDH.N.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.PDH.N.AR_10PLUS$diffpc[MOA.PDH.N.AR_10PLUS$date=="2019-09-30"] <- NA
### BTL
#### Total
MOA.BTL.N.AR_T <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears")
MOA.BTL.N.AR_T$lag <- lag(MOA.BTL.N.AR_T$value)
MOA.BTL.N.AR_T$diff <- MOA.BTL.N.AR_T$value - MOA.BTL.N.AR_T$lag
MOA.BTL.N.AR_T$diffpc <- round((MOA.BTL.N.AR_T$diff/MOA.BTL.N.AR_T$lag),digits=4)*100
MOA.BTL.N.AR_T$lag[MOA.BTL.N.AR_T$date=="2012-06-29"] <- NA
MOA.BTL.N.AR_T$diff[MOA.BTL.N.AR_T$date=="2012-06-29"] <- NA
MOA.BTL.N.AR_T$diffpc[MOA.BTL.N.AR_T$date=="2012-06-29"] <- NA
#### up to 90 days
MOA.BTL.N.AR_90 <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - up to 90 days")
MOA.BTL.N.AR_90$lag <- lag(MOA.BTL.N.AR_90$value)
MOA.BTL.N.AR_90$diff <- MOA.BTL.N.AR_90$value - MOA.BTL.N.AR_90$lag
MOA.BTL.N.AR_90$diffpc <- round((MOA.BTL.N.AR_90$diff/MOA.BTL.N.AR_90$lag),digits=4)*100
MOA.BTL.N.AR_90$lag[MOA.BTL.N.AR_90$date=="2012-06-29"] <- NA
MOA.BTL.N.AR_90$diff[MOA.BTL.N.AR_90$date=="2012-06-29"] <- NA
MOA.BTL.N.AR_90$diffpc[MOA.BTL.N.AR_90$date=="2012-06-29"] <- NA
#### 91 to 180 days
MOA.BTL.N.AR_180 <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 91 to 180 days")
MOA.BTL.N.AR_180$lag <- lag(MOA.BTL.N.AR_180$value)
MOA.BTL.N.AR_180$diff <- MOA.BTL.N.AR_180$value - MOA.BTL.N.AR_180$lag
MOA.BTL.N.AR_180$diffpc <- round((MOA.BTL.N.AR_180$diff/MOA.BTL.N.AR_180$lag),digits=4)*100
MOA.BTL.N.AR_180$lag[MOA.BTL.N.AR_180$date=="2012-06-29"] <- NA
MOA.BTL.N.AR_180$diff[MOA.BTL.N.AR_180$date=="2012-06-29"] <- NA
MOA.BTL.N.AR_180$diffpc[MOA.BTL.N.AR_180$date=="2012-06-29"] <- NA
#### 181 to 365 days
MOA.BTL.N.AR_365 <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 181 to 365 days")
MOA.BTL.N.AR_365$lag <- lag(MOA.BTL.N.AR_365$value)
MOA.BTL.N.AR_365$diff <- MOA.BTL.N.AR_365$value - MOA.BTL.N.AR_365$lag
MOA.BTL.N.AR_365$diffpc <- round((MOA.BTL.N.AR_365$diff/MOA.BTL.N.AR_365$lag),digits=4)*100
MOA.BTL.N.AR_365$lag[MOA.BTL.N.AR_365$date=="2012-09-28"] <- NA
MOA.BTL.N.AR_365$diff[MOA.BTL.N.AR_365$date=="2012-09-28"] <- NA
MOA.BTL.N.AR_365$diffpc[MOA.BTL.N.AR_365$date=="2012-09-28"] <- NA
#### 365 to 730 days (2YR)
MOA.BTL.N.AR_2YR <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 365 to 730 days (1 to 2 YRS)")
MOA.BTL.N.AR_2YR$lag <- lag(MOA.BTL.N.AR_2YR$value)
MOA.BTL.N.AR_2YR$diff <- MOA.BTL.N.AR_2YR$value - MOA.BTL.N.AR_2YR$lag
MOA.BTL.N.AR_2YR$diffpc <- round((MOA.BTL.N.AR_2YR$diff/MOA.BTL.N.AR_2YR$lag),digits=4)*100
MOA.BTL.N.AR_2YR$lag[MOA.BTL.N.AR_2YR$date=="2012-09-28"] <- NA
MOA.BTL.N.AR_2YR$diff[MOA.BTL.N.AR_2YR$date=="2012-09-28"] <- NA
MOA.BTL.N.AR_2YR$diffpc[MOA.BTL.N.AR_2YR$date=="2012-09-28"] <- NA
#### 2 to 5 YR
MOA.BTL.N.AR_5YR <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 2 to 5 yrs")
MOA.BTL.N.AR_5YR$lag <- lag(MOA.BTL.N.AR_5YR$value)
MOA.BTL.N.AR_5YR$diff <- MOA.BTL.N.AR_5YR$value - MOA.BTL.N.AR_5YR$lag
MOA.BTL.N.AR_5YR$diffpc <- round((MOA.BTL.N.AR_5YR$diff/MOA.BTL.N.AR_5YR$lag),digits=4)*100
MOA.BTL.N.AR_5YR$lag[MOA.BTL.N.AR_5YR$date=="2019-09-30"] <- NA
MOA.BTL.N.AR_5YR$diff[MOA.BTL.N.AR_5YR$date=="2019-09-30"] <- NA
MOA.BTL.N.AR_5YR$diffpc[MOA.BTL.N.AR_5YR$date=="2019-09-30"] <- NA
#### 5 to 10 YR
MOA.BTL.N.AR_10YR <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 5 to 10 yrs")
MOA.BTL.N.AR_10YR$lag <- lag(MOA.BTL.N.AR_10YR$value)
MOA.BTL.N.AR_10YR$diff <- MOA.BTL.N.AR_10YR$value - MOA.BTL.N.AR_10YR$lag
MOA.BTL.N.AR_10YR$diffpc <- round((MOA.BTL.N.AR_10YR$diff/MOA.BTL.N.AR_10YR$lag),digits=4)*100
MOA.BTL.N.AR_10YR$lag[MOA.BTL.N.AR_10YR$date=="2019-09-30"] <- NA
MOA.BTL.N.AR_10YR$diff[MOA.BTL.N.AR_10YR$date=="2019-09-30"] <- NA
MOA.BTL.N.AR_10YR$diffpc[MOA.BTL.N.AR_10YR$date=="2019-09-30"] <- NA
#### 10 YR Plus
MOA.BTL.N.AR_10PLUS <- MOA.BTL.N.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - over 10 yrs")
MOA.BTL.N.AR_10PLUS$lag <- lag(MOA.BTL.N.AR_10PLUS$value)
MOA.BTL.N.AR_10PLUS$diff <- MOA.BTL.N.AR_10PLUS$value - MOA.BTL.N.AR_10PLUS$lag
MOA.BTL.N.AR_10PLUS$diffpc <- round((MOA.BTL.N.AR_10PLUS$diff/MOA.BTL.N.AR_10PLUS$lag),digits=4)*100
MOA.BTL.N.AR_10PLUS$lag[MOA.BTL.N.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.BTL.N.AR_10PLUS$diff[MOA.BTL.N.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.BTL.N.AR_10PLUS$diffpc[MOA.BTL.N.AR_10PLUS$date=="2019-09-30"] <- NA
## B: Arrears (2) Balance € (000)
MOA.PDH.B.AR <- MOA.PDH.B %>%
filter(Category == "Arrears")
MOA.BTL.B.AR <- MOA.BTL.B %>%
filter(Category == "Arrears")
### PDH
#### Total
MOA.PDH.B.AR_T <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears")
MOA.PDH.B.AR_T$lag <- lag(MOA.PDH.B.AR_T$value)
MOA.PDH.B.AR_T$diff <- MOA.PDH.B.AR_T$value - MOA.PDH.B.AR_T$lag
MOA.PDH.B.AR_T$diffpc <- round((MOA.PDH.B.AR_T$diff/MOA.PDH.B.AR_T$lag),digits=4)*100
MOA.PDH.B.AR_T$lag[MOA.PDH.B.AR_T$date=="2009-09-30"] <- NA
MOA.PDH.B.AR_T$diff[MOA.PDH.B.AR_T$date=="2009-09-30"] <- NA
MOA.PDH.B.AR_T$diffpc[MOA.PDH.B.AR_T$date=="2009-09-30"] <- NA
#### up to 90 days
MOA.PDH.B.AR_90 <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - up to 90 days")
MOA.PDH.B.AR_90$lag <- lag(MOA.PDH.B.AR_90$value)
MOA.PDH.B.AR_90$diff <- MOA.PDH.B.AR_90$value - MOA.PDH.B.AR_90$lag
MOA.PDH.B.AR_90$diffpc <- round((MOA.PDH.B.AR_90$diff/MOA.PDH.B.AR_90$lag),digits=4)*100
MOA.PDH.B.AR_90$lag[MOA.PDH.B.AR_90$date=="2009-09-30"] <- NA
MOA.PDH.B.AR_90$diff[MOA.PDH.B.AR_90$date=="2009-09-30"] <- NA
MOA.PDH.B.AR_90$diffpc[MOA.PDH.B.AR_90$date=="2009-09-30"] <- NA
#### 91 to 180 days
MOA.PDH.B.AR_180 <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 91 to 180 days")
MOA.PDH.B.AR_180$lag <- lag(MOA.PDH.B.AR_180$value)
MOA.PDH.B.AR_180$diff <- MOA.PDH.B.AR_180$value - MOA.PDH.B.AR_180$lag
MOA.PDH.B.AR_180$diffpc <- round((MOA.PDH.B.AR_180$diff/MOA.PDH.B.AR_180$lag),digits=4)*100
MOA.PDH.B.AR_180$lag[MOA.PDH.B.AR_180$date=="2009-09-30"] <- NA
MOA.PDH.B.AR_180$diff[MOA.PDH.B.AR_180$date=="2009-09-30"] <- NA
MOA.PDH.B.AR_180$diffpc[MOA.PDH.B.AR_180$date=="2009-09-30"] <- NA
#### 181 to 365 days
MOA.PDH.B.AR_365 <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 181 to 365 days")
MOA.PDH.B.AR_365$lag <- lag(MOA.PDH.B.AR_365$value)
MOA.PDH.B.AR_365$diff <- MOA.PDH.B.AR_365$value - MOA.PDH.B.AR_365$lag
MOA.PDH.B.AR_365$diffpc <- round((MOA.PDH.B.AR_365$diff/MOA.PDH.B.AR_365$lag),digits=4)*100
MOA.PDH.B.AR_365$lag[MOA.PDH.B.AR_365$date=="2012-09-28"] <- NA
MOA.PDH.B.AR_365$diff[MOA.PDH.B.AR_365$date=="2012-09-28"] <- NA
MOA.PDH.B.AR_365$diffpc[MOA.PDH.B.AR_365$date=="2012-09-28"] <- NA
#### 365 to 730 days (2YR)
MOA.PDH.B.AR_2YR <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 365 to 730 days (1 to 2 YRS)")
MOA.PDH.B.AR_2YR$lag <- lag(MOA.PDH.B.AR_2YR$value)
MOA.PDH.B.AR_2YR$diff <- MOA.PDH.B.AR_2YR$value - MOA.PDH.B.AR_2YR$lag
MOA.PDH.B.AR_2YR$diffpc <- round((MOA.PDH.B.AR_2YR$diff/MOA.PDH.B.AR_2YR$lag),digits=4)*100
MOA.PDH.B.AR_2YR$lag[MOA.PDH.B.AR_2YR$date=="2012-09-28"] <- NA
MOA.PDH.B.AR_2YR$diff[MOA.PDH.B.AR_2YR$date=="2012-09-28"] <- NA
MOA.PDH.B.AR_2YR$diffpc[MOA.PDH.B.AR_2YR$date=="2012-09-28"] <- NA
#### 2 to 5 YR
MOA.PDH.B.AR_5YR <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 2 to 5 yrs")
MOA.PDH.B.AR_5YR$lag <- lag(MOA.PDH.B.AR_5YR$value)
MOA.PDH.B.AR_5YR$diff <- MOA.PDH.B.AR_5YR$value - MOA.PDH.B.AR_5YR$lag
MOA.PDH.B.AR_5YR$diffpc <- round((MOA.PDH.B.AR_5YR$diff/MOA.PDH.B.AR_5YR$lag),digits=4)*100
MOA.PDH.B.AR_5YR$lag[MOA.PDH.B.AR_5YR$date=="2019-09-30"] <- NA
MOA.PDH.B.AR_5YR$diff[MOA.PDH.B.AR_5YR$date=="2019-09-30"] <- NA
MOA.PDH.B.AR_5YR$diffpc[MOA.PDH.B.AR_5YR$date=="2019-09-30"] <- NA
#### 5 to 10 YR
MOA.PDH.B.AR_10YR <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 5 to 10 yrs")
MOA.PDH.B.AR_10YR$lag <- lag(MOA.PDH.B.AR_10YR$value)
MOA.PDH.B.AR_10YR$diff <- MOA.PDH.B.AR_10YR$value - MOA.PDH.B.AR_10YR$lag
MOA.PDH.B.AR_10YR$diffpc <- round((MOA.PDH.B.AR_10YR$diff/MOA.PDH.B.AR_10YR$lag),digits=4)*100
MOA.PDH.B.AR_10YR$lag[MOA.PDH.B.AR_10YR$date=="2019-09-30"] <- NA
MOA.PDH.B.AR_10YR$diff[MOA.PDH.B.AR_10YR$date=="2019-09-30"] <- NA
MOA.PDH.B.AR_10YR$diffpc[MOA.PDH.B.AR_10YR$date=="2019-09-30"] <- NA
#### 10 YR Plus
MOA.PDH.B.AR_10PLUS <- MOA.PDH.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - over 10 yrs")
MOA.PDH.B.AR_10PLUS$lag <- lag(MOA.PDH.B.AR_10PLUS$value)
MOA.PDH.B.AR_10PLUS$diff <- MOA.PDH.B.AR_10PLUS$value - MOA.PDH.B.AR_10PLUS$lag
MOA.PDH.B.AR_10PLUS$diffpc <- round((MOA.PDH.B.AR_10PLUS$diff/MOA.PDH.B.AR_10PLUS$lag),digits=4)*100
MOA.PDH.B.AR_10PLUS$lag[MOA.PDH.B.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.PDH.B.AR_10PLUS$diff[MOA.PDH.B.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.PDH.B.AR_10PLUS$diffpc[MOA.PDH.B.AR_10PLUS$date=="2019-09-30"] <- NA
### BTL
#### Total
MOA.BTL.B.AR_T <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears")
MOA.BTL.B.AR_T$lag <- lag(MOA.BTL.B.AR_T$value)
MOA.BTL.B.AR_T$diff <- MOA.BTL.B.AR_T$value - MOA.BTL.B.AR_T$lag
MOA.BTL.B.AR_T$diffpc <- round((MOA.BTL.B.AR_T$diff/MOA.BTL.B.AR_T$lag),digits=4)*100
MOA.BTL.B.AR_T$lag[MOA.BTL.B.AR_T$date=="2012-06-29"] <- NA
MOA.BTL.B.AR_T$diff[MOA.BTL.B.AR_T$date=="2012-06-29"] <- NA
MOA.BTL.B.AR_T$diffpc[MOA.BTL.B.AR_T$date=="2012-06-29"] <- NA
#### up to 90 days
MOA.BTL.B.AR_90 <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - up to 90 days")
MOA.BTL.B.AR_90$lag <- lag(MOA.BTL.B.AR_90$value)
MOA.BTL.B.AR_90$diff <- MOA.BTL.B.AR_90$value - MOA.BTL.B.AR_90$lag
MOA.BTL.B.AR_90$diffpc <- round((MOA.BTL.B.AR_90$diff/MOA.BTL.B.AR_90$lag),digits=4)*100
MOA.BTL.B.AR_90$lag[MOA.BTL.B.AR_90$date=="2012-06-29"] <- NA
MOA.BTL.B.AR_90$diff[MOA.BTL.B.AR_90$date=="2012-06-29"] <- NA
MOA.BTL.B.AR_90$diffpc[MOA.BTL.B.AR_90$date=="2012-06-29"] <- NA
#### 91 to 180 days
MOA.BTL.B.AR_180 <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 91 to 180 days")
MOA.BTL.B.AR_180$lag <- lag(MOA.BTL.B.AR_180$value)
MOA.BTL.B.AR_180$diff <- MOA.BTL.B.AR_180$value - MOA.BTL.B.AR_180$lag
MOA.BTL.B.AR_180$diffpc <- round((MOA.BTL.B.AR_180$diff/MOA.BTL.B.AR_180$lag),digits=4)*100
MOA.BTL.B.AR_180$lag[MOA.BTL.B.AR_180$date=="2012-06-29"] <- NA
MOA.BTL.B.AR_180$diff[MOA.BTL.B.AR_180$date=="2012-06-29"] <- NA
MOA.BTL.B.AR_180$diffpc[MOA.BTL.B.AR_180$date=="2012-06-29"] <- NA
#### 181 to 365 days
MOA.BTL.B.AR_365 <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 181 to 365 days")
MOA.BTL.B.AR_365$lag <- lag(MOA.BTL.B.AR_365$value)
MOA.BTL.B.AR_365$diff <- MOA.BTL.B.AR_365$value - MOA.BTL.B.AR_365$lag
MOA.BTL.B.AR_365$diffpc <- round((MOA.BTL.B.AR_365$diff/MOA.BTL.B.AR_365$lag),digits=4)*100
MOA.BTL.B.AR_365$lag[MOA.BTL.B.AR_365$date=="2012-09-28"] <- NA
MOA.BTL.B.AR_365$diff[MOA.BTL.B.AR_365$date=="2012-09-28"] <- NA
MOA.BTL.B.AR_365$diffpc[MOA.BTL.B.AR_365$date=="2012-09-28"] <- NA
#### 365 to 730 days (2YR)
MOA.BTL.B.AR_2YR <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 365 to 730 days (1 to 2 YRS)")
MOA.BTL.B.AR_2YR$lag <- lag(MOA.BTL.B.AR_2YR$value)
MOA.BTL.B.AR_2YR$diff <- MOA.BTL.B.AR_2YR$value - MOA.BTL.B.AR_2YR$lag
MOA.BTL.B.AR_2YR$diffpc <- round((MOA.BTL.B.AR_2YR$diff/MOA.BTL.B.AR_2YR$lag),digits=4)*100
MOA.BTL.B.AR_2YR$lag[MOA.BTL.B.AR_2YR$date=="2012-09-28"] <- NA
MOA.BTL.B.AR_2YR$diff[MOA.BTL.B.AR_2YR$date=="2012-09-28"] <- NA
MOA.BTL.B.AR_2YR$diffpc[MOA.BTL.B.AR_2YR$date=="2012-09-28"] <- NA
#### 2 to 5 YR
MOA.BTL.B.AR_5YR <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 2 to 5 yrs")
MOA.BTL.B.AR_5YR$lag <- lag(MOA.BTL.B.AR_5YR$value)
MOA.BTL.B.AR_5YR$diff <- MOA.BTL.B.AR_5YR$value - MOA.BTL.B.AR_5YR$lag
MOA.BTL.B.AR_5YR$diffpc <- round((MOA.BTL.B.AR_5YR$diff/MOA.BTL.B.AR_5YR$lag),digits=4)*100
MOA.BTL.B.AR_5YR$lag[MOA.BTL.B.AR_5YR$date=="2019-09-30"] <- NA
MOA.BTL.B.AR_5YR$diff[MOA.BTL.B.AR_5YR$date=="2019-09-30"] <- NA
MOA.BTL.B.AR_5YR$diffpc[MOA.BTL.B.AR_5YR$date=="2019-09-30"] <- NA
#### 5 to 10 YR
MOA.BTL.B.AR_10YR <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - 5 to 10 yrs")
MOA.BTL.B.AR_10YR$lag <- lag(MOA.BTL.B.AR_10YR$value)
MOA.BTL.B.AR_10YR$diff <- MOA.BTL.B.AR_10YR$value - MOA.BTL.B.AR_10YR$lag
MOA.BTL.B.AR_10YR$diffpc <- round((MOA.BTL.B.AR_10YR$diff/MOA.BTL.B.AR_10YR$lag),digits=4)*100
MOA.BTL.B.AR_10YR$lag[MOA.BTL.B.AR_10YR$date=="2019-09-30"] <- NA
MOA.BTL.B.AR_10YR$diff[MOA.BTL.B.AR_10YR$date=="2019-09-30"] <- NA
MOA.BTL.B.AR_10YR$diffpc[MOA.BTL.B.AR_10YR$date=="2019-09-30"] <- NA
#### 10 YR Plus
MOA.BTL.B.AR_10PLUS <- MOA.BTL.B.AR %>%
filter(Sub.Category == "Arrears: Total mortgage accounts in arrears - over 10 yrs")
MOA.BTL.B.AR_10PLUS$lag <- lag(MOA.BTL.B.AR_10PLUS$value)
MOA.BTL.B.AR_10PLUS$diff <- MOA.BTL.B.AR_10PLUS$value - MOA.BTL.B.AR_10PLUS$lag
MOA.BTL.B.AR_10PLUS$diffpc <- round((MOA.BTL.B.AR_10PLUS$diff/MOA.BTL.B.AR_10PLUS$lag),digits=4)*100
MOA.BTL.B.AR_10PLUS$lag[MOA.BTL.B.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.BTL.B.AR_10PLUS$diff[MOA.BTL.B.AR_10PLUS$date=="2019-09-30"] <- NA
MOA.BTL.B.AR_10PLUS$diffpc[MOA.BTL.B.AR_10PLUS$date=="2019-09-30"] <- NA
## B: Repossessions
## C: Restructures
# Step 3. Total Bank & Non-bank to group by subcategory then facet by "Format" [BTL / PDH]
MOA.SUM.B.AR <- MOA %>%
filter(Unit =="Balance € (000)") %>%
filter(Category == "Arrears") %>%
filter(Sub.Category != "Arrears: Total mortgage accounts in arrears")
MOA.SUM.B.AR <- MOA.SUM.B.AR %>%
group_by(Format,date,Sub.Category,Unit)%>%
summarise(total=sum(value))
#########################################
options(scipen = 999)
######## Number
############ PDH
################ Figure 1 # KEEP
Fig1A <- ggplot(MOA.PDH.N.AR_T,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Total mortgage accounts in arrears")
Fig1B <- ggplot(MOA.PDH.N.AR_T,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig1 <- Fig1A + Fig1B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 2 # KEEP
Fig2A <- ggplot(MOA.PDH.N.AR_90,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: up to 90 days")
Fig2B <- ggplot(MOA.PDH.N.AR_90,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig2 <- Fig2A + Fig2B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 3
Fig3A <- ggplot(MOA.PDH.N.AR_180,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 91 to 180 days")
Fig3B <- ggplot(MOA.PDH.N.AR_180,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig3 <- Fig3A + Fig3B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 4 # KEEP
Fig4A <- ggplot(MOA.PDH.N.AR_365,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 180 to 365 days")
Fig4B <- ggplot(MOA.PDH.N.AR_365,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig4 <- Fig4A + Fig4B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 5
Fig5A <- ggplot(MOA.PDH.N.AR_2YR,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 365 to 730 days (1 to 2 years)")
Fig5B <- ggplot(MOA.PDH.N.AR_2YR,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig5 <- Fig5A + Fig5B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 6 # KEEP
Fig6A <- ggplot(MOA.PDH.N.AR_5YR,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 2 to 5 years")
Fig6B <- ggplot(MOA.PDH.N.AR_5YR,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig6 <- Fig6A + Fig6B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 7
Fig7A <- ggplot(MOA.PDH.N.AR_10YR,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 5 to 10 years")
Fig7B <- ggplot(MOA.PDH.N.AR_10YR,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig7 <- Fig7A + Fig7B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 8
Fig8A <- ggplot(MOA.PDH.N.AR_10PLUS,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Principal Residences (PDH)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: over 10 years")
Fig8B <- ggplot(MOA.PDH.N.AR_10PLUS,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig8 <- Fig8A + Fig8B + plot_layout(nrow=2,heights=c(2,1))
############ BTL
################ Figure 9 # KEEP
Fig9A <- ggplot(MOA.BTL.N.AR_T,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Total mortgage accounts in arrears")
Fig9B <- ggplot(MOA.BTL.N.AR_T,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig9 <- Fig9A + Fig9B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 10 # KEEP
Fig10A <- ggplot(MOA.BTL.N.AR_90,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: up to 90 days")
Fig10B <- ggplot(MOA.BTL.N.AR_90,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig10 <- Fig10A + Fig10B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 11
Fig11A <- ggplot(MOA.BTL.N.AR_180,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 91 to 180 days")
Fig11B <- ggplot(MOA.BTL.N.AR_180,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig11 <- Fig11A + Fig11B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 12 # KEEP
Fig12A <- ggplot(MOA.BTL.N.AR_365,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 180 to 365 days")
Fig12B <- ggplot(MOA.BTL.N.AR_365,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig12 <- Fig12A + Fig12B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 13
Fig13A <- ggplot(MOA.BTL.N.AR_2YR,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 365 to 730 days (1 to 2 years)")
Fig13B <- ggplot(MOA.BTL.N.AR_2YR,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig13 <- Fig13A + Fig13B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 14 # KEEP
Fig14A <- ggplot(MOA.BTL.N.AR_5YR,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 2 to 5 years")
Fig14B <- ggplot(MOA.BTL.N.AR_5YR,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig14 <- Fig14A + Fig14B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 15
Fig15A <- ggplot(MOA.BTL.N.AR_10YR,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: 5 to 10 years")
Fig15B <- ggplot(MOA.BTL.N.AR_10YR,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig15 <- Fig15A + Fig15B + plot_layout(nrow=2,heights=c(2,1))
################ Figure 16
Fig16A <- ggplot(MOA.BTL.N.AR_10PLUS,aes(x=date,y=value,group=Entity.Group,colour=Entity.Group))+
geom_line(alpha=0.6,size=1.25)+
geom_text_repel(aes(label=value),size=2.75)+
theme_bw()+
theme(legend.position = "none") +
ggtitle("Mortgage Arrears - Buy to Let (BTL)")+
ylab("Number of accounts")+
xlab(NULL)+
labs(subtitle = "Accounts in arrears: over 10 years")
Fig16B <- ggplot(MOA.BTL.N.AR_10PLUS,aes(x=date,y=diffpc,group=Entity.Group,colour=Entity.Group,fill=Entity.Group))+
geom_col(alpha=0.2)+
geom_text_repel(aes(label=diffpc),size=2.75)+
theme_bw()+
theme(legend.position = "bottom") +
ylab("Percentage")+
labs(caption = "Source: Central Bank of Ireland")
Fig16 <- Fig16A + Fig16B + plot_layout(nrow=2,heights=c(2,1))
######################## Create Panels
Fig.Tot <- Fig1A + Fig9A + Fig1B + Fig9B + plot_layout(heights = c(2,1)) # keep
Fig.90 <- Fig2A + Fig10A + Fig2B + Fig10B + plot_layout(heights = c(2,1)) # keep
Fig.180 <- Fig3A + Fig11A + Fig3B + Fig11B + plot_layout(heights = c(2,1))
Fig.365 <- Fig4A + Fig12A + Fig4B + Fig12B + plot_layout(heights = c(2,1))
Fig.2YR <- Fig5A + Fig13A + Fig5B + Fig13B + plot_layout(heights = c(2,1)) # keep
Fig.5YR <- Fig6A + Fig14A + Fig6B + Fig14B + plot_layout(heights = c(2,1))
Fig.10YR <- Fig7A + Fig15A + Fig7B + Fig15B + plot_layout(heights = c(2,1))
Fig.10PLUS <- Fig8A + Fig15A + Fig8B + Fig15B + plot_layout(heights = c(2,1))
Fig.Tot
Fig.90
Fig.2YR
Without stating the obvious given the volatile nature of the data for Non Performing Loans (NPL) in Ireland, the international trends will likely be informative.
# Load data from FRED https://fred.stlouisfed.org/series/DDSI02IEA156NWDB
## API KEY
fredr_set_key("8ad77f66768f9eb1e07da54d943df8f0")
## Bank Non-Performing Loans to Gross Loans
###for Ireland
NPL.IE<-fredr(series_id = "DDSI02IEA156NWDB",
observation_start = as.Date("1998-01-01"),
observation_end = as.Date("2019-01-01"))
###for Germany
NPL.DE<-fredr(series_id = "DDSI02DEA156NWDB",
observation_start = as.Date("1998-01-01"),
observation_end = as.Date("2019-01-01"))
###for USA
NPL.US<-fredr(series_id = "DDSI02USA156NWDB",
observation_start = as.Date("1998-01-01"),
observation_end = as.Date("2019-01-01"))
###for Italy
NPL.IT<-fredr(series_id = "DDSI02ITA156NWDB",
observation_start = as.Date("1998-01-01"),
observation_end = as.Date("2019-01-01"))
###for UK
NPL.UK<-fredr(series_id = "DDSI02GBA156NWDB",
observation_start = as.Date("1998-01-01"),
observation_end = as.Date("2019-01-01"))
###for France
NPL.FR<-fredr(series_id = "DDSI02FRA156NWDB",
observation_start = as.Date("1998-01-01"),
observation_end = as.Date("2019-01-01"))
### Bind NPL
NPL.IE$country <- "IE"
NPL.DE$country <- "DE"
NPL.FR$country <- "FR"
NPL.IT$country <- "IT"
NPL.UK$country <- "UK"
NPL.US$country <- "US"
NPL.1 <- rbind(NPL.IE,NPL.DE,NPL.FR,NPL.IT,NPL.UK,NPL.US)
ggplot(NPL.1,aes(x=date,y=value,group=country,colour=country))+
geom_line()+
theme_bw()+
geom_text_repel(aes(label=round(value,2)),size=2.75,colour="#666666")+
theme(legend.position="none")+
ggtitle("Bank Non-Performing Loans to Gross Loans")+
ylab("percent")+
xlab("year")+facet_wrap(~country,ncol=2)+
labs(caption = "Source: FRED")
Eurostat: Harmonized Index of Consumer Prices, i.e. Inflation. Latest flash estimates from Friday for Germany, France and Ireland. Euro Area 19 also included, latest value for the prior month.
search <- search_eurostat("HICP",type="table")
HICP <- get_eurostat("teicp000",time_format = "date")
HICP <- HICP %>%
filter(unit=="PCH_M12") %>%
filter(geo=="IE"|geo=="DE"|geo=="FR"|geo=="EA19")
HICP_max <- HICP %>%
group_by(geo)%>%
slice(which.max(time))
HICP_max$tag <- paste(as.character(HICP_max$time), "-", comma(HICP_max$values))
HICP %>%
ggplot(aes(x=time,y=values,colour=geo))+
geom_line()+scale_color_manual(values=c('#FFCE00','navy',"#0055A4","darkgreen"))+
geom_text_repel(data=HICP_max,aes(label=tag),size=2.75,colour="black")+
geom_hline(yintercept = 2, colour = "blue",alpha=0.7,linetype="dotted")+
theme_bw()+
theme(legend.position = "bottom")+
labs(caption="blue dotted line is the 2% target")+
facet_wrap(~geo,ncol=2)
See below, top panel shows the aggregate Estimated Inflation. The heat map on the bottom panel shows estimated inflation by income decile. So for example in the sample the 2nd declie was experiencing 7.5 inflation 3 months ahead of the 8th to 10th decile.
Note the CSO data for estimated inflation is two months behind the HICP data from Eurostat. So the early signs which may signal leveling off is not seen below.
# Load
EIHC01 <- cso_get_data("EIHC01")
EIHC01 <- EIHC01 %>%
pivot_longer(!1:2, names_to = "year_month")
EIHC01$Decile_Nr <- extract_numeric(EIHC01$Household.Income.Decile)
EIHC01$Year <-substr(EIHC01$year_month,1,4)
EIHC01$Month <- sub(".* ", "", EIHC01$year_month)
EIHC01$Month_NR <- as.integer(factor(EIHC01$Month, levels=month.name))
EIHC01$Date <- as.yearmon(paste(EIHC01$Year, EIHC01$Month_NR), "%Y %m")
# Subset
EIHC01.1 <- EIHC01 %>%
filter(Statistic=="Consumer Price Index (Base December 2016=100)")
EIHC01.2 <- EIHC01 %>%
filter(Statistic=="Percentage change over 12 months for Consumer Price Index")
EIHC01.2 <- EIHC01.2 %>%
filter(Date >= "Dec 2017")
EIHC01.1A<- EIHC01.1 %>%
filter(Household.Income.Decile=="All deciles")
EIHC01.1B<- EIHC01.1 %>%
filter(Household.Income.Decile!="All deciles")
EIHC01.2A<- EIHC01.2 %>%
filter(Household.Income.Decile=="All deciles")
EIHC01.2B<- EIHC01.2 %>%
filter(Household.Income.Decile!="All deciles")
# Plot
HeatMap.1 <- EIHC01.2B %>%
ggplot(aes(x = Date))+
geom_raster(aes(y = Household.Income.Decile,fill=value,alpha=0.7))+
theme_bw()+
scale_fill_stepsn(colours = c("black", "darkgreen", "red"),n.breaks=5,
values = scales::rescale(c(-1,2,8)))
Fig.1 <- EIHC01.2A %>%
ggplot(aes(x=Date,y=value))+
geom_line(colour="navy")+
geom_hline(yintercept=0,colour="black",linetype=2,alpha=0.75)+
geom_hline(yintercept=2,colour="black",linetype=1,alpha=0.25)+
theme_bw()+
ggtitle("Estimated Inflation: Percentage Change Year on Year")+
ylab("%")+
xlab(NULL)+
labs(subtitle = "CSO: EIHC01")
# 3 D plot: https://www.tylermw.com/3d-ggplots-with-rayshader/
## remotes::install_github("tylermorganwall/rayshader")
#library(rayshader)
HeatMap_3D.1 <- EIHC01.2B %>%
ggplot(aes(x = Date))+
geom_raster(aes(y = Household.Income.Decile,fill=value))+
theme_bw()+
scale_fill_stepsn(colours = c("black", "darkgreen", "red"),n.breaks=5,
values = scales::rescale(c(-1,2,8)))+
ggtitle("Estimated Inflation: by Income Decile")
#plot_gg(HeatMap_3D.1, multicore=TRUE,height=5,width=6,scale=500, windowsize = c(1200,750), sunangle=225,
# zoom = 0.55, phi = 50, theta = 30)
#render_snapshot("EIHC01.2B_30.09.png", clear = TRUE)
Facet1 <- Fig.1 + HeatMap.1 + plot_layout(nrow = 2,heights = c(1,4))
Facet1
Estimated Inflation by Decile - 3D Heatmap
Global “Real” House Price Indices
The Bank of International Settlements (BIS) - an intermediary for Central Banks, publishes house price indicies for countries and regions worldwide. The “Real” Property Price Index (RRPP), which I have accessed through the Federal Reserves database (FRED), deflates the series by CPI.
BIS reports on the RRPP can be found through this link.
I’ve taken a selection of countries and regions to begin reviewing the series. Going forward I will look for Sweden, Switzerland, New Zealand and Canada. - This is so we can view many markets with different central banks, and therefore different rate hiking environments. For now see below the entire series for each of the regions I’ve taken so far. The latest quarterly observation for each can be seen printed in each panel, note the time lag and that not all regions are from the same quarter.
The advantage of looking at the CPI deflated figure can be seen by looking at Ireland. Note we are not at “Celtic Tiger” levels in this series, which is a common headline which we see in the media.
That is not to say that the media is misleading (in this instance) as it true as per the CSO price index (See “first graph through this link”House Price Index from the last issue).
# Real Residential Property Prices
# Coverage includes all types of existing dwellings in the whole country. The series is deflated using CPI.
# For more information, please see https://www.bis.org/statistics/pp_detailed.htm.
# Any use of the series shall be cited as follows: "Sources: National sources, BIS Residential Property Price database, http://www.bis.org/statistics/pp.htm."
# Load data from FRED https://fred.stlouisfed.org/series/DDSI02IEA156NWDB
## API KEY
fredr_set_key("8ad77f66768f9eb1e07da54d943df8f0")
########################### convert the "628" in the center of the code to get percentaage change per year
### United States
US.RRPP <- fredr(series_id = "QUSR628BIS",
observation_start = as.Date("1970-01-01"),
observation_end = as.Date("2022-04-01"))
### China: Coverage includes Q1 2007-Q4 2015: New dwellings in 70 cities in China; from Q1 2016: Existing buildings in 70 cities in China. The series is deflated using CPI.
CN.RRPP <- fredr(series_id = "QCNR628BIS",
observation_start = as.Date("2005-04-01"),
observation_end = as.Date("2022-04-01"))
### Australia: Coverage includes new and existing dwellings in 8 big cities. The series is deflated using CPI.
AU.RRPP <- fredr(series_id = "QAUR628BIS",
observation_start = as.Date("1970-01-01"),
observation_end = as.Date("2022-04-01"))
### Euro Area
EA.RRPP <- fredr(series_id = "QXMR628BIS",
observation_start = as.Date("1976-01-01"),
observation_end = as.Date("2022-04-01"))
### UK
UK.RRPP <- fredr(series_id = "QGBR628BIS",
observation_start = as.Date("1969-01-01"),
observation_end = as.Date("2022-04-01"))
### Japan
JP.RRPP <- fredr(series_id = "QJPR628BIS",
observation_start = as.Date("1956-01-01"),
observation_end = as.Date("2022-04-01"))
### Germany
DE.RRPP <- fredr(series_id = "QDER628BIS",
observation_start = as.Date("1971-01-01"),
observation_end = as.Date("2022-04-01"))
### Italy
IT.RRPP <- fredr(series_id = "QITR628BIS",
observation_start = as.Date("1948-01-01"),
observation_end = as.Date("2022-04-01"))
### Ireland
IR.RRPP <- fredr(series_id = "QIER628BIS",
observation_start = as.Date("1971-01-01"),
observation_end = as.Date("2022-04-01"))
### France
FR.RRPP <- fredr(series_id = "QFRR628BIS",
observation_start = as.Date("1970-01-01"),
observation_end = as.Date("2022-04-01"))
### Emerging Market Aggregate
EM.RRPP <- fredr(series_id = "Q4TR628BIS",#Q4TR771BIS for %YoY
observation_start = as.Date("2008-10-01"),
observation_end = as.Date("2022-04-01"))
### Russian Federation
RF.RRPP <- fredr(series_id = "QRUR628BIS",
observation_start = as.Date("2002-01-01"),
observation_end = as.Date("2022-04-01"))
## Add region variable then bind
AU.RRPP$region <- "Australia"
CN.RRPP$region <- "China"
DE.RRPP$region <- "Germany"
EA.RRPP$region <- "Euro Area"
EM.RRPP$region <- "Emerging Markets"
FR.RRPP$region <- "France"
IR.RRPP$region <- "Ireland"
IT.RRPP$region <- "Italy"
JP.RRPP$region <- "Japan"
RF.RRPP$region <- "Russian Federation"
UK.RRPP$region <- "United Kingdom"
US.RRPP$region <- "United States"
RRPP <- bind_rows(AU.RRPP,CN.RRPP,DE.RRPP,EA.RRPP,EM.RRPP,FR.RRPP,IR.RRPP,IT.RRPP,JP.RRPP,RF.RRPP,UK.RRPP,US.RRPP)
## Plot
RRPP.Max <- RRPP %>%
group_by(region)%>%
slice(which.max(date))
RRPP.Max$lab <- paste(as.yearqtr(RRPP.Max$date),":",round(RRPP.Max$value,digits=2))
RRPP %>%
ggplot(aes(x=date,y=value,group=region,colour=region))+
geom_line()+
scale_colour_manual(values=c("#00843D","red","orange","navy","#0055A4","#FFCE00","darkgreen","#008C45","#CC3333","#1C3578","darkred","#3C3B6E"))+
geom_hline(yintercept = 100,colour="black",linetype="dotted",alpha=0.6)+
geom_text_repel(aes(label=round(value,digits=0)),colour="#666666",size=2.5,max.overlaps = 20)+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Real Residential Property Price Index")+
labs(caption="Source: Bank of International Settlements (BIS) via FRED API | The series is deflated using CPI")+
xlab(NULL)+ylab("2010 = 100")+
facet_wrap(~region,ncol=2)+
geom_text(data=RRPP.Max,aes(label=lab,y=50,group=region,colour=region),hjust="right",size=3,fontface="bold",alpha=0.6)
A footnote on the China Series: Coverage includes Q1 2007-Q4 2015: New dwellings in 70 cities; from Q1 2016: Existing buildings in 70 cities
RRPP_2010 <- RRPP %>%
filter(date >="2010-01-01")
RRPP_2010 %>%
ggplot(aes(x=date,y=value,group=region,colour=region))+
geom_line()+
scale_colour_manual(values=c("#00843D","red","orange","navy","#0055A4","#FFCE00","darkgreen","#008C45","#CC3333","#1C3578","darkred","#3C3B6E"))+
geom_hline(yintercept = 100,colour="black",linetype="dotted",alpha=0.6)+
geom_text_repel(aes(label=round(value,digits=0)),colour="#666666",size=2.5,max.overlaps = 6)+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Real Residential Property Price Index")+
labs(caption="Source: Bank of International Settlements (BIS) via FRED API | The series is deflated using CPI")+
xlab(NULL)+ylab("2010 = 100")+
facet_wrap(~region,ncol=2)+
geom_text(data=RRPP.Max,aes(label=lab,y=70,group=region,colour=region),hjust="right",size=3,fontface="bold",alpha=0.6)
2010 to Date
# Percentage changes
### United States
US.RRPP.I <- fredr(series_id = "QUSR368BIS",
observation_start = as.Date("1970-01-01"),
observation_end = as.Date("2022-04-01"))
### China: Coverage includes Q1 2007-Q4 2015: New dwellings in 70 cities in China; from Q1 2016: Existing buildings in 70 cities in China. The series is deflated using CPI.
CN.RRPP.I <- fredr(series_id = "QCNR368BIS",
observation_start = as.Date("2005-04-01"),
observation_end = as.Date("2022-04-01"))
### Australia: Coverage includes new and existing dwellings in 8 big cities. The series is deflated using CPI.
AU.RRPP.I <- fredr(series_id = "QAUR368BIS",
observation_start = as.Date("1970-01-01"),
observation_end = as.Date("2022-04-01"))
### Euro Area
EA.RRPP.I <- fredr(series_id = "QXMR368BIS",
observation_start = as.Date("1976-01-01"),
observation_end = as.Date("2022-04-01"))
### UK
UK.RRPP.I <- fredr(series_id = "QGBR368BIS",
observation_start = as.Date("1969-01-01"),
observation_end = as.Date("2022-04-01"))
### Japan
JP.RRPP.I <- fredr(series_id = "QJPR368BIS",
observation_start = as.Date("1956-01-01"),
observation_end = as.Date("2022-04-01"))
### Germany
DE.RRPP.I <- fredr(series_id = "QDER368BIS",
observation_start = as.Date("1971-01-01"),
observation_end = as.Date("2022-04-01"))
### Italy
IT.RRPP.I <- fredr(series_id = "QITR368BIS",
observation_start = as.Date("1948-01-01"),
observation_end = as.Date("2022-04-01"))
### Ireland
IR.RRPP.I <- fredr(series_id = "QIER368BIS",
observation_start = as.Date("1971-01-01"),
observation_end = as.Date("2022-04-01"))
### France
FR.RRPP.I <- fredr(series_id = "QFRR368BIS",
observation_start = as.Date("1970-01-01"),
observation_end = as.Date("2022-04-01"))
### Emerging Market Aggregate
EM.RRPP.I <- fredr(series_id = "Q4TR771BIS",
observation_start = as.Date("2008-10-01"),
observation_end = as.Date("2022-04-01"))
### Russian Federation
RF.RRPP.I <- fredr(series_id = "QRUR368BIS",
observation_start = as.Date("2002-01-01"),
observation_end = as.Date("2022-04-01"))
## Add region variable then bind
AU.RRPP.I$region <- "Australia"
CN.RRPP.I$region <- "China"
DE.RRPP.I$region <- "Germany"
EA.RRPP.I$region <- "Euro Area"
EM.RRPP.I$region <- "Emerging Markets"
FR.RRPP.I$region <- "France"
IR.RRPP.I$region <- "Ireland"
IT.RRPP.I$region <- "Italy"
JP.RRPP.I$region <- "Japan"
RF.RRPP.I$region <- "Russian Federation"
UK.RRPP.I$region <- "United Kingdom"
US.RRPP.I$region <- "United States"
RRPP.I <- bind_rows(AU.RRPP.I,CN.RRPP.I,DE.RRPP.I,EA.RRPP.I,EM.RRPP.I,FR.RRPP.I,IR.RRPP.I,IT.RRPP.I,JP.RRPP.I,RF.RRPP.I,UK.RRPP.I,US.RRPP.I)
# Plot
RRPP.I_2010 <- RRPP.I %>%
filter(date >="2010-01-01")
colour.col <- ifelse(RRPP.I_2010$value < 0,"#CC0000","#1b5545")
RRPP.I_2010$colourcol <- ifelse(RRPP.I_2010$value < 0,"Negative","Positive")
RRPP.I_2010 %>%
ggplot(aes(x=date,y=value,group=region,fill=colourcol))+
geom_col(alpha=0.7)+
scale_fill_manual(values=c("#CC0000","#1b5545"))+
#scale_colour_manual(values=c("#00843D","red","orange","navy","#0055A4","#FFCE00","darkgreen","#008C45","#CC3333","#1C3578","darkred","#3C3B6E"))+
geom_hline(yintercept = 0,colour="black",linetype="dotted",alpha=0.6)+
#geom_text(aes(label=round(value,digits=0)),colour="#666666",size=2.5,vjust=1.5)+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Real Residential Property Price Index")+
labs(caption="Source: Bank of International Settlements (BIS) via FRED API | The series is deflated using CPI")+
xlab(NULL)+ylab("Percentage - Annual")+
facet_wrap(~region,ncol=2)#+geom_text(data=RRPP.Max,aes(label=lab,y=50,group=region,colour=region),hjust="right",size=3,fontface="bold",alpha=0.6)
Headline number is 4.3 and stable, the 25-74 year cohort continues the decline.
MUM01 <- cso_get_data("MUM01")
MUM01 <- MUM01 %>%
pivot_longer(!1:3, names_to = "yearm")
MUM01 <- MUM01 %>%
filter(Statistic == "Seasonally Adjusted Monthly Unemployment Rate")%>%
filter(Sex == "Both sexes") %>%
filter(Age.Group == "15 - 74 years" | Age.Group == "25 - 74 years")
MUM01<- MUM01 %>%
separate(yearm, c("Year", "Month"), sep=" ")
MUM01$Year <- as.integer(MUM01$Year)
MUM01$Date <- as.Date(paste(paste(MUM01$Month, sep = " ", "1"),sep = " ",MUM01$Year),"%B %d %Y")
MUM01_Max <- MUM01 %>%
group_by(Age.Group)%>%
slice(which.max(Date))
MUM01_Max$lab <- paste(MUM01_Max$Month, ":", MUM01_Max$value)
MUM01_16 <- MUM01 %>%
filter(Year >= "2016")
MUM01_21 <- MUM01 %>%
filter(Year >= "2021")
MUM01_YTD <- MUM01 %>%
filter(Year >= "2022")
Fig.Unemp.1 <- ggplot(data=MUM01, aes(x=Date, y=value, group = Age.Group, colour=Age.Group))+
geom_line(linejoin="mitre", linetype = 1,alpha = 0.5)+
scale_colour_manual(values=c("navy","red"))+
theme_bw()+
labs(subtitle = "January 1998 to date",
y=NULL,
x=NULL)+ theme(legend.position = "none")
Fig.Unemp.2 <- ggplot(data=MUM01_16, aes(x=Date, y=value, group = Age.Group, colour=Age.Group))+
geom_line(linejoin="mitre",size = 1.25, linetype = 1,alpha = 0.5)+
scale_colour_manual(values=c("navy","red"))+
geom_text_repel(aes(label=value),data = MUM01_16, size = 2.75,colour="black",max.overlaps = 4,alpha=0.5)+
geom_text(aes(label=lab,colour=Age.Group),data = MUM01_Max, size = 3.25,hjust=1,vjust=2, fontface = "bold")+
theme_bw()+
labs(title = "Unemployment" ,
subtitle = "2016 to date",
y="Unemployment Rate",
x="Month")+
theme(legend.position = "bottom")
Fig.Unemp.3 <- ggplot(data=MUM01_21, aes(x=Date, y=value, group = Age.Group, colour=Age.Group))+
geom_line(linejoin="mitre", linetype = 1,alpha = 0.5)+
scale_colour_manual(values=c("navy","red"))+
theme_bw()+
labs(subtitle = "January 2021 to date",
y=NULL,
x=NULL)+ theme(legend.position = "none")
Fig.Unemp.4 <- ggplot(data=MUM01_YTD, aes(x=Date, y=value, group = Age.Group, colour=Age.Group))+
geom_line(linejoin="mitre", linetype = 1,alpha = 0.5)+
scale_colour_manual(values=c("navy","red"))+
theme_bw()+
labs(subtitle = "Year to date",
y=NULL,
x=NULL)+ theme(legend.position = "none")
Fig.Unemp.RightFacet<- Fig.Unemp.1 + Fig.Unemp.3 + Fig.Unemp.4 + plot_layout(nrow=3)
Fig.Unemp.2 + Fig.Unemp.RightFacet+ plot_layout(ncol=2,widths = c(2,1))
Post 2020 where are the unemployed? - Approximately one sixth of those coming from “No occupation” were under 25. I am assuming the balance are long term unemployed but I do not have that figure to hand.
LRM13 <- cso_get_data("LRM13")
LRM13 <- LRM13 %>%
pivot_longer(!1:4, names_to = "yearm")
LRM13<- LRM13 %>%
separate(yearm, c("Year", "Month"), sep=" ")
LRM13$Year <- as.integer(LRM13$Year)
LRM13$Date <- as.Date(paste(paste(LRM13$Month, sep = " ", "1"),sep = " ",LRM13$Year),"%B %d %Y")
# LRM13.1 <- LRM13 %>%
# filter(Last.Held.Occupation == "All broad occupational groups")%>%
# filter(Sex == "Both sexes") %>%
# filter(Age.Group == "All ages")
LRM13.2 <- LRM13 %>%
filter(Last.Held.Occupation != "All broad occupational groups")%>%
filter(Sex == "Both sexes") %>%
filter(Age.Group == "All ages")
LRM13.2_Max <- LRM13.2 %>%
group_by(Last.Held.Occupation)%>%
slice(which.max(Date))
LRM13.2_Max$lab = paste(LRM13.2_Max$Month, ":", LRM13.2_Max$value)
LRM13.2_20 <- LRM13.2 %>%
filter(Date>="2020-01-01")
options(scipen = 999)
LRM13.2_20 %>%
ggplot(aes(x=Date,y=value,group=Last.Held.Occupation,colour=Last.Held.Occupation))+
geom_line()+
geom_text_repel(aes(label=value),max.overlaps=6,colour="black",alpha=0.6,size=2.5)+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Persons on the Live Register")+
labs(subtitle="LRM13: By Last Held Occupation")+
ylab("number")+
geom_text_repel(data=LRM13.2_Max,aes(y=50000,label=lab),alpha=0.4)+
facet_wrap(~Last.Held.Occupation,ncol=2)
LRM13.3 <- LRM13 %>%
filter(Last.Held.Occupation != "All broad occupational groups")%>%
filter(Sex == "Both sexes") %>%
filter(Age.Group == "Under 25 years")
LRM13.3_Max <- LRM13.3 %>%
group_by(Last.Held.Occupation)%>%
slice(which.max(Date))
LRM13.3_Max$lab = paste(LRM13.3_Max$Month, ":", LRM13.3_Max$value)
LRM13.3_20 <- LRM13.3 %>%
filter(Date>="2020-01-01")
LRM13.3_20 %>%
ggplot(aes(x=Date,y=value,group=Last.Held.Occupation,colour=Last.Held.Occupation))+
geom_line()+
geom_text_repel(aes(label=value),max.overlaps=6,colour="black",alpha=0.6,size=2.5)+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Persons on the Live Register: Under 25 years")+
labs(subtitle="LRM13: By Last Held Occupation")+
ylab("number")+
geom_text_repel(data=LRM13.3_Max,aes(y=9000,label=lab),alpha=0.4)+
facet_wrap(~Last.Held.Occupation,ncol=2)
People work less hours than they did in 2000 across all age groups.
# 1. Load the data: Average usual hours worked per week for persons aged 15-89 years in Employment
QLF49 <- cso_get_data("QLF49")
QLF49 <- QLF49 %>%
pivot_longer(!1:2,names_to="year_qtr")
QLF49$Year_Q <- as.yearqtr(QLF49$year_qtr)
QLF49$Year <- year(QLF49$Year_Q)
QLF49 <- as.data.frame(QLF49)
# 2. Subset all Age Groups without overlaps (3x)
QLF49.1 <- QLF49 %>%
filter(Age.Group!="15 - 64 years") %>%
filter(Age.Group!="15 - 74 years") %>%
filter(Age.Group!="15 years and over")
QLF49.1_min <- QLF49.1 %>%
group_by(Age.Group)%>%
slice(which.min(Year_Q))
QLF49.1_max <- QLF49.1 %>%
group_by(Age.Group)%>%
slice(which.max(Year_Q))
QLF49.1 %>%
ggplot(aes(x=Year_Q,y=value,group=Age.Group,colour=Age.Group))+
geom_line(alpha=0.8)+
geom_text_repel(aes(label=value),data=QLF49.1_min,size=3,colour="black")+
geom_text_repel(aes(label=value),data=QLF49.1_max,size=3,colour="black")+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Average Weekly Hours Worked - Persons in Employment")+
ylab("hours")+
facet_wrap(~Age.Group,ncol=2)
The Savings Ratio is still ahead of the long run average, so seeing a reversion to the mean should be expected irrespective. This will be an interesting one to follow.
# https://ec.europa.eu/eurostat/cache/metadata/en/nasq_10_nf_tr_esms.htm
# The non-financial Quarterly Sector Accounts (QSA) encompass non-financial accounts that provide a description of the
# different stages of the economic process: production, generation of income, distribution of income, redistribution of income,
# use of income and non-financial accumulation.
# Key ratios are derived from non-financial transactions as follows:
# Gross household saving rate (S.14_S.15): B8G/(B6G+D8rec-D8pay)*100
# Gross investment rate of households (S.14_S.15): P51G/(B6G+D8rec-D8pay)*100
# Gross investment rate of non-financial corporations (S.11): P51G/B1G*100
# Gross profit share of non-financial corporations (S.11): B2G_B3G/B1G*100
# With the following transaction codes:
# B6G - Gross disposable income
# B8G - Gross saving
# D8rec / D8pay - the adjustment for the change in pension entitlements (receivable / payable)
# P51G - Gross fixed capital formation
# B1G - Gross value added
# B2G_B3G - Gross operating surplus/ mixed income.
# B7G - Gross adjusted gross disposable income (adjusted for social transfers in kind)
# P4 - Actual final consumption (adjusted for social transfers in kind)
# POP_NC - Total population national concept (source: Quarterly national accounts, Eurobase domain namq_10_pe)
# Price deflator - Price index/implicit deflator calculated as CP_MEUR/CLV05_MEUR – both indicators refer to households and NPISH final consumption expenditure (P31_S14_S15) (source: Quarterly national accounts, Eurobase domain namq_10_gdp)
#
# In the above, all ratios are expressed in gross terms, i.e. before deduction of consumption of fixed capital.
# The following key indicators combine non-financial with financial accounts:
# Household net financial assets ratio (BF90/(B6G+D8net))
# With the following codes (the codes already described above have not been listed):
# BF90 – Financial net worth
## Step 1. Load the CSO data
ISQ04 <- cso_get_data("ISQ04")
ISQ04 <- ISQ04 %>%
pivot_longer(!1:2,names_to="year_qtr")
ISQ04$Year_Q <- as.yearqtr(ISQ04$year_qtr)
ISQ04$Year <- year(ISQ04$Year_Q)
ISQ04$lab <- paste(as.yearqtr(ISQ04$Year_Q),":",round(ISQ04$value,digits=2))
ISQ04.SR <- ISQ04 %>%
filter(Statistic == "Saving Ratio (Seasonally Adjusted)"|Statistic == "Saving Ratio")
###### Plot
ISQ04.SR_Max <- ISQ04.SR %>%
group_by(Statistic) %>%
slice(which.max(Year_Q))
ISQ04.SR %>%
ggplot(aes(x=Year_Q,y=value,group=Statistic,colour=Statistic))+
geom_line()+
geom_hline(yintercept=0,linetype="dotted",alpha=0.6)+
geom_text_repel(aes(label=value),alpha=0.6,colour="black",max.overlaps = 5)+
geom_text(data=ISQ04.SR_Max,aes(label=lab,y=-5),hjust="right",size=3,fontface="bold",alpha=0.6)+
theme_bw()+
ggtitle("Household Savings Rate - Ireland")+
labs(subtitle="ISQ04")+
ylab("%")+
theme(legend.position="bottom")+
facet_wrap(~Statistic,nrow=2)
# 1. Load the data: Capital Goods Price Index
WPM27 <- cso_get_data("WPM27")
WPM27 <- WPM27 %>%
pivot_longer(!1:2,names_to="year_month")
WPM27$Year <-substr(WPM27$year_month,1,4)
WPM27$Month <- sub(".* ", "", WPM27$year_month)
WPM27$Month_NR <- as.integer(factor(WPM27$Month, levels=month.name))
WPM27$Date <- as.yearmon(paste(WPM27$Year, WPM27$Month_NR), "%Y %m")
# 2. Load for All capital goods and Building and Construction
WPM27.1 <- WPM27 %>%
filter(Type.of.Capital.Good=="Building and construction (i.e. materials and wages)"|Type.of.Capital.Good=="All capital goods")
## 2.1 Filter to index
WPM27.1.I <- WPM27.1 %>%
filter(Statistic=="Capital Goods Price Index")
## 2.2 Filter to y on y
WPM27.1.Y <- WPM27.1 %>%
filter(Statistic=="Percentage Change over 12 month in Capital Goods Price Index")
WPM27.1.Y <- WPM27.1.Y %>%
filter(Date >= "Jan 2016")
# Plot
WPM27.1.I_max <- WPM27.1.I %>%
group_by(Type.of.Capital.Good)%>%
slice(which.max(Date))
Fig.1 <- WPM27.1.I %>%
ggplot(aes(x=Date,y=value,group=Type.of.Capital.Good,colour=Type.of.Capital.Good))+
geom_line()+
geom_text_repel(aes(label=value),data=WPM27.1.I_max,size=3,colour="black",hjust=1,fontface='bold')+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Capital Goods Index")+
ylab("Index: 2015 = 100")+
facet_wrap(~Type.of.Capital.Good,ncol=2)
WPM27.1.Y_max <- WPM27.1.Y %>%
group_by(Type.of.Capital.Good)%>%
slice(which.max(Date))
Fig.2 <- WPM27.1.Y %>%
ggplot(aes(x=Date,y=value,group=Type.of.Capital.Good,fill=Type.of.Capital.Good,colour=Type.of.Capital.Good))+
geom_col(alpha=0.25)+
geom_text_repel(aes(label=value),size=2.5,colour="#616161",max.overlaps = 5)+
geom_text_repel(aes(label=value),data=WPM27.1.Y_max,size=3,colour="black",hjust=1,fontface='bold')+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Capital Goods - Year on Year Change")+
ylab("percent")+xlab(NULL)+
facet_wrap(~Type.of.Capital.Good,nrow=2)
Fig.2 + Fig.1 + plot_layout(nrow=2,heights = c(2,1))
# 1. Load the data: Industrial Price Index
WPM25 <- cso_get_data("WPM25")
WPM25 <- WPM25 %>%
pivot_longer(!1:2,names_to="year_month")
WPM25$Year <-substr(WPM25$year_month,1,4)
WPM25$Month <- sub(".* ", "", WPM25$year_month)
WPM25$Month_NR <- as.integer(factor(WPM25$Month, levels=month.name))
WPM25$Date <- as.yearmon(paste(WPM25$Year, WPM25$Month_NR), "%Y %m")
# 2. As of 29th September 2022 there were four Industrial Sectors which had NAs throughout the series
WPM25 <- WPM25 %>%
filter(Broad.Industrial.Sector.NACE.Rev.2!="Intermediate goods (except energy)") %>%
filter(Broad.Industrial.Sector.NACE.Rev.2!="Capital goods") %>%
filter(Broad.Industrial.Sector.NACE.Rev.2!="Durable consumer goods") %>%
filter(Broad.Industrial.Sector.NACE.Rev.2!="Non-durable consumer goods")
## Separate Energy Producte (1) and All others (2)
WPM25.1 <- WPM25 %>%
filter(Broad.Industrial.Sector.NACE.Rev.2=="Energy products")
WPM25.2 <- WPM25 %>%
filter(Broad.Industrial.Sector.NACE.Rev.2!="Energy products")
# 3. Plot
Fig.1 <- WPM25.2 %>%
ggplot(aes(x=Date,y=value,group=Broad.Industrial.Sector.NACE.Rev.2,colour=Broad.Industrial.Sector.NACE.Rev.2))+
geom_hline(yintercept=100,colour="black",linetype=2,alpha=0.75)+
geom_line()+
geom_text_repel(aes(label=value),size=2.75, colour="black")+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Broad Industrial Sectors (NACE) - Industrial Price Index")+
labs(caption="CSO: WPM25")+
ylab("2015 = 100")+
xlab(NULL)+
facet_wrap(~Broad.Industrial.Sector.NACE.Rev.2,ncol=2)
Fig.2 <- WPM25.1 %>%
ggplot(aes(x=Date,y=value,group=Broad.Industrial.Sector.NACE.Rev.2,colour=Broad.Industrial.Sector.NACE.Rev.2))+
geom_hline(yintercept=100,colour="black",linetype=2,alpha=0.75)+
geom_line(colour="navy")+
geom_text_repel(aes(label=value),size=2.75, colour="black",max.overlaps = 4)+
theme_bw()+
theme(legend.position = "none")+
labs(caption="CSO: WPM25")+
ylab("2015 = 100")+
facet_wrap(~Broad.Industrial.Sector.NACE.Rev.2,ncol=2)
Fig.1 + Fig.2 + plot_layout(nrow=2,heights = c(2.5,1))
There are 66 Commodity Groups included in the dataset, values represented in euro thousands. So a figure of 17 million on the below graphs will tally to 17 billion.
# Step 1. Load Commodity Groups (local) and Value of Merchandise Trade from the CSO
CG <- readxl::read_xlsx(path="C:\\Users\\charten\\OneDrive - Glenveagh Properties\\Research & Development\\1. Analysis\\Commodity Groups.xlsx",sheet = 1)
TSM10 <- cso_get_data("TSM10")
TSM10 <- TSM10 %>%
pivot_longer(!1:3,names_to="year_month")
TSM10$Year <-substr(TSM10$year_month,1,4)
TSM10$Month <- sub(".* ", "", TSM10$year_month)
TSM10$Month_NR <- as.integer(factor(TSM10$Month, levels=month.name))
TSM10$Date <- as.yearmon(paste(TSM10$Year, TSM10$Month_NR), "%Y %m")
# Step 2. Create Subsets
## 2.1 Total merchandise trade (0 - 9)
TSM10.1 <- TSM10 %>%
filter(Commodity.group=="Total merchandise trade (0 - 9)")
### Total
TSM10.1.T <- TSM10.1 %>%
group_by(Statistic,Commodity.group,year_month,Year,Date) %>%
summarise(value = sum(value,na.rm = TRUE))
TSM10.1.T <- TSM10.1.T[order(TSM10.1.T$Statistic,TSM10.1.T$Date),]
TSM10.1.T$SMA.6 <- round(SMA(TSM10.1.T$value,n=6),digits=2)
TSM10.1.T$SMA.6[TSM10.1.T$Date=="Jan 2015" | TSM10.1.T$Date=="Feb 2015" | TSM10.1.T$Date=="Mar 2015"|TSM10.1.T$Date=="Apr 2015" | TSM10.1.T$Date=="May 2015"] <- NA
## 2.2 Exclude Total Merchandise Trade & Unclassified estimates
TSM10.2 <- TSM10 %>%
filter(Commodity.group!="Total merchandise trade (0 - 9)") %>%
filter(Commodity.group!="Unclassified estimates")
TSM10.2.T <- TSM10.2 %>%
group_by(Statistic,Commodity.group,year_month,Year,Date) %>%
summarise(value = sum(value,na.rm = TRUE))
TSM10.2.T <- TSM10.2.T[order(TSM10.2.T$Statistic,TSM10.2.T$Commodity.group,TSM10.2.T$Date),]
TSM10.2.T$SMA.6 <- round(SMA(TSM10.2.T$value,n=6),digits=2)
TSM10.2.T$SMA.6[TSM10.2.T$Date=="Jan 2015" | TSM10.2.T$Date=="Feb 2015" | TSM10.2.T$Date=="Mar 2015"|TSM10.2.T$Date=="Apr 2015" | TSM10.2.T$Date=="May 2015"] <- NA
TSM10.2.T <- merge(x=TSM10.2.T,y=CG,by.x="Commodity.group",by.y="Commodity.Group")
TSM10.2.T <- TSM10.2.T[order(TSM10.2.T$Statistic,TSM10.2.T$Commodity.group,TSM10.2.T$Date),]
## Subset by Group
TSM10.2.T.0 <- TSM10.2.T %>%
filter(Group=="0")
TSM10.2.T.1 <- TSM10.2.T %>%
filter(Group=="1")
TSM10.2.T.2 <- TSM10.2.T %>%
filter(Group=="2")
TSM10.2.T.3 <- TSM10.2.T %>%
filter(Group=="3")
TSM10.2.T.4 <- TSM10.2.T %>%
filter(Group=="4")
TSM10.2.T.5 <- TSM10.2.T %>%
filter(Group=="5")
TSM10.2.T.6 <- TSM10.2.T %>%
filter(Group=="6")
TSM10.2.T.7 <- TSM10.2.T %>%
filter(Group=="7")
TSM10.2.T.8 <- TSM10.2.T %>%
filter(Group=="8")
TSM10.2.T.9 <- TSM10.2.T %>%
filter(Group=="9")
# Step 3. Plot
options(scipen = 999)
TSM10.1.T_max <- TSM10.1.T %>%
group_by(Statistic)%>%
slice(which.max(Date))
TSM10.1.T_max$lab_SMA.6 <- paste(as.character(TSM10.1.T_max$Date), "-", comma(TSM10.1.T_max$SMA.6,digits=0))
TSM10.1.T_max$lab_value <- comma(TSM10.1.T_max$value,digits=0)
TSM10.1.T %>%
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_text(data=TSM10.1.T_max,aes(label=lab_SMA.6),size=2.75,hjust=1.15,vjust=1,colour="black")+
geom_text(data=TSM10.1.T_max,aes(y=value,label=lab_value),size=2.5,colour="#616161")+
geom_line(aes(x=Date,y=value,group=Statistic,colour=Statistic),alpha=0.25)+
geom_line()+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Total merchandise",caption="latest month actual value printed in grey at the end of the monthly series")+
ylab("6 month moving average - (Euro Thousand)")+
scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
Medicinal & Pharmaceutical have a large share of both imports and exports.
“The Republic is a global hub for pharma and medtech, playing host to 24 of the top 25 players, including Pfizer, Johnson & Johnson, Roche, Novartis and AbbVie.” - Irish Times, August 2022
TSM10.2.T_max <- TSM10.2.T %>%
group_by(Statistic,Group,Commodity.group)%>%
slice(which.max(Date))
TSM10.2.T_max.I <- TSM10.2.T_max %>%
filter(Statistic=="Value of Imports")
TSM10.2.T_max.I <- TSM10.2.T_max.I %>%
group_by(Statistic,Commodity.group) %>%
tally(SMA.6) %>%
top_n(n=5)
TSM10.2.T_max.E <- TSM10.2.T_max %>%
filter(Statistic=="Value of Exports")
TSM10.2.T_max.E <- TSM10.2.T_max.E %>%
group_by(Statistic,Commodity.group) %>%
tally(SMA.6) %>%
top_n(n=5)
TSM10.2.T_N5 <- rbind(TSM10.2.T_max.E,TSM10.2.T_max.I)
TSM10.2.T_N5$lab_value <- comma(TSM10.2.T_N5$n,digits=0)
#rm()
# Need to filter for imports and exports
TSM10.2.T_N5 %>%
ggplot(aes(x=n,y=Commodity.group,group=Statistic))+
geom_col(aes(fill=Commodity.group,colour=Commodity.group),alpha=0.4)+
geom_text(aes(label=lab_value),size=2.75,colour="#616161",hjust=1)+
theme_bw()+
theme(legend.position = "none")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="Largest 5 Commodity Groups")+
xlab("6 Month Moving Average - (Euro Thousand)")+scale_x_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))+
facet_wrap(~Statistic,nrow=2)
# return top n values for commodity groups and add for geom_text_repel
I’ve group these to “Parent Group” which is based on the prefix of the commodity group number, i.e. the first digit of the two digit code. I’ve displayed the data in by displaying the Parent Groups which have the same/similar number of Commodity Groups together.
Scales are relative to Parent Groups
## 3,2 #https://www.foreign-trade.com/reference/hscode.htm #https://www.foreign-trade.com/reference/hscode.htm?cat=1
TSM10.2.T.0 %>% # nrow = 4
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 10,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=3,labeller = labeller(Commodity.group = label_wrap_gen(width = 35)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 0")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
TSM10.2.T.8 %>% # nrow = 4
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 10,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=2,labeller = labeller(Commodity.group = label_wrap_gen(width = 35)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 8")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
## 3,2
TSM10.2.T.2 %>% # nrow = 3
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 10,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=3,labeller = labeller(Commodity.group = label_wrap_gen(width = 35)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 2")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
TSM10.2.T.5 %>% # nrow = 3
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 10,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=3,labeller = labeller(Commodity.group = label_wrap_gen(width = 35)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 5")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
TSM10.2.T.6 %>% # nrow = 3
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 10,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=3,labeller = labeller(Commodity.group = label_wrap_gen(width = 35)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 6")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
TSM10.2.T.7 %>% # nrow = 3
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 10,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=3,labeller = labeller(Commodity.group = label_wrap_gen(width = 35)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 7")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
## 3,2
TSM10.2.T.3 %>% # nrow = 2
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 6,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=2,labeller = labeller(Commodity.group = label_wrap_gen(width = 50)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 3")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
TSM10.2.T.4 %>% # nrow = 2
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 6,alpha=0.7)+
facet_wrap(~Commodity.group,ncol=2,labeller = labeller(Commodity.group = label_wrap_gen(width = 50)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 4")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
## 3,2
TSM10.2.T.1 %>% # nrow = 1
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 5)+
facet_wrap(~Commodity.group,ncol=2,labeller = labeller(Commodity.group = label_wrap_gen(width = 50)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 1")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))
TSM10.2.T.9 %>% # nrow = 1
ggplot(aes(x=Date,y=SMA.6,group=Statistic,colour=Statistic))+
geom_line()+geom_text_repel(aes(label=SMA.6),size=2.25, max.overlaps = 2)+
facet_wrap(~Commodity.group,ncol=2,labeller = labeller(Commodity.group = label_wrap_gen(width = 50)))+
theme_bw()+
theme(legend.position = "bottom")+
ggtitle("Value of Merchandise Trade")+
labs(subtitle="CSO: TSM10 - Commodity Parent Group: 9")+
ylab("6 month moving average")+scale_y_continuous(labels = scales::number_format(accuracy = 1,decimal.mark = ','))