Headline Roundup

Trade in Europe stalling with drought as the Rhine drops below 40cm level required for large ships, heading for 30cm.

In the short run reducing dependence of Russian energy for Germany will require increased consumption of coal. With the Rhine at impassable levels this will disrupt supply. Uniper, who were recently bailed out by the German government to the tune of 15 billion euro, warned that there would be limited output from the a large coal power station near Frankfurt due to the low water levels. According to the FT inland waterways account for 6% of overall German transport volumes, but 30% of coal, oil and gas. Scheisse.

Bank of England forecast gloomy outlook for the UK to accompany largest rate hike in 27 years.

The BOE hiked interest rates by 50 basis points on the 4th of August, but it was not the large hike that generate the shock but the gloomy forecast. Inflation is forecasted to peak at 13% by Q4 and GDP to decline over 2%, with the UK heading for a recession which will last over a year. Read the Monetary Policy Summary, August 2022 for more details.

Trump raided by the FBI casts doubts over re-election bid.

There is a portion of Trumps base that he can never alienate, that was seen of late by Liz Cheney who looks set to be defeated in the primary contest for her seat un the US House. - She is also a vocal Republican critic of Trump since the US Capitol attack and the daughter of a former vice-president. If his supporters won’t leave him they may have to do without him, as he has allegedly committed serious offences. A poll from Politico shows that most think he should be convicted and barred from running again, including 23% of Republicans. So who knows?

Erdogan and Putin agree to “increase co-operation”, leaving NATO on high alert.

Turkey, a NATO member is facing high inflation with Erdogans reluctance to raise interest rates. Increasingly a liability, it was recently reported in the FT, citing Interfax, that Russian officials claim Turkey has agreed to pay for gas in roubles. Turkish exports to Russia grew 45% over the last 3 months, vs the same period last year. Erdogan is also set to meet Zelenskyy in what will be his first trip there since the war began.

Saudi Aramco post record profits, for any listed company ever.

Its plan to reinvest the profits, part of which is to boost capacity of 12 million barrels per day to 13 million. This is two weeks after OPEC disappoint with decision to boost production by 100,000 barrels per day. The group also plans to increase natural gas by 50% by 2030, and invest in renewable energy sources.

Tax Bands look set to be widened over introducing Leos 30% rate.

Budget 2023 looks set to include a widening of the tax bands. The cut off rate is currently at €36,800 moving from 20% to 40% income tax. As opposed to adding an additional band at 30% the government looks set to widen the bands to help with the inflation pressures. Some politicking likely at play here, with the Greens apparently opposed to the 30% rate but in favour of widening, so Varadkar may be using it as a dummy concession.


US & Markets

Bear Market rally continues

I still can’t see how this rally is not markets getting excited. Inflation “peaking” is a narrative in the US at present, the July CPI came in lower than expected at 8.5% on the year, still well above the 2% target. I gather that markets rallied on the assumption that this means the FED will ease rate hikes sooner, but materially inflation is still the issue. - So further downside seems most probable.

# 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)
write.csv(SNP,"SNP.N1.csv")
write.csv(ISEQ,"ISEQ.N1.csv")

SNP_Aug22 <- SNP %>%
  subset(date(index(.))>= "2022-08-01")
ISEQ_Aug22 <- ISEQ %>%
  subset(date(index(.))>= "2022-08-01")
SNP_YTD <- SNP %>%
  subset(date(index(.))>= "2022-01-01")
ISEQ_YTD <- ISEQ %>%
  subset(date(index(.))>= "2022-01-01")

Markets

ggplot(data=SNP_YTD,aes(x=Index,y=GSPC.Close,group=1))+
  geom_line(colour="#D49CFE")+
  geom_text_repel(aes(label=round(GSPC.Close,digits=2)),data = SNP_YTD, size = 3,max.overlaps = 3,colour="#f6f7f6")+
  theme_dark()+
  ggtitle("S&P YTD")+
  xlab("Dates")

