Last week

Included this week:

  • Flash Estimate for the Harmonised Index of Consumer Prices (30th September)
  • Estimated Inflation by Decile
  • Hours Worked by Age Group
  • Capital Goods & Industrial Price Index
  • Value of Merchandise Trade (Exports & Imports)

Budget 2023

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:

  • 2023: 7%
  • 2022: 5.25% (Core)
  • 2022: 4.50% (Core)

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:

  • HTB extended for two years. An independent review into HTB to take place.
  • Vacant home tax, units occupied for less than 30 days in a 12 month period will face 3 times the applicable LPT (Local Property Tax). Classifying vacant homes has been a contentious issue.
  • A tax credit of €500 for 400,000 renters.
  • Landlords expenses increase in eligible expenditure for pre-letting expenses to €10,000 will cost just €2 million in a full year. This is in place until 2025, at least.
  • Concrete Levy of 10%, this has been contentious and has continued to receive pushback.
  • 2,500 additional apprentices to be recruited.
  • Additional fundung for Approved Housing Bodies.

The Irish Times have summarised the points by One off vs “Multi-year”/Permanent measure


HICP

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)

Estimated Inflation

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.

Logically the next question is what income deciles are our buyers belonging to.

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

Other CSO Data

Hours Worked

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)

Capital Goods Index

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

Industrial Price Index

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

Value of Merchandise Trade

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="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 

Appendix

Value of Merchandise Trade

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

Parent Groups = 0, 8

## 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 = ','))

Parent Groups = 2, 5, 6, 7

## 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 = ','))

Parent Groups = 3, 4

## 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 = ','))

Parent Groups = 1, 9

## 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 = ','))