Cross Comparison of American and Japanese ETF Funds (ESG/non-ESG)

Author

Okung Obang

Executive Summary:

  • It is difficult to confidently conclude that the non-ESG ETFs and ESG ETFs in either market over-perform its peer fund type or market counterpart given a number of metrics.

  • However, looking at individual metrics provides a clearer picture on the performance of the type of fund within its given market as if we look at the average return to expense cost of the funds, Japanese ESG ETFs significantly out-performs its counterparts.

  • If we look at the holdings and diversification of the types of funds in each market, the American market is more sophisticated than the Japanese market.

Introduction:

When I traveled to Japan last month, I was shocked to see the number of ESG advertisements in taxis within Tokyo that proclaimed how firms were making the transition to ESG and sustainability. On the other hand, in the US, the sight of such advertisements is rare, which led me to multiple questions such as:

  • How does the Japanese and US market view the transition to sustainability and net-zero emissions?

  • Has there been any differences between the markets and types of funds in terms of performance?

  • Can we confidently say that one market and type of fund performs better than the others?

To do a comparison, I chose to look at the exchange-traded fund markets (ETFs) in both regions as they hold diverse investment funds, are easily accessible, and have been growing in the amount of cash invested over the years. ETF markets provide a glimpse of how the overall market values specific investments and could provide interesting insights to how ESG ETFs are seen compared to traditional funds in each region.

Comparison Metrics

To compare both regions, there are a few metrics that provide insight into the performance of ETFs in each region.

1) Returns:

Returns over a year, three years, five, and ten years indicates how well or poorly a fund is performing in the market. Typically, the higher the return, the better the performance.

2) Expense Ratios:

Expense ratios of a fund indicate the fees on an investment and typically lower is better, but that does not mean that more costlier funds do not produce higher returns.

3) Holdings and Asset Allocation:

The number of holdings and the distribution of allocation indicates how diverse the fund is and various points of exposure. Typically, a higher amount of holdings indicates more diversification, which helps to reduce idiosyncratic risk of the fund.

4) Liquidity, Net Asset Value (NAV) Tracking Error, Bid Ask Spread

The liquidity of the market indicates the “fairness” of the market, as the more liquid the market is, the easier it is to withdraw capital. It also can indicate the overall health of the market as well.

The NAV tracking error shows how closely funds follow their benchmark and the lower the tracking error, the better the fund follows its benchmark.

The bid ask spread indicates how the market views the value of the fund. The higher the spread the more valuable the market sees the fund or an investment to be.

5) Size of Assets in Funds:

The size of assets within ETF could indicate how liquid the fund is and oftentimes, larger funds offer better liquidity to smaller ones.

6) Risk:

The volatility in the market represents the risk of the ETF. The higher the volatility, the market sees more risk within the fund.

Code
# Install R plotly
install.packages('plotly', repos = "http://cran.us.r-project.org")
Installing package into 'C:/Users/okung/AppData/Local/R/win-library/4.2'
(as 'lib' is unspecified)
package 'plotly' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\okung\AppData\Local\Temp\RtmpsjhOwA\downloaded_packages
Code
# Load necessary library
# Load necessary library
library(tidyverse) 
Warning: package 'tidyverse' was built under R version 4.2.2
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0     ✔ purrr   1.0.1
✔ tibble  3.1.8     ✔ dplyr   1.1.0
✔ tidyr   1.3.0     ✔ stringr 1.5.0
✔ readr   2.1.2     ✔ forcats 0.5.2
Warning: package 'ggplot2' was built under R version 4.2.2
Warning: package 'tidyr' was built under R version 4.2.2
Warning: package 'purrr' was built under R version 4.2.2
Warning: package 'dplyr' was built under R version 4.2.2
Warning: package 'stringr' was built under R version 4.2.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
Code
library(janitor)
Warning: package 'janitor' was built under R version 4.2.2

Attaching package: 'janitor'

The following objects are masked from 'package:stats':

    chisq.test, fisher.test