ggplot(data=ISEQ_YTD,aes(x=Index,y=ISEQ.Close,group=1))+
  geom_line(colour="#A5FE9C")+
  geom_text_repel(aes(label=round(ISEQ.Close,digits=2)),data = ISEQ_YTD, size = 3,max.overlaps = 2,colour="#f6f7f6")+
  theme_dark()+
  ggtitle("ISEQ YTD")+
  xlab("Dates")

ggplot(data=SNP_Aug22,aes(x=Index,y=GSPC.Close,group=1))+
  geom_line(colour="#D49CFE")+
  geom_text_repel(aes(label=round(GSPC.Close,digits=2)),data = SNP_Aug22, size = 3,max.overlaps = 3,colour="#f6f7f6")+
  theme_dark()+
  ggtitle("S&P Aug22")+
  xlab("Dates")

ggplot(data=ISEQ_Aug22,aes(x=Index,y=ISEQ.Close,group=1))+
  geom_line(colour="#A5FE9C")+
  geom_text_repel(aes(label=round(ISEQ.Close,digits=2)),data = ISEQ_Aug22, size = 3,max.overlaps = 2,colour="#f6f7f6")+
  theme_dark()+
  ggtitle("ISEQ Aug22")+
  xlab("Dates")

Commodities

Energy Prices

Total Sample

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.N1.csv")
write.csv(WTI,"WTI.N1.csv")
write.csv(NGAS,"NGAS.N1.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("Dates")

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("Dates")

#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")

# Total Series for Energy
Fig.Brent1 + Fig.WTI1 + Fig.NGAS1 +
  plot_layout(nrow=3)

Year to Date

Oil shows a decline on the month to date, with Gas increasing towards highs seen at the start of the war. With the situation in Russia motivating Russia to cut off supplies via Nord Stream 1 to Germany the energy prices look set to soar in the back end of the year.

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("Price - USD")+
  xlab("Dates")

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("Price - USD")+
  xlab("Dates")

#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("Price - USD")+
  xlab("Dates")+
  labs(caption = "dashed line = average, solid line = closing price")

# Total Series for Energy
Fig.Brent2 + Fig.WTI2 + Fig.NGAS2 +
  plot_layout(nrow=3)

rm(ISEQ)
rm(ISEQ_July22)
rm(ISEQ_YTD)
rm(SNP)
rm(SNP_July22)
rm(SNP_YTD)

Ireland & The Euro Area

This is the first time I have pulled in bond yields, I am not going to spend time analysing them. I am tipping through The Strategic Bond Investor by Anthony Crescenzi at the moment. This will likely be the source of any commentary on this going forward, or at least in part.

For now, consider the trend seen on the tiles below when looking at the cost of borrowing in the next section.

Euro Area Bonds

# 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_hline(yintercept = 0, linetype='dotted')+
  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

Cost of Borrowing

Household Cost of Borrowing

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))

The standard deviation of the Irish series is 0.12 percentage points. Where as the standard deviation of the Euro Area is 0.07 percentage points. Euro Area cost of borrowing has increased by more than one standard deviation 4 months on the bounce. It’s been over a decade since it has done so in this direction. - The last three monthly movements have been 2 standard deviation moves.

Considering that the ECB hiked rates in July and these are June numbers, it is telling of what is to come.

SD_COB.H_IE<- sd(COB.H_IE$Diff, na.rm=TRUE)
SD_COB.H_EA<- sd(COB.H_EA$Diff, na.rm=TRUE)
 
