── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# this will stop R from presenting data in scientific notation, which can be annoying. options(scipen =999)blackrock_etf_screener <-read_csv("https://raw.githubusercontent.com/t-emery/sais-susfin_data/main/datasets/ishares_etf_screener_as_of_2023-12-27.csv")
Rows: 424 Columns: 18
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (10): ticker, name, asset_class, sub_asset_class, region, market, locat...
dbl (6): gross_expense_ratio_percent, net_expense_ratio_percent, net_asset...
dttm (2): incept_date, net_assets_as_of
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
`summarise()` has grouped output by 'asset_class'. You can override using the
`.groups` argument.
# A tibble: 10 × 4
# Groups: asset_class [3]
asset_class sub_asset_class total_assets number_of_funds
<chr> <chr> <dbl> <int>
1 Equity All Cap 95.5 23
2 Equity Large Cap 1.85 1
3 Equity Large/Mid Cap 42.4 10
4 Equity Small Cap 188. 18
5 Fixed Income Corporates 0.0413 1
6 Fixed Income Credit 1.99 2
7 Fixed Income Government 221. 24
8 Fixed Income High Yield 39.8 17
9 Fixed Income Inflation 27.2 4
10 Real Estate Real Estate Securities 7.15 4
Problem 4
MSCI ESG Fund Rating: Developed Market vs. Emerging Market
This chart ilustrates the distribution of MSCI ESG fund rating across all ETFs in both developed and emerging market. For ‘AA’ and ‘A’ ratings, there is a significantly higher count of funds from Developed Markets compared to Emerging Markets.
blackrock_etf_screener %>%filter(!is.na(msci_esg_fund_rating_aaa_ccc)) %>%ggplot() +aes(x = msci_esg_fund_rating_aaa_ccc, fill = market) +geom_bar() +scale_fill_manual(values =c(Developed ="#440154",Emerging ="#22908B",Frontier ="#FDE725") ) +labs(x ="MSCI ESG Fund Rating",y ="Number of Funds",title ="MSCI ESG Fund Rating: Developed Market vs. Emerging Market",caption ="Boyuan Gao" ) +coord_flip() +theme_minimal()
ETF Formation (by Markets)
This chart shows the ETF formation history by markets.
blackrock_etf_screener_w_new_features <- blackrock_etf_screener |>mutate(# if the sustainable_classification column is NA, then the fund is not an ESG fund.standard_or_esg =if_else(condition =is.na(sustainable_classification),true ="Standard",false ="ESG" ),# lubridate::year() extracts the year from a dateinception_year = lubridate::year(incept_date),# Change to a meaningful magnitude for the data. In asset management, billions is a good default. net_assets_bn_usd = net_assets_usd/10^9, )ggplot(blackrock_etf_screener_w_new_features) +aes(x = inception_year, fill = market) +geom_histogram(bins =30L) +scale_fill_viridis_d(option ="viridis", direction =1) +labs(x ="Inception Year",y ="Count",title ="ETF Formation by Markets",caption ="Boyuan Gao" ) +theme_minimal()
MSCI ESG Score and Carbon Intensity
This chart explores the relationship between the carbon intensity of ETFs and their ESG quality scores. From the chart, we can see there is a weak negative relationship between the two variables, meaning that funds with lower carbon intensity tend to have higher ESG scores.
This chart indicates the relationship between the MSCI ESG score of the fund and the MSCI ESG percent coverage. There is a weak positive relationship between the two variables, meaning that funds with higher MSCI ESG percentage coverage tend to have higher ESG scores.