Code
library(here)
Warning: package 'here' was built under R version 4.2.3
here() starts at C:/Users/okung/OneDrive/Johns Hopkins - SAIS/2022-2023/SP23/Sustainable Finance/Week 11
Code
library(readxl)
Warning: package 'readxl' was built under R version 4.2.2
Code
library(plotly)
Warning: package 'plotly' was built under R version 4.2.3

Attaching package: 'plotly'

The following object is masked from 'package:ggplot2':

    last_plot

The following object is masked from 'package:stats':

    filter

The following object is masked from 'package:graphics':

    layout
Code
# Open processed data

etf <- read.csv("C:/Users/okung/OneDrive/Johns Hopkins - SAIS/2022-2023/SP23/Sustainable Finance/Week 11/etf cross comparison.csv")

ETF Funds and Holdings Comparison

Code
year_etf <- etf |>
  distinct(Name, inception_year, location, ESG) |>
  group_by(inception_year, location, ESG)|>
  summarize(count=n())|>
  ungroup()
`summarise()` has grouped output by 'inception_year', 'location'. You can
override using the `.groups` argument.
Code
year_etf
# A tibble: 75 × 4
   inception_year location      ESG     count
            <int> <chr>         <chr>   <int>
 1           1993 United States non-ESG     1
 2           1995 Japan         non-ESG     1
 3           1995 United States non-ESG     1
 4           1996 United States non-ESG    17
 5           1998 United States non-ESG    11
 6           1999 United States non-ESG     1
 7           2000 United States non-ESG    44
 8           2001 Japan         non-ESG     6
 9           2001 United States ESG         1
10           2001 United States non-ESG    18
# … with 65 more rows
Code
year_etf |>
  ggplot(mapping = aes(x=inception_year, y = count, fill = ESG)) + 
  geom_col(position = "dodge") +
  scale_fill_manual(values = c("coral", "olivedrab3")) +
  facet_wrap(~location) +
   labs(title = "Figure 1: Introduction of ETFs in Japan & the US",
       subtitle = str_wrap("The US market has introduced a significant amount of ETF funds since 2010."),
       x = " ",
       y = "",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author")
Warning: Removed 1 rows containing missing values (`geom_col()`).

Looking at the data taken from Bloomberg, the United States’ ETF market is much more sophisticated than the Japanese market when looking at the number of ETFs introduced over the years. In particular, the rise of funds labelled as ESG each year has increased significantly since 2015, indicating that the US market has taken into consideration the Paris Accord which was ratified in 2015. On the other hand, the number of ETFs introduced in Japan has been minuscule, as there is no big culture in participating in equity markets.

Number of ETFs Winner: US non-ESG ETFs

Code
# Look at holdings per market and ESG
hold_etf <- etf |>
  group_by(location, ESG) |>
  summarize(avg_hold = mean(Holdings, na.rm = TRUE)) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
hold_etf
# A tibble: 4 × 3
  location      ESG     avg_hold
  <chr>         <chr>      <dbl>
1 Japan         ESG         283.
2 Japan         non-ESG     413.
3 United States ESG         311.
4 United States non-ESG     285.
Code
ggplot(hold_etf, aes(x = location, y = avg_hold, fill = ESG)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_manual(values = c("coral", "olivedrab3")) +
  geom_text(aes(label = round(avg_hold)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
  labs(title = "Figure 2: Holdings per Market and ESG",
       x = "Location",
       y = "Average Holdings",
       fill = "ESG",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author")+
  theme_minimal()

Typically, the number of holdings indicates how diverse a fund is. When the number of holdings are large, it signifies risk should also be diversified within the fund. Here in this graph, we can see that the within the United States, the average number of holdings between ESG and non-ESG ETFs are not too different, in comparison to the Japanese market where there is about a different of over a hundred holdings between the types of funds. Based off this data, we can see that traditional funds in Japan seem to be more diversified and less risky than ESG funds, while within the US ESG funds are more diversified and could be less risky than traditional funds. So, in general, ESG funds still has room for improvements for diversification in objectives of net-zero objectives and sustainability.

Average Holdings Winner: Japan non-ESG ETFs

Return Performance

Code
# Let's compare average returns over 1yr, 3yrs, 5yrs, and 10yrs
returns_etf <-etf |>
  group_by(location, ESG) |>
  summarize(yr_avg_return = mean(X1.Yr.Return, na.rm = TRUE),
            three_yr_avg_return = mean(X3.Yr.Return, na.rm = TRUE),
            five_yr_avg_return = mean(X5.Yr.Return, na.rm = TRUE),
            ten_yr_avg_return = mean(X10.Yr.Return, na.rm = TRUE)
            ) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
returns_etf
# A tibble: 4 × 6
  location      ESG     yr_avg_return three_yr_avg_return five_yr_avg_…¹ ten_y…²
  <chr>         <chr>           <dbl>               <dbl>          <dbl>   <dbl>
1 Japan         ESG            0.0746               0.152         0.0600  0.0859
2 Japan         non-ESG        0.0468               0.158         0.0552  0.0776
3 United States ESG           -0.0655               0.147         0.0825  0.114 
4 United States non-ESG       -0.0587               0.137         0.0519  0.0713
# … with abbreviated variable names ¹​five_yr_avg_return, ²​ten_yr_avg_return
Code
returns_etf_long <- returns_etf %>%
  gather(key = "return_period", value = "avg_return", -location, -ESG) %>%
  mutate(return_period = factor(return_period, levels = c("yr_avg_return", "three_yr_avg_return", "five_yr_avg_return", "ten_yr_avg_return"),
                               labels = c("1 Year", "3 Years", "5 Years", "10 Years")))

ggplot(returns_etf_long, aes(x = ESG, y = avg_return, fill = return_period)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.8) +
  geom_text(aes(label = round(avg_return, 2)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
  facet_wrap(~ location, scales = "free_x") +
  scale_fill_manual(values = c("red3", "orange2", "gold", "goldenrod3")) +
  theme_minimal() + 
     labs(title = "Figure 3: Average Returns by ESG and Return Period",
       subtitle = str_wrap("ESG funds perform similarly or even better than their counterparts"),
       x = "Type of Fund ",
       y = " Average Return",
       fill = "Return Period",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author")

When looking at the difference of funds labelled as ESG or non-ESG in both markets, it seems that the ESG funds perform similarly or even better than their non-ESG counterparts. Notably, both markets and types of funds show very high three year returns which could be attributed to overall improved market performance during the pandemic. An interesting point to note is that the Japanese ETF market has seemed to produce positive returns in comparison to the US market which could be due to a number of reasons such as how closely the market is linked with its benchmark, the amount of risk within the market, etc.

1 Year Average Return Winner: Japan ESG ETFs

3 Year Average Return Winner: Japan non-ESG ETFs

5 Year Average Return Winner: US ESG ETFs

10 Year Average Return Winner: US ESG ETFs

Asset Flow

Code
# Let's compare the average flows and total flow into each market
flow_etf <-etf |>
  group_by(ESG) |>
  summarize(avg_yr_flow = mean(X1Y.Flow, na.rm = TRUE),
            avg_three_yr_flow = mean(X3Y.Flow, na.rm = TRUE),
            tot_yr_flow = sum(X1Y.Flow, na.rm = TRUE),
            tot_three_yr_flow = sum(X3Y.Flow, na.rm = TRUE),
            avg_open_int = mean(Open.Interest, na.rm = TRUE),
            ) |>
  ungroup()
flow_etf
# A tibble: 2 × 6
  ESG     avg_yr_flow avg_three_yr_flow tot_yr_flow tot_three_yr_flow avg_open…¹
  <chr>         <dbl>             <dbl>       <dbl>             <dbl>      <dbl>
1 ESG           -32.9              260.     -81436.           644042.      5990.
2 non-ESG       149.               667.    3119139.         14013056.     94655.
# … with abbreviated variable name ¹​avg_open_int
Code
flow_loc_etf <- etf |>
  group_by(location,ESG) |>
  summarize(avg_yr_flow = mean(X1Y.Flow, na.rm = TRUE),
            avg_three_yr_flow = mean(X3Y.Flow, na.rm = TRUE),
            tot_yr_flow = sum(X1Y.Flow, na.rm = TRUE),
            tot_three_yr_flow = sum(X3Y.Flow, na.rm = TRUE)) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
flow_loc_etf
# A tibble: 4 × 6
  location      ESG     avg_yr_flow avg_three_yr_flow tot_yr_flow tot_three_yr…¹
  <chr>         <chr>         <dbl>             <dbl>       <dbl>          <dbl>
1 Japan         ESG            3.23              88.8       1316.         36159.
2 Japan         non-ESG       -9.66             406.      -14456.        607736.
3 United States ESG          -40.0              294.      -82753.        607883.
4 United States non-ESG      161.               687.     3133595.      13405320.
# … with abbreviated variable name ¹​tot_three_yr_flow
Code
ggplot(flow_loc_etf, aes(x = location, y = avg_yr_flow, fill = ESG)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.8, color = "white") +
  geom_text(aes(label = round(avg_yr_flow, 2)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
     labs(title = "Figure 4: Average Yearly Flow by Location and ESG",
       x = "Location",
       y = "Average Yearly Flow (Millions of USD)",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author")+
  facet_wrap(~ ESG, ncol = 2) +
  theme_minimal() +
  scale_fill_manual(values = c("coral", "olivedrab3"))

Code
ggplot(flow_loc_etf, aes(x = location, y = tot_yr_flow, fill = ESG)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.8, color = "white") +
  geom_text(aes(label = round(tot_yr_flow)), position = position_dodge(width = 0.8), vjust = -0.8, size = 3) +
  labs(title = "Figure 5: Total Yearly Flow by Location and ESG",
    x = "Location", y = "Total Yearly Flow (Millions of USD)",
    fill = "Type of ESG") +
  facet_wrap(~ ESG, ncol = 2) +
  theme_minimal() +
  scale_fill_manual(values = c("coral", "olivedrab3"))

The total and average flow of assets into the market indicates the preferences of the market on where to put their investments. Notably, non-ESG ETF funds in the United States experience the most flow in sum and on average, indicating that the market prefers these funds compared to ESG funds and that investing in ETF funds in the United States is more popular. So, ESG funds in both markets have work to do to direct more assets (and interest) into the ESG-conscious funds.

Yearly Asset Flow Winner: US non-ESG ETFs

Expense Ratios and Premiums

Code
#Might see differences in expense ratios in each market?
expense_etf <- etf |>
  group_by(location, ESG) |>
  summarize(avg_exp= mean(Expense.Ratio, na.rm = TRUE)*100) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
expense_etf
# A tibble: 4 × 3
  location      ESG     avg_exp
  <chr>         <chr>     <dbl>
1 Japan         ESG       0.238
2 Japan         non-ESG   0.370
3 United States ESG       0.435
4 United States non-ESG   0.528
Code
expense_etf |>
  ggplot(mapping = aes(x = ESG, y = avg_exp, fill = ESG)) + 
  geom_bar(stat = "identity") + facet_wrap(~location) + theme_minimal() +
  geom_text(aes(label = round(avg_exp,2)), position = position_dodge(width = 0.8), vjust = -0.8, size = 3) +
  scale_fill_manual(values = c("coral", "olivedrab3"))+
     labs(title = "Figure 6: Average expense ratio by Location and Fund",
       x = " ",
       y = "Average Expense Ratio",
       fill = "Type of Fund",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author")

Code
# Premiums?
premium_etf <-etf |>
  group_by(location, ESG) |>
  summarize(avg_premium = mean(X52W.Avg.Prem, na.rm = TRUE)*100) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
premium_etf
# A tibble: 4 × 3
  location      ESG     avg_premium
  <chr>         <chr>         <dbl>
1 Japan         ESG         -0.0127
2 Japan         non-ESG     -0.169 
3 United States ESG          0.0528
4 United States non-ESG     -0.0135
Code
premium_etf |>
  ggplot(mapping = aes(x=ESG, y= avg_premium, fill = ESG)) +
  geom_bar(stat = "identity") +
  facet_wrap(~location) +
  theme_minimal() +
  geom_text(aes(label = round(avg_premium, 3)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
  scale_fill_manual(values = c("coral", "olivedrab3")) +
  labs(title = "Figure 7: Average Premium by Location and Fund",
       subtitle = str_wrap("Non-ESG ETFs in Japan have a large negative premium"),
       x = " ",
       y = " Average Premium",
       fill = "Type of Fund",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author")

The expense ratio of each market is important to note as it indicates the cost for investments. Notably the non-ESG ETF funds in Japan has a significantly negative premium which could be attributed to the Bank of Japan’s participation in subsidizing the ETF market. On the other hand, within the United States, the ESG ETF funds have a positive premium, indicating that the market views these funds as holding a bit more risk.

Expense Ratio Winner: Japan ESG ETFs

Premium Winner: Japan non-ESG ETFs

Allocations

Code
# How is the distribution of funds within ETFs in each market?

allo_etf <- etf |>
  group_by(location, ESG, allocation) |>
  summarize(avg_perc = mean(percentage, na.rm = TRUE),
            avg_fund = mean(Fund.Assets..MLN.USD., na.rm = TRUE)) |>
  ungroup() |>
  mutate(allocation_fund = avg_fund * (avg_perc))
`summarise()` has grouped output by 'location', 'ESG'. You can override using
the `.groups` argument.
Code
allo_etf
# A tibble: 44 × 6
   location ESG   allocation    avg_perc avg_fund allocation_fund
   <chr>    <chr> <chr>            <dbl>    <dbl>           <dbl>
 1 Japan    ESG   Comm            0.0878     669.          58.7  
 2 Japan    ESG   Cons Cyclical   0.203      669.         136.   
 3 Japan    ESG   Cons Non-Cycl   0.189      669.         126.   
 4 Japan    ESG   Divsf           0.0023     669.           1.54 
 5 Japan    ESG   Energy          0.0117     669.           7.85 
 6 Japan    ESG   Fin             0.120      669.          80.2  
 7 Japan    ESG   Govt            0.0004     669.           0.267
 8 Japan    ESG   Ind             0.235      669.         157.   
 9 Japan    ESG   Materials       0.0405     669.          27.1  
10 Japan    ESG   Tech            0.124      669.          82.8  
# … with 34 more rows
Code
allo_etf |>
  ggplot(mapping=aes(x= allocation, y=avg_perc, fill = ESG)) +
  geom_bar(position ="dodge", stat = "identity", width = 0.8) +
  facet_wrap(~location) +
  theme_minimal() +
  ggtitle("Figure 8: Allocation Distribution by Fund Type and Location") +
  labs(x = "Allocation", y = "Average Percentage", fill = "Type of Fund") +
  scale_fill_manual(values = c("skyblue1", "goldenrod2")) +
  theme(axis.text.x= element_text(angle = 90, vjust = -0.5, hjust =1)) +
  geom_text(aes(label = round(avg_perc,2)), position = position_dodge(width=0.4), vjust = 4, hjust = 0.5, size = 2)

Code
# Create a bar plot of fund distribution by allocation, location, and type of fund
ggplot(allo_etf, aes(x = allocation, y = allocation_fund, fill = ESG)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~location) +
  labs(x = "Allocation", y = "Average Fund Assets (Millions of USD)",
       fill = "Type of Fund", caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author") +
  ggtitle("Figure 9: Fund Distribution by Allocation, Location, and Type of Fund") +
  theme_minimal() +
  scale_fill_manual(values = c("skyblue1", "goldenrod2")) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3, hjust = 1),
        axis.text.y = element_text(size = 8)) +
  geom_text(aes(label = scales::comma(round(allocation_fund)), y = allocation_fund),
            position = position_dodge(width = 0.9), vjust = -1.0, size = 2)

Note: Disregard “Govt” allocations for Japan as only 2 funds distributed funds towards government.

Looking at the allocations across each market, it is notable than many ETF funds in Japan focus on communications, consumer cyclical and non-cyclical demand, tech, and industry, while many American ETF funds put more focus into energy, finance, tech. Notably, the ESG ETFs in both markets target similar allocation distributions as valuable sectors to direct investment into to reach net-zero and sustainable goals.

Net Asset Value (NAV) Tracking Error and Bid-Ask-Spread

Code
# NAV Trk Error across location and ESG
nav_etf <- etf |>
  group_by(location, ESG) |>
  summarize(avg_nav = mean(X1.Yr.NAV.Trk.Error, na.rm = TRUE),
            avg_bid = mean(Avg.Bid.Ask.Spread, na.rm = TRUE))|>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
nav_etf
# A tibble: 4 × 4
  location      ESG     avg_nav avg_bid
  <chr>         <chr>     <dbl>   <dbl>
1 Japan         ESG      0.0283 0.00382
2 Japan         non-ESG  0.0740 0.00382
3 United States ESG      0.0204 0.00674
4 United States non-ESG  0.0320 0.00687
Code
ggplot(nav_etf, aes(x = location, y = avg_nav, fill = ESG)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.8, color = "white") +
  geom_text(aes(label = round(avg_nav, 2)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
  labs(x = "Location", y = "Average NAV", caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author") +
  ggtitle("Figure 10: Average NAV across Location and ESG") +
  facet_wrap(~ ESG, ncol = 2) +
  theme_minimal() +
  scale_fill_manual(values = c("coral", "olivedrab3"))

Code
ggplot(nav_etf, aes(x = location, y = avg_bid, fill = ESG)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.8, color = "white") +
  geom_text(aes(label = round(avg_bid, 4)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
  labs(x = "Location", y = "Average Bid Ask Spread", caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author") +
  ggtitle("Figure 11: Average BID across Location and ESG") +
  facet_wrap(~ ESG, ncol = 2) +
  theme_minimal() +
  scale_fill_manual(values = c("coral", "olivedrab3"))

Looking at Figure 10, the ESG market in both regions tend to follow their benchmarks more closely than their traditional counterparts, indicating less risk. The US market has an average NAV tracking error that is lower than the Japanese NAV error which is a sign that the US ESG ETFs are performing better.

Looking at Figure 11, the higher spreads in the United States indicates that the market overall values investments higher than compared to the Japanese market.

NAV Tracking Error Winner: US ESG ETFs

Average BID Winner: US non-ESG ETFs

Liquidity

Code
# Volatility of each?
vol_etf <-etf |>
  group_by(location, ESG) |>
  summarize(avg_30D_vol = mean(X30D.Vol, na.rm = TRUE),
            avg_imp_liq = mean(Implied.Liquidity, na.rm = TRUE)) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
vol_etf
# A tibble: 4 × 4
  location      ESG     avg_30D_vol avg_imp_liq
  <chr>         <chr>         <dbl>       <dbl>
1 Japan         ESG           1696.   30913708.
2 Japan         non-ESG     124320.   81134419.
3 United States ESG          79537.   63980414.
4 United States non-ESG     594414.   27183970.
Code
# Look at the bid-ask-spread as it indicates risk of the funds in the market
bas_etf <- etf |>
  group_by(location,ESG) |>
  summarize(avg_avg_bas = mean(Avg.Bid.Ask.Spread, na.rm = TRUE)) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
bas_etf
# A tibble: 4 × 3
  location      ESG     avg_avg_bas
  <chr>         <chr>         <dbl>
1 Japan         ESG         0.00382
2 Japan         non-ESG     0.00382
3 United States ESG         0.00674
4 United States non-ESG     0.00687
Code
vol_etf_plot <- ggplot(vol_etf, aes(x = ESG, y = avg_imp_liq, fill = ESG)) +
  geom_bar(stat = "identity", ) + scale_y_continuous() +
  facet_wrap(~ location) +
  scale_fill_manual(values = c("coral", "olivedrab3")) +
  geom_text(aes(label = round(avg_imp_liq/10^6)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3) +
  labs(x = "", y = "Average Implied Liquidity",
       title = "Figure 12: Comparison of Average Implied Liquidity",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author") +
  theme_minimal()

vol_etf_plot

The implied liquidity is the highest within non-ESG ETFs in Japan, which implies that market fairness is higher compared to the ESG funds in Japan, and both types of funds in the United States. But this could be due to the Bank of Japan’s intervention within the ETF market. If we disregard the liquidity of non-ESG ETFs in Japan, the ESG funds in both markets indicate better ‘health’ compared to the non-ESG ETFs in the United States.

Implied Liquidity Winner: Japan non-ESG ETFs

Expense Costs vs Returns

Code
# Return-Cost ratio

ret_cost_etf <-etf |>
  group_by(location, ESG) |>
  summarize(yr_rc = mean(X1.Yr.Return, na.rm = TRUE)/mean(Expense.Ratio, na.rm = TRUE),
                         thryr_rc = mean(X3.Yr.Return, na.rm = TRUE)/mean(Expense.Ratio, na.rm = TRUE),
            fvyr_rc = mean(X5.Yr.Return, na.rm = TRUE)/mean(Expense.Ratio, na.rm = TRUE),
            tenyr_rc =mean(X10.Yr.Return, na.rm = TRUE)/mean(Expense.Ratio, na.rm = TRUE)) |>
  ungroup()
`summarise()` has grouped output by 'location'. You can override using the
`.groups` argument.
Code
ret_cost_etf
# A tibble: 4 × 6
  location      ESG     yr_rc thryr_rc fvyr_rc tenyr_rc
  <chr>         <chr>   <dbl>    <dbl>   <dbl>    <dbl>
1 Japan         ESG      31.4     63.9   25.2      36.1
2 Japan         non-ESG  12.7     42.8   14.9      21.0
3 United States ESG     -15.0     33.9   19.0      26.1
4 United States non-ESG -11.1     26.0    9.83     13.5
Code
ret_cost_etf_long <- gather(ret_cost_etf, key = "Time_Period", value = "Return_Expense_Ratio", -location, -ESG)


ggplot(ret_cost_etf_long, aes(x = location, y = Return_Expense_Ratio, fill = Time_Period)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_grid(. ~ ESG) +
  geom_text(aes(label = round(Return_Expense_Ratio, 1)), position = position_dodge(width = 0.8), vjust = -0.3, size = 2.5) +
  labs(title = "Average ETF Return-Expense Ratio",
       x = "Location", y = "Return-Expense Ratio",
       caption = "Source: Bloomberg | Latest Data: 2023 | Calculations by author",
       fill = "Time Period") +
  scale_fill_manual(values = c("red3", "orange2", "gold", "goldenrod3"),
                    labels = c("1-Year", "3-Year", "5-Year", "10-Year")) +
  theme_minimal()

When looking at the return to expense ratio across markets and ESG ETFs, the Japanese ESG ETFs perform better than their counterparts, indicating that the

Return-to-Expense Ratio Winner: Japan ESG ETFs

Conclusion

Looking through the calculated metrics, it is difficult to clearly say whether ESG or non-ESG funds in the United States or Japan are clearly outperforming their peers. But if we look solely at what to invest given the returns and the costs, the Japanese ESG ETF market outperforms the other funds significantly on this metric. Depending on chosen metrics, a type of ETF in one market can out perform its peers, but on a different measurement, the opposite result could occur. As many of these metrics are dependent on general market views and market performance, advocates for ESG-conscious funds have a challenge in showing the incentives of ESG ETFs against traditional ETFs in both markets.