## Year to date - 2022
# COB.H_IE_22 <- COB.H_IE %>%
#   filter(obstime >= "2022-01-01")
# COB.C_IE_22 <- COB.C_IE %>%
#   filter(obstime >= "2022-01-01")
#  
# COB.H_EA_22 <- COB.H_EA %>%
#   filter(obstime >= "2022-01-01")
# COB.C_EA_22 <- COB.C_EA %>%
#   filter(obstime >= "2022-01-01")
#  
# COB.H_22 <- bind_rows(COB.H_IE_22,COB.H_EA_22)
# COB.C_22 <- bind_rows(COB.C_IE_22,COB.C_EA_22)
#  
# # Household graphs YTD
#  
# Fig.COB.H3 <- ggplot(data=COB.H_22,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_22, 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.H4 <- ggplot(data=COB.H_22,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_22, size = 3)+
#   theme_bw()+
#   theme(legend.position = "bottom")+
#   ylab("monthly change percentage points")+
#   xlab(NULL)
#  
# FacetH22<- Fig.COB.H4+ facet_wrap(~ref_area, nrow = 2)
#  
# Fig.COB.H3 + FacetH22 + plot_layout(ncol=2,widths = c(2,1))
#  
## 2021 to date 
COB.H_IE_21 <- COB.H_IE %>%
  filter(obstime >= "2021-01-01")
COB.C_IE_21 <- COB.C_IE %>%
  filter(obstime >= "2021-01-01")
 
COB.H_EA_21 <- COB.H_EA %>%
  filter(obstime >= "2021-01-01")
COB.C_EA_21 <- COB.C_EA %>%
  filter(obstime >= "2021-01-01")
 
COB.H_21 <- bind_rows(COB.H_IE_21,COB.H_EA_21)
COB.C_21 <- bind_rows(COB.C_IE_21,COB.C_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 = 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 = 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))

Corporation Cost of Borrowing

Fig.COB.C1 <- ggplot(data=COB.C,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.C, size = 3)+
  theme_bw()+
  theme(legend.position = "bottom")+
  ggtitle("Corporation 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.C2 <- ggplot(data=COB.C,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.C, size = 3)+
  theme_bw()+
  theme(legend.position = "bottom")+
  ylab("monthly change percentage points")+
  xlab(NULL)

Facet2<- Fig.COB.C2+ facet_wrap(~ref_area, nrow = 2)

Fig.COB.C1 + Facet2 + plot_layout(ncol=2,widths = c(2,1))


Latest numbers from the CSO

Housing

House Price Index

The June numbers for the residential property price index shows the index pass previous peaks. No doubt that will motivate many newspaper headlines referring to the “boom”. The housing market is in a very different place to 2006, as is the economy, but with the cost of borrowing set to increase, the house prices finally look set to cool.

GEO_Merge <- readxl::read_xlsx(path="C:\\Users\\harte\\OneDrive\\Experimental\\HPM04_GEO.xlsx",sheet = 1)
shp <- sf::read_sf("/Users/harte/OneDrive/Experimental//Constituency_Boundaries_Ungeneralised___OSi_National_Electoral_Boundaries___2017.shp", stringsAsFactors=FALSE)

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")+
  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

HPM09_1_T12 <- tail(HPM09_1,12)
RRPI_Line_2 <- ggplot(data=HPM09_1_T12, aes(x=Month, y=value, group = Type.of.Residential.Property))+
  geom_line(linejoin="mitre",size = 1.25, linetype = 1,alpha = 0.5, colour="#1b5545")+
  labs(title = "Residential Property Price Index" ,
       subtitle = "12 Month Series",
       y="2015 = 100",
       x="Month")+
  geom_text(aes(label=value),vjust= 1.5, hjust = 0, size=3)+
  theme(legend.position = "bottom")

RRPI_Line_2

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))+
  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")

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_Dub <- HPM04_1B_Map_June2022 %>% 
  filter(grepl('Dublin|Laoghaire', Seat_Tag))

shpHPMDub <- merge(shp,HPM04_1B_Map_June2022_Dub, by.x = "CON_SEAT_", by.y="Seat_Tag")

