Introduction

The sudden outbreak of COVID-19 made the world suffer a public health crisis as well as a heavy economic blow. From the lockdown of Wuhan, the city in China where COVID-19 first broke out in late January, to Trump Administration declares a nationwide emergency and issues an additional travel ban in mid-March, it only took 2 months for the whole world to be trapped in the crisis and enormous panic.

There has been extensive discussion on how much the global health emergency has affected the financial market. As ESG has been put under spotlight since its inception, the their financial performance is of many’s attention. This work is trying to show how stocks with higher ESG ratings have higher returns and lower return volatility during the first and most severe part of the COVID-19 crisis.

More Words on the Data Applied

The stock prices data used here are retrieved from Yahoo and iShares. The “benchmark” refers to S&P500. In the company analysis section, we narrowed the pool down to S&P500 as scholars show that a significant bias exists in ESG scores associated with firm size that is believed to be the result of larger firms having more ability to transfer information about ESG activities. So to mitigate such a risk of bias, the sample is restricted to large firms (S&P500).

The time span of interest is 03/13/2019 to 03/13/2021 as the event took place on 03/13/2020 when the Donald Trump administration announced a nationwide emergency and an additional travel ban on non-US citizen entering the American borders. The window period chosen is one year before and one year after the declaration.

A General Sense of ESG Fund since the Pandemic

Has ESG truly performed well and recovered fast in the pandemic or is it just some exaggerated advertising? Here is a chart that records the relative return of assets under ESG category and that of the benchmark during the said period.

pandemic_related_prices <- asset_prices_tbl %>%
  filter(date >= ymd("2019-03-13") & date <= ymd("2021-03-13")) %>%
  group_by(asset_type) %>%
  mutate(Relative_Price_Index = adjusted/first(adjusted) * 100) %>%
  mutate(Time = date) %>%
  ggplot(aes(x = Time, y = Relative_Price_Index, color = fct_reorder2(.f = asset_type, 
                                                           .x = Time, 
                                                           .y = Relative_Price_Index))) +
  geom_line() +
  labs(color = "") +
  theme(panel.background = element_rect(fill = "#E8F5E9"))

pandemic_related_prices

From the chart we can see that ESG funds had similar trend with the benchmark in their prices (even a bit lower) at the beginning. However, they outperformed the benchmark around after July 2020 (and showing a trend of even better performance).

Company-wise Analysis

Compare the change in stock prices for grouped companies overtime

Within the S&P500 holdings, two sub-groups have been divided, ESG Leaders and Non-Leaders. The leaders used here is identified by MSCI. However, due to the availability of MSCI raw data on the ESG score, an approximation of ESG MSCI USA Leaders ETF gathered by iShares is used to distinguish firms that have better ESG performance versus those who have much room to improve in this regard.

ESG_leader_pre_pandemic_prices %>%
  group_by(Ticker, Company) %>%
    summarize(observations = n(), mean_price = mean(Adjusted)) %>%
  arrange(desc(mean_price))
## `summarise()` has grouped output by 'Ticker'. You can override using the
## `.groups` argument.
ESG_leader_in_pandemic_prices %>%
  group_by(Ticker, Company) %>%
    summarize(observations = n(), mean_price = mean(Adjusted)) %>%
  arrange(desc(mean_price))
## `summarise()` has grouped output by 'Ticker'. You can override using the
## `.groups` argument.
Non_ESG_Leader_pre_pandemic %>%
  group_by(Ticker, Company) %>%
    summarize(observations = n(), mean_price = mean(Adjusted)) %>%
  arrange(desc(mean_price))
## `summarise()` has grouped output by 'Ticker'. You can override using the
## `.groups` argument.
Non_ESG_Leader_in_pandemic %>%
  group_by(Ticker, Company) %>%
    summarize(observations = n(), mean_price = mean(Adjusted)) %>%
  arrange(desc(mean_price))
## `summarise()` has grouped output by 'Ticker'. You can override using the
## `.groups` argument.

After wrangling the datasets by combining the ESG leaders dataset with stock prices pre- and post-pandemic, we can now visualize the change of stock price of ESG leaders and non-ESG leaders.

plot_all_time <- ggplot(categorized_data_all, aes(x = Date, y = Adjusted/first(Adjusted) * 100,
                                                  color = Ticker)) +
  geom_line() +
  labs(
    x = "Time",
    y = "Stock Prices",
    title = "Relative Change in Stock Prices before and during COVID-19",
    subtitle = "Comparison between ESG Leading and Non-ESG Leading Groups",
    caption = "Data Source: Yahoo Finance, iShares"
  ) +
  facet_wrap(. ~Category, scales = "free", dir = "v") +
  theme_minimal() +
  theme(legend.position = "none")

plot_all_time

Zooming in…

For ESG leader group, let’s look at Mettler-Toledo International, Equinix, and BlackRock.

And for Non leaders, we can take a look at NVR, Booking Holdings, and AutoZone.

d3 <- rbind(d1, d2)

p3 <- d3 %>%
  ggplot(aes(x = date, y = adjusted/first(adjusted)*100, color = symbol)) +
  geom_line() +
  geom_smooth(method = NULL, color = "red", fill = "#69b3a2", se = TRUE) +
  labs(x = "Time",
       y = "Stock Prices",
       title = "Compare relative change in stock prices between ESG leaders and non leaders",
       caption = "Data Source: Yahoo Finance") +
  facet_wrap(. ~category, scale = "free", dir = "h") +
  theme_minimal()

p3
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

From the charts above, we can see that the top leaders had a smaller fluctuation in their stock prices than those that are not ESG leaders, even during the most difficult time (where almost all stocks dropped significantly). Besides, the slope of growth after the low point is larger for the ESG leaders than for the other group, which means that the former recovered faster.

ESG and regular assets volatility – Alpha and Information Ratio

In addition to observing each holding’s performance, we can also look at ESG assets and their returns. One way to look at the performance of the stocks is to look at their spread over a benchmark. Here I use alpha and information ratio as opposed to Sharpe ratio as the former measures the risk-adjusted returns relative to a certain benchmark while the latter compares the risk-adjusted returns to the risk-free rate, which is not so applicable in a world health emergency scenario.

To calculate information ratio, we first need to know asset returns and benchmark returns.

esg_asset_returns <- all_ESG_asset_returns %>%
  filter(str_detect(asset_type, "ESG")) %>%
  left_join(benchmark_returns, by = "date")

esg_asset_returns
capm_return_tbl <- rbind(return_capm_esg, return_capm_regular)

capm_return_clean = subset(capm_return_tbl, 
                           select = c(asset_type, AnnualizedAlpha, InformationRatio))

capm_return_clean

Therefore, from the above calculation we can see that ESG assets have a much higher annualized alpha and information ratio than regular ones with the benchmark of S&P500 (above 0 vs. below 0), which means that ESG assets do have a resilient return even during a turbulent period.

Conclusion

From this short but powerful data visualization and analysis, we can see that ESG did perform well. On the one hand, companies with higher ESG performance saw less fluctuation in the stock price change. On the other hand, ESG assets have a higher information ratio and a higher alpha against the benchmark than regular assets. Although ESG has been a topic in dispute in recent years, we do hope that ESG assets can play an important role in stabilizing the financial market in times of crisis, which would definitely be great news to the investors and to building up a better world in general.