Map2_DiffpcAll <-  shpHPM %>%
  ggplot()+
  geom_sf(aes(fill = Diffpc))+
 scale_fill_stepsn(n.breaks = 10,
    colors=c("#F92306","#FFFFFF","#0C4F00"),
    limits = c(-1,1),
    name = "% change")+
    ggtitle('Year on Year Change 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_DiffpcDub <- shpHPMDub %>%
  ggplot()+
  geom_sf(aes(fill = Diffpc))+
 scale_fill_stepsn(n.breaks = 10,
    colors=c("#F92306","#FFFFFF","#0C4F00"),
    limits = c(-1,1),
    name = "% change")+
    theme_void()+
  theme(legend.position = "none")


Map2_Diffpc <- Map2_DiffpcAll + Map2_DiffpcDub +
  plot_layout(widths = c(2,1))

Map2_Diffpc

Average percentage change year on year is 8.38%. This was 2.24% in the Dublin constituencies.

HPM04_1B_Map_June2022%>%
  kbl(caption = "Year on Year ")%>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = T)%>%
  scroll_box(width = "600px", height = "300px") 
Year on Year
Seat_Tag Date Average_Value lagvalue_12mth Diff Diffpc
Carlow-Kilkenny (5) Jun 2022 290148.0 230619.7 59528.333 25.81%
Cavan-Monaghan (5) Jun 2022 156998.9 184512.3 -27513.476 -14.91%
Clare (4) Jun 2022 208611.7 183509.7 25102.000 13.68%
Cork East (4) Jun 2022 288422.0 216923.7 71498.286 32.96%
Cork North-Central (4) Jun 2022 349381.0 333970.7 15410.333 4.61%
Cork North-West (3) Jun 2022 262542.7 256189.8 6352.867 2.48%
Cork South-Central (4) Jun 2022 356091.0 363660.0 -7569.000 -2.08%
Cork South-West (3) Jun 2022 304938.3 304216.3 722.000 0.24%
Donegal (5) Jun 2022 186309.7 152709.3 33600.333 22.00%
Dublin Bay North (5) Jun 2022 527835.0 508511.0 19324.000 3.80%
Dublin Bay South (4) Jun 2022 880223.0 690948.3 189274.667 27.39%
Dublin Central (4) Jun 2022 325367.0 358731.0 -33364.000 -9.30%
Dublin Fingal (5) Jun 2022 414737.0 414875.2 -138.200 -0.03%
Dublin Mid-West (4) Jun 2022 360225.5 356383.5 3842.000 1.08%
Dublin North-West (3) Jun 2022 493080.0 448469.0 44611.000 9.95%
Dublin Rathdown (3) Jun 2022 607667.0 598791.0 8876.000 1.48%
Dublin South-West (5) Jun 2022 551231.3 518392.7 32838.667 6.33%
Dublin South Central (4) Jun 2022 416659.2 413275.2 3384.000 0.82%
Dublin West (4) Jun 2022 394520.5 404034.0 -9513.500 -2.35%
Dun Laoghaire (4) Jun 2022 762657.0 892525.5 -129868.500 -14.55%
Galway East (3) Jun 2022 237002.3 218774.3 18228.000 8.33%
Galway West (5) Jun 2022 257253.0 270855.5 -13602.500 -5.02%
Kerry (5) Jun 2022 250008.2 200931.0 49077.250 24.42%
Kildare North (4) Jun 2022 423639.5 397063.0 26576.500 6.69%
Kildare South (4) Jun 2022 319098.4 290461.4 28637.000 9.86%
Laois-Offaly (5) Jun 2022 232208.0 178397.0 53811.000 30.16%
Limerick City (4) Jun 2022 261204.0 254983.0 6221.000 2.44%
Limerick County (3) Jun 2022 198018.0 175311.0 22707.000 12.95%
Longford-Westmeath (4) Jun 2022 220917.3 193130.0 27787.333 14.39%
Louth (5) Jun 2022 278667.0 278551.0 116.000 0.04%
Mayo (4) Jun 2022 199769.3 163979.8 35789.500 21.83%
Meath East (3) Jun 2022 331878.4 333675.0 -1796.600 -0.54%
Meath West (3) Jun 2022 314856.0 299195.0 15661.000 5.23%
Roscommon-Galway (3) Jun 2022 152232.7 138395.7 13837.000 10.00%
Sligo-Leitrim (4) Jun 2022 192613.5 153848.2 38765.250 25.20%
Tipperary (5) Jun 2022 202336.5 167959.6 34376.875 20.47%
Waterford (4) Jun 2022 230525.7 198129.7 32396.000 16.35%
Wexford (5) Jun 2022 257212.8 222413.2 34799.500 15.65%
Wicklow (5) Jun 2022 409492.5 414499.2 -5006.750 -1.21%

Inflation

The inflation print pairs last month, energy continues to dominate but as is the theme of the day, mortgage interest will become a more volatile in the months to come. - As it has been in the past.

#Load
CPM01 <- cso_get_data("CPM01") # Selected Sub Indices
CPM03 <- cso_get_data("CPM03") # Selected Sub Indices
CPM11 <- cso_get_data("CPM11") # Contributions to changes in the Consumer Price Index
CPM15 <- cso_get_data("CPM15") # Harmonised Index of Consumer Prices

#Long
CPM01_long <- CPM01 %>%
  pivot_longer(!1:2, names_to = "year_month")
CPM01<- CPM01_long
rm(CPM01_long)
CPM01$Year <-substr(CPM01$year_month,1,4)
CPM01$Month <- sub(".* ", "", CPM01$year_month)
CPM01$Month_NR <- as.integer(factor(CPM01$Month, levels=month.name))
CPM01$Date <- as.yearmon(paste(CPM01$Year, CPM01$Month_NR), "%Y %m")

CPM03_long <- CPM03 %>%
  pivot_longer(!1:2, names_to = "year_month")
CPM03<- CPM03_long
rm(CPM03_long)
CPM03$Year <-substr(CPM03$year_month,1,4)
CPM03$Month <- sub(".* ", "", CPM03$year_month)
CPM03$Month_NR <- as.integer(factor(CPM03$Month, levels=month.name))
CPM03$Date <- as.yearmon(paste(CPM03$Year, CPM03$Month_NR), "%Y %m")

CPM11_long <- CPM11 %>%
  pivot_longer(!1:2, names_to = "year_month")
CPM11<- CPM11_long
rm(CPM11_long)
CPM11$Year <-substr(CPM11$year_month,1,4)
CPM11$Month <- sub(".* ", "", CPM11$year_month)
CPM11$Month_NR <- as.integer(factor(CPM11$Month, levels=month.name))
CPM11$Date <- as.yearmon(paste(CPM11$Year, CPM11$Month_NR), "%Y %m")

CPM15_long <- CPM15 %>%
  pivot_longer(!1:2, names_to = "year_month")
CPM15<- CPM15_long
rm(CPM15_long)
CPM15$Year <-substr(CPM15$year_month,1,4)
CPM15$Month <- sub(".* ", "", CPM15$year_month)
CPM15$Month_NR <- as.integer(factor(CPM15$Month, levels=month.name))
CPM15$Date <- as.yearmon(paste(CPM15$Year, CPM15$Month_NR), "%Y %m")
# Subset for Analysis
## CPM01_1 = All Items, Percentage Change over 12 months for Consumer Price Index (%)
CPM01_1 <- CPM01%>%
  filter(Statistic == "Percentage Change over 12 months for Consumer Price Index (%)")%>%
  filter(Commodity.Group == "All items")
## CPM01_1A = All Items, Percentage Change over 12 months for Consumer Price Index (%)
CPM01_1A <- CPM01%>%
  filter(Statistic == "Percentage Change over 12 months for Consumer Price Index (%)")%>%
  filter(Commodity.Group == "All items")%>%
  filter(Year >= 2016)
## CPM01_1B = All Items, Consumer Price Index (Base Dec 2016=100)
CPM01_1B <- CPM01%>%
  filter(Statistic == "Percentage Change over 12 months for Consumer Price Index (%)")%>%
  filter(Commodity.Group == "All items")%>%
  filter(Year >= 2020)
## CPM01_2 = All Items, Consumer Price Index (Base Dec 2016=100)
CPM01_2 <- CPM01%>%
  filter(Statistic == "Consumer Price Index (Base Dec 2016=100)")%>%
  filter(Commodity.Group == "All items")%>%
  filter(Year >= 1997)
## CPM01_2A = All Items, Consumer Price Index (Base Dec 2016=100)
CPM01_2A <- CPM01%>%
  filter(Statistic == "Consumer Price Index (Base Dec 2016=100)")%>%
  filter(Commodity.Group == "All items")%>%
  filter(Year >= 2020)


## CPM03_1 = Percentage Change over 12 months for Consumer Price Index (%)
CPM03_1 <- CPM03%>%
  filter(Statistic == "Percentage Change over 12 months for Consumer Price Index (%)")%>%
  filter(Selected.Sub.Indices == "Energy Products" |Selected.Sub.Indices == "CPI excluding Energy Products" |Selected.Sub.Indices == "Mortgage Interest")
## CPM03_2 = Consumer Price Index (Base Dec 2016=100) >= 2016
CPM03_2 <- CPM03%>%
  filter(Statistic == "Percentage Change over 12 months for Consumer Price Index (%)")%>%
  filter(Selected.Sub.Indices == "Energy Products" |Selected.Sub.Indices == "CPI excluding Energy Products" |Selected.Sub.Indices == "Mortgage Interest")%>%
    filter(Year >= 2016)

CPM01_tail_2 <- tail(CPM01_1,1)
CPM01_tail_2_lag <-head(tail(CPM01_1,2),1)

CPM01_trim <- subset(CPM01_1, select = -c(Statistic, year_month, Month, Year, Month_NR))
CPM01_tail1 <- kable(tail(CPM01_trim), caption = "Percentage Change over 12 months")
CPM01_tail1 %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F) %>%
  row_spec(6, bold = T)%>%
  pack_rows("Latest Period", 6, 6, color="#1b5545")
Percentage Change over 12 months
Commodity.Group value Date
All items 5.6 Feb 2022
All items 6.7 Mar 2022
All items 7.0 Apr 2022
All items 7.8 May 2022
All items 9.1 Jun 2022
Latest Period
All items 9.1 Jul 2022
colour_set <- ifelse(CPM01_1B$value < 0,"#CC0000","#007589")
FigCPM01_1B <- ggplot(data=CPM01_1B,aes(x=Date,y=value))+
  geom_col(fill= colour_set, alpha = 0.5)+
  labs(title = "CPI - CSO: CPM01", subtitle = "2020 to Date")+
  xlab("Year-Month")+
  ylab("Percentage Change over 12 months")+
  theme(panel.border = element_rect(linetype = 1, fill = NA))+
  geom_text(data=CPM01_1B,aes(label = value, 
            vjust= ifelse(value >=0,0.25,0.5),
            hjust= ifelse(value >=0,-0.25,1)),
            size = 2, 
            angle = 90)
FigCPM01_1B

FigCPM01_2A<- ggplot(data=CPM01_2A,aes(x=Date,y=value))+
  geom_line(size = 1.15, linetype=1, alpha = 0.6, colour = "#946627")+
  geom_hline(aes(yintercept=100), 
             colour= "#404040",
             linetype = 1)+
   labs(title = "CPI - CSO: CPM01", subtitle = "1997 to Date")+
  xlab("Year-Month")+
  ylab("Consumer Price Index (Base Dec 2016=100)")+
  theme(panel.border = element_rect(linetype = 1, fill = NA))


FigCPM01_2A

FigCPM01_2 <- ggplot(data=CPM01_2,aes(x=Date,y=value))+
  geom_line(size = 1.15, linetype=1, alpha = 0.6, colour = "#946627")+
  geom_hline(aes(yintercept=100), 
             colour= "#404040",
             linetype = 1)+
  labs(title = "CPI - CSO: CPM01", subtitle = "2016 to Date")+
  xlab("Year-Month")+
  ylab("Consumer Price Index (Base Dec 2016=100)")+
  theme(panel.border = element_rect(linetype = 1, fill = NA))
FigCPM01_2

FigCPM03_2 <- ggplot(data=CPM03_2, aes(x=Date, y=value, group=Selected.Sub.Indices, colour=Selected.Sub.Indices))+
  scale_colour_manual(values=c("#0389bb", "#0c122f", "#88b66c"))+
  labs(title = "CPI - CSO: CPM03", subtitle = "2016 to Date, selected sub indicies")+
  xlab("Year-Month")+
  ylab("Consumer Price Index (Base Dec 2016=100)")+
  geom_line(size = 1.05, linetype=1, alpha = 0.85)+
  geom_hline(aes(yintercept=0), 
             colour= "#404040",
             linetype = 1)+
  theme(axis.text.x = element_text(angle=0))+
  theme(legend.position="bottom")+
  theme(axis.text = element_text(size = rel(1)))+
  theme(plot.title=(element_text(vjust =2)))+
  theme(panel.border = element_rect(linetype = 1, fill = NA))

FigCPM03_2

FigCPM03_1 <- ggplot(data=CPM03_1, aes(x=Date, y=value, group=Selected.Sub.Indices, colour=Selected.Sub.Indices))+
  scale_colour_manual(values=c("#0389bb", "#0c122f", "#88b66c"))+
  labs(title = "CPI - CSO: CPM03", subtitle = "Historical Series, selected sub indicies")+
  xlab("Year-Month")+
  ylab("Percentage change year on year")+
  geom_line(size = 1.05, linetype=1, alpha = 0.85)+
  geom_hline(aes(yintercept=0), 
             colour= "#404040",
             linetype = 1)+
  theme(axis.text.x = element_text(angle=0))+
  theme(legend.position="bottom")+
  theme(axis.text = element_text(size = rel(1)))+
  theme(plot.title=(element_text(vjust =2)))+
  theme(panel.border = element_rect(linetype = 1, fill = NA))

FigCPM03_1


China

A Chinese “Final Warning”

According to the Origin from Wikipedia a Chinese Final Warning is a (translated) Russian proverb originating from the Soviet Union era. Where American military fighter jets regularly patrolled the Taiwan Strait, which led to formal protests being regularly lodged by the Chinese Communist Party in the form of a “final warning”. I’ve read that 70+ such warnings were issued, the Wikipedia origin cites 900 from a Russia source. Irrespective it’s a fitting term for the scenes in Taiwan of late.

With China conducting military drills in retaliation to US Speaker Nancy Pelosis visit. If deterring the US was the aim, then its failed. Other US officials appear emboldened, with a further delegation of US lawmakers arriving in Taiwan this week. - See Reuters for more.

The economic situation worsens as the official statistics published today miss estimates on multiple fronts. According to Bloomberg industrial production, retail sales and jobs all missed estimates. Youth unemployment now approaching 20%.

In a country where the books are expected to be cooked, this is not good. In addition the CCP has introduced a rate cut (10 bps), to stimulate the economy, whether this is too little too late romaines to be seen. Milken Institutes Chief Economist, William Lee on Bloomberg today cited sources estimating a growth of ~2% in GDP for the quarter. Some way off the 5% or so estimated to hit their yearly targets.