Graphs_Week_4

Graphs for 02/16/2023

(Bentje)

library(tidyverse) 
Warning: Paket 'tidyverse' wurde unter R Version 4.2.2 erstellt
── 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.3     ✔ forcats 1.0.0
Warning: Paket 'ggplot2' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'tibble' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'tidyr' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'readr' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'purrr' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'dplyr' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'stringr' wurde unter R Version 4.2.2 erstellt
Warning: Paket 'forcats' wurde unter R Version 4.2.2 erstellt
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
# assign the url to `github_raw_csv_url`
github_raw_csv_url <- "https://raw.githubusercontent.com/t-emery/sais-susfin_data/main/datasets/blackrock_etf_screener_2022-08-30.csv"

# read in the data, and assign it to the object `blackrock_etf_data`
blackrock_etf_data <- read_csv(github_raw_csv_url)
Rows: 393 Columns: 22
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (14): ticker, name, incept_date, net_assets_as_of, asset_class, sub_asse...
dbl  (8): gross_expense_ratio_percent, net_expense_ratio_percent, net_assets...

ℹ 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.
blackrock_etf_data <- blackrock_etf_data |> 
  mutate(across(contains("date"), lubridate::mdy)) |>
  mutate(net_assets_usd_bn = net_assets_usd_mn/10^3) |> 
  select(-net_assets_as_of)|>
  rename(msci_esg_rating = sustainability_characteristics_msci_esg_fund_ratings_msci_esg_fund_rating_aaa_ccc)  |> 
  rename(co2_intensity = msci_weighted_average_carbon_intensity_tons_co2e_m_sales)
blackrock_etf_data |> 
  filter(is_esg == "ESG Fund" & region != "Global" & region != "North America")
# A tibble: 0 × 22
# … with 22 variables: ticker <chr>, name <chr>, incept_date <date>,
#   gross_expense_ratio_percent <dbl>, net_expense_ratio_percent <dbl>,
#   net_assets_usd_mn <dbl>, asset_class <chr>, sub_asset_class <chr>,
#   region <chr>, market <chr>, location <chr>, investment_style <chr>,
#   msci_esg_rating <chr>, msci_esg_quality_score_0_10 <dbl>,
#   co2_intensity <dbl>, msci_esg_percent_coverage <dbl>,
#   sustainable_classification <chr>, name_wo_ishares_etf <chr>, …
# there are only ESG Funds for North America and Global 

To get a better idea of the size and relevance of the esg/regular funds, I gathered some general statistics.

blackrock_etf_data |> 
  group_by(region, market, is_esg) |> 
  summarize(mean_assets = mean(net_assets_usd_bn), 
            median_assets = median(net_assets_usd_bn),
            mean_msci_10_0 = mean(msci_esg_quality_score_0_10), 
            mean_co2 = mean(co2_intensity), 
            median_co2 = median(co2_intensity), 
            mean_coverage = mean(msci_esg_percent_coverage))
`summarise()` has grouped output by 'region', 'market'. You can override using
the `.groups` argument.
# A tibble: 14 × 9
# Groups:   region, market [11]
   region          market is_esg mean_…¹ media…² mean_…³ mean_…⁴ media…⁵ mean_…⁶
   <chr>           <chr>  <chr>    <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
 1 Asia Pacific    Devel… Regul…  1.45    0.567     8.04    158.    118.    99.8
 2 Asia Pacific    Emerg… Regul…  1.87    0.548    NA        NA      NA     NA  
 3 Europe          Devel… Regul…  0.806   0.197     8.87    139.    124.    98.0
 4 Europe          Emerg… Regul…  0.140   0.131    NA        NA      NA     NA  
 5 Global          Devel… ESG F…  2.02    0.419     9.02    138.    104.    98.4
 6 Global          Devel… Regul…  4.32    0.746    NA        NA      NA     NA  
 7 Global          Emerg… ESG F…  1.44    0.0601    8.90    161.    168.   100  
 8 Global          Emerg… Regul…  7.89    0.394    NA        NA      NA     NA  
 9 Global          Front… Regul…  0.352   0.352    NA        NA      NA     NA  
10 Kuwait          Emerg… Regul…  0.0291  0.0291    3.44    561.    561.    69.1
11 Latin America   Emerg… Regul…  1.34    0.676     4.43    394.    352.    97.0
12 Middle East an… Emerg… Regul…  0.400   0.207     5.86    506.    482.    94.6
13 North America   Devel… ESG F…  1.85    0.594     8.36    124.    104.    94.4
14 North America   Devel… Regul…  7.97    0.934    NA        NA      NA     NA  
# … with abbreviated variable names ¹​mean_assets, ²​median_assets,
#   ³​mean_msci_10_0, ⁴​mean_co2, ⁵​median_co2, ⁶​mean_coverage

I then decided that it might make more sense to compare only funds focusing on developed markets since the biggest ESG Funds are the one on North America and the Global-Developed one. As disclosing ESG information requires resources and infrastructure, ratings of funds in emerging markets might not be as precise as in developed markets and bias their rating negatively.

summary_region_market <- blackrock_etf_data |> 
  filter(market == "Developed") |> #better comparison to North America which is largest
  group_by(region, is_esg) |> 
  summarize(mean_assets = mean(net_assets_usd_bn),
            total_assets = sum(net_assets_usd_bn),
            median_assets = median(net_assets_usd_bn),
            mean_msci_10_0 = mean(msci_esg_quality_score_0_10, na.rm = TRUE),
            mean_co2 = mean(co2_intensity, na.rm = TRUE), 
            median_co2 = median(co2_intensity, na.rm = TRUE), 
            mean_coverage = mean(msci_esg_percent_coverage, na.rm = TRUE)) |> 
  ungroup()
`summarise()` has grouped output by 'region'. You can override using the
`.groups` argument.
summary_region_market
# A tibble: 6 × 9
  region        is_esg   mean_…¹ total…² media…³ mean_…⁴ mean_…⁵ media…⁶ mean_…⁷
  <chr>         <chr>      <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1 Asia Pacific  Regular…   1.45     18.8   0.567    8.04    158.    118.    99.8
2 Europe        Regular…   0.806    20.2   0.197    8.87    139.    124.    98.0
3 Global        ESG Fund   2.02     14.1   0.419    9.02    138.    104.    98.4
4 Global        Regular…   4.32    328.    0.746    7.79    221.    161.    96.8
5 North America ESG Fund   1.85     42.5   0.594    8.36    124.    104.    94.4
6 North America Regular…   7.97   1593.    0.934    7.31    230.    197.    96.3
# … with abbreviated variable names ¹​mean_assets, ²​total_assets,
#   ³​median_assets, ⁴​mean_msci_10_0, ⁵​mean_co2, ⁶​median_co2, ⁷​mean_coverage
(colMeans(is.na(summary_region_market)))
        region         is_esg    mean_assets   total_assets  median_assets 
             0              0              0              0              0 
mean_msci_10_0       mean_co2     median_co2  mean_coverage 
             0              0              0              0 

Emotive Factoid 1

Compared with their regular counterparts, the Global and North America ESG Funds look small (with only 4.29% and 2.67% of total assets respectively). However, there are still more than double as many net assets in North American ESG ETFs than in all regular European Funds. bubbleplot?

#percentage: global esg/regular and North America esg/regular
perc_esg_Global <- 14.10554/328.31109*100
perc_esg_NorthA <- 42.51177/1593.19313*100
perc_Europe_esgNorthA <- 20.15101/42.51177*100
perc_esg_Global
[1] 4.296395
perc_esg_NorthA
[1] 2.668338
perc_Europe_esgNorthA
[1] 47.40101
#just checking that nothing changes substantially when including emerging markets in the global count
summary_region_market2 <- blackrock_etf_data |> 
  group_by(region, is_esg) |> 
  summarize(mean_assets = mean(net_assets_usd_bn),
            total_assets = sum(net_assets_usd_bn),
            median_assets = median(net_assets_usd_bn),
            mean_msci_10_0 = mean(msci_esg_quality_score_0_10, na.rm = TRUE),
            mean_co2 = mean(co2_intensity, na.rm = TRUE), 
            median_co2 = median(co2_intensity, na.rm = TRUE), 
            mean_coverage = mean(msci_esg_percent_coverage, na.rm = TRUE)) |> 
  ungroup()
`summarise()` has grouped output by 'region'. You can override using the
`.groups` argument.
summary_region_market2
# A tibble: 9 × 9
  region          is_esg mean_…¹ total…² media…³ mean_…⁴ mean_…⁵ media…⁶ mean_…⁷
  <chr>           <chr>    <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1 Asia Pacific    Regul…  1.68   4.88e+1  0.567     6.70    276.    214.    98.7
2 Europe          Regul…  0.735  2.06e+1  0.187     8.60    185.    124.    96.8
3 Global          ESG F…  1.84   1.84e+1  0.408     8.98    145.    124.    98.9
4 Global          Regul…  4.86   4.47e+2  0.565     7.31    289.    180.    96.7
5 Kuwait          Regul…  0.0291 2.91e-2  0.0291    3.44    561.    561.    69.1
6 Latin America   Regul…  1.34   8.03e+0  0.676     4.43    394.    352.    97.0
7 Middle East an… Regul…  0.400  1.60e+0  0.207     5.86    506.    482.    94.6
8 North America   ESG F…  1.85   4.25e+1  0.594     8.36    124.    104.    94.4
9 North America   Regul…  7.97   1.59e+3  0.934     7.31    230.    197.    96.3
# … with abbreviated variable names ¹​mean_assets, ²​total_assets,
#   ³​median_assets, ⁴​mean_msci_10_0, ⁵​mean_co2, ⁶​median_co2, ⁷​mean_coverage
perc_global2 <- 1.843459e+01/4.469390e+02 *100
perc_global2
[1] 4.124632

Graph 2

Here I try to visualize the distribution of MSCI ESG Quality Scores by region and ESG classification. Given the different scale of ESG Funds and Regular Funds it made more sense to split them into two graphs rather than into one. However, this meant that the color code is relative to each graph and not overarching for both which I find a little misleading and not optimal. I later use a density graph to show the distribution and that might be better suited. As expected, the spread of ESG Quality Scores is wider for Regular Funds and average ESG Scores of North American and Global regular Funds are lower than their ESG counterparts. Surprisingly, the average ESG Score of the European regular funds is even higher than of the North American ESG funds.

blackrock_etf_data |> 
  filter(is_esg == "ESG Fund") |> 
  ggplot(aes(x = region, y = net_assets_usd_bn, fill = msci_esg_quality_score_0_10)) +
  geom_col()+
  theme_classic()+
  labs(x = 'Region', y = 'Net Assets in Bn USD', title = 'MSCI ESG Quality Scores of ESG Funds for North America and Global', subtitle = 'Average Score Global: 9.02  vs Average Score North America: 8.36')

blackrock_etf_data |> 
  filter(region == "Europe") |> 
  ggplot(aes(x = region, y = net_assets_usd_bn, fill = msci_esg_quality_score_0_10)) +
  geom_col()+
  theme_classic()+ 
  labs(y = 'Net Assets in Bn USD', title = 'MSCI ESG Quality Scores of ESG Funds for Europe', subtitle = 'Average Score Europe: 8.87')

Graph 3

explained above (see Graph 2)

blackrock_etf_data |> 
  filter(is_esg == "Regular Fund", region == "Global" | region == "North America") |> 
  ggplot(aes(x = region, y = net_assets_usd_bn, fill = msci_esg_quality_score_0_10)) +
  geom_col()+
  theme_classic()+
  labs(x = 'Region', y = 'Net Assets in Bn USD', title = 'MSCI ESG Quality Scores of Regular Funds for North America and Global', subtitle = 'Average Score Global: 7.79  vs Average Score North America: 7.31')

Graph 4 and 5

These graphs show the distribution by number and net assets of global funds, both ESG and regular, across the MSCI ESG rating categories. ESG Funds are only present in the top 2 categories which are also the most frequent categories for regular funds. Looking at net assets, regular funds are mostly concentrated on the AAA rating but BBB rated funds also account for a large amount of assets (AA rated ones are only third place).

blackrock_etf_data |> 
  filter(region == "Global") |> 
  ggplot(aes(x = msci_esg_rating, fill = is_esg)) +
  geom_bar()+
  theme_classic()

blackrock_etf_data |> 
  filter(region == "Global") |> 
  ggplot(aes(x = msci_esg_rating, y = net_assets_usd_bn, fill = is_esg)) +
  geom_col()+
  theme_classic()

Graphs 6 and 7

In analogy to the ESG Score distribution charts, these graphs show that in comparison to the global ESG Funds North American ones are wider spread across the spectrum of ESG ratings. They are also represented in the A and BBB rating groups, although most assets in ESG funds go towards AAA rated funds. Overall, the AA rated funds represent most assets (cmpared to the AAA group globally).

blackrock_etf_data |> 
  filter(region == "North America") |> 
  ggplot(aes(x = msci_esg_rating, fill = is_esg)) +
  geom_bar()+
  theme_classic()

blackrock_etf_data |> 
  filter(region == "North America") |> 
  ggplot(aes(x = msci_esg_rating, y = net_assets_usd_bn, fill = is_esg)) +
  geom_col()+
  theme_classic()

Graph 8 and 9

These graphs show the distribution of MSCI ESG scores through a density plot, this might be the best way to visualize the difference in variance between global and North American funds. For North America, you can clearly see two peaks pointing towards net assets grouping in around types of regular funds, those that are basically as ESG-friendly as ESG-Funds and those that have a substantially worse ESG rating. North American ESG Funds also demonstrate a wider range of ESG scores, including some below 6. Global ESG funds are very concentrated around scores around 8 and 9 and basically do not include and funds with scores below 7. Global regular funds also show two peaks like the North American regular funds but they are much less pronounced and generally form a less accentuated picture.

blackrock_etf_data |> 
  filter(region == "Global") |> 
  ggplot(aes(x = msci_esg_quality_score_0_10, color = is_esg)) +
  geom_density()+
  theme_classic()+
  labs(title = 'ESG Quality Scores Global Funds')
Warning: Removed 11 rows containing non-finite values (`stat_density()`).

blackrock_etf_data |> 
  filter(region == "North America") |> 
  ggplot(aes(x = msci_esg_quality_score_0_10, color = is_esg)) +
  geom_density()+
  theme_classic()+
  labs(title = 'ESG Quality Scores North American Funds')
Warning: Removed 24 rows containing non-finite values (`stat_density()`).

Comparison Dataset

etf_comparison_data_github_url <- "https://raw.githubusercontent.com/t-emery/sais-susfin_data/main/datasets/etf_comparison-2022-10-03.csv"

etf_comparison <- read_csv(etf_comparison_data_github_url)
Rows: 537 Columns: 14
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): ticker, company_name, sector, esg_uw_ow
dbl (7): esg_etf, standard_etf, esg_tilt, esg_tilt_z_score, esg_tilt_rank, e...
lgl (3): in_esg_only, in_standard_only, in_on_index_only

ℹ 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.
esg_fund <- etf_comparison |> 
  filter(esg_etf > 0)
esg_fund
# A tibble: 311 × 14
   ticker compa…¹ sector esg_etf stand…² in_es…³ in_st…⁴ in_on…⁵ esg_t…⁶ esg_u…⁷
   <chr>  <chr>   <chr>    <dbl>   <dbl> <lgl>   <lgl>   <lgl>     <dbl> <chr>  
 1 PRU    PRUDEN… Finan…   0.537  0.106  FALSE   FALSE   FALSE     0.431 Overwe…
 2 GIS    GENERA… Consu…   0.552  0.151  FALSE   FALSE   FALSE     0.401 Overwe…
 3 K      KELLOGG Consu…   0.453  0.0592 FALSE   FALSE   FALSE     0.394 Overwe…
 4 ADP    AUTOMA… Infor…   0.649  0.312  FALSE   FALSE   FALSE     0.337 Overwe…
 5 ECL    ECOLAB… Mater…   0.441  0.118  FALSE   FALSE   FALSE     0.322 Overwe…
 6 JCI    JOHNSO… Indus…   0.416  0.112  FALSE   FALSE   FALSE     0.304 Overwe…
 7 ES     EVERSO… Utili…   0.392  0.0896 FALSE   FALSE   FALSE     0.302 Overwe…
 8 PEG    PUBLIC… Utili…   0.376  0.0929 FALSE   FALSE   FALSE     0.284 Overwe…
 9 RTX    RAYTHE… Indus…   0.677  0.401  FALSE   FALSE   FALSE     0.277 Overwe…
10 LNG    CHENIE… Energy   0.274  0      TRUE    FALSE   TRUE      0.274 Overwe…
# … with 301 more rows, 4 more variables: esg_tilt_z_score <dbl>,
#   esg_tilt_rank <dbl>, esg_tilt_percentile <dbl>, esg_tilt_quantile_5 <dbl>,
#   and abbreviated variable names ¹​company_name, ²​standard_etf, ³​in_esg_only,
#   ⁴​in_standard_only, ⁵​in_on_index_only, ⁶​esg_tilt, ⁷​esg_uw_ow
stand_fund <- etf_comparison |> 
  filter(standard_etf > 0)
stand_fund
# A tibble: 502 × 14
   ticker compa…¹ sector esg_etf stand…² in_es…³ in_st…⁴ in_on…⁵ esg_t…⁶ esg_u…⁷
   <chr>  <chr>   <chr>    <dbl>   <dbl> <lgl>   <lgl>   <lgl>     <dbl> <chr>  
 1 PRU    PRUDEN… Finan…   0.537  0.106  FALSE   FALSE   FALSE     0.431 Overwe…
 2 GIS    GENERA… Consu…   0.552  0.151  FALSE   FALSE   FALSE     0.401 Overwe…
 3 K      KELLOGG Consu…   0.453  0.0592 FALSE   FALSE   FALSE     0.394 Overwe…
 4 ADP    AUTOMA… Infor…   0.649  0.312  FALSE   FALSE   FALSE     0.337 Overwe…
 5 ECL    ECOLAB… Mater…   0.441  0.118  FALSE   FALSE   FALSE     0.322 Overwe…
 6 JCI    JOHNSO… Indus…   0.416  0.112  FALSE   FALSE   FALSE     0.304 Overwe…
 7 ES     EVERSO… Utili…   0.392  0.0896 FALSE   FALSE   FALSE     0.302 Overwe…
 8 PEG    PUBLIC… Utili…   0.376  0.0929 FALSE   FALSE   FALSE     0.284 Overwe…
 9 RTX    RAYTHE… Indus…   0.677  0.401  FALSE   FALSE   FALSE     0.277 Overwe…
10 RF     REGION… Finan…   0.334  0.0622 FALSE   FALSE   FALSE     0.272 Overwe…
# … with 492 more rows, 4 more variables: esg_tilt_z_score <dbl>,
#   esg_tilt_rank <dbl>, esg_tilt_percentile <dbl>, esg_tilt_quantile_5 <dbl>,
#   and abbreviated variable names ¹​company_name, ²​standard_etf, ³​in_esg_only,
#   ⁴​in_standard_only, ⁵​in_on_index_only, ⁶​esg_tilt, ⁷​esg_uw_ow

Sector Distribution

(four graphs, one emotive factoid) Sector Distribution seems very similar between ESG and Standard.

# Barplots
bp_esg <- ggplot(esg_fund, aes(x = "", fill=sector))+
  geom_bar()
# bp_esg

bp_stand <- ggplot(stand_fund, aes(x = "", fill=sector))+
  geom_bar()
# bp_stand

#Piecharts
pie_esg <- bp_esg + coord_polar("y", start=0)
pie_esg

pie_stand <- bp_stand + coord_polar("y")
pie_stand

What about the companies that are only in one of the two funds? A quick calculation shows that only 11% of the companies in the ESG Fund are exclusively in the ESG ETF while 45% of the Standard ETF are exclusively represented in the Standard Fund. Looking at these exclusive companies, no major difference in their sector distribution emerges but this might also be due to the sector categorization. If both Waste Management Inc and Lockheed Martin are counted as “Industrials” the special exclusion of Weapon Manufacturers of an ESG Fund is not visible in the sector distribution.

esg_only <- esg_fund |> 
  filter(in_esg_only == "TRUE")

perc_esg_only <- count(esg_only)/count(esg_fund)*100
perc_esg_only
         n
1 11.25402
stand_only <- stand_fund |> 
  filter(in_standard_only == "TRUE")

stand_only 
# A tibble: 226 × 14
   ticker compa…¹ sector esg_etf stand…² in_es…³ in_st…⁴ in_on…⁵ esg_t…⁶ esg_u…⁷
   <chr>  <chr>   <chr>    <dbl>   <dbl> <lgl>   <lgl>   <lgl>     <dbl> <chr>  
 1 DISH   DISH N… Commu…       0  0.0113 FALSE   TRUE    TRUE    -0.0113 Underw…
 2 RL     RALPH … Consu…       0  0.0120 FALSE   TRUE    TRUE    -0.0120 Underw…
 3 VNO    VORNAD… Real …       0  0.0127 FALSE   TRUE    TRUE    -0.0127 Underw…
 4 MHK    MOHAWK… Consu…       0  0.0155 FALSE   TRUE    TRUE    -0.0155 Underw…
 5 NCLH   NORWEG… Consu…       0  0.0157 FALSE   TRUE    TRUE    -0.0157 Underw…
 6 ALK    ALASKA… Indus…       0  0.0170 FALSE   TRUE    TRUE    -0.0170 Underw…
 7 NWL    NEWELL… Consu…       0  0.0174 FALSE   TRUE    TRUE    -0.0174 Underw…
 8 DXC    DXC TE… Infor…       0  0.0188 FALSE   TRUE    TRUE    -0.0188 Underw…
 9 OGN    ORGANON Healt…       0  0.0196 FALSE   TRUE    TRUE    -0.0196 Underw…
10 XRAY   DENTSP… Healt…       0  0.0196 FALSE   TRUE    TRUE    -0.0196 Underw…
# … with 216 more rows, 4 more variables: esg_tilt_z_score <dbl>,
#   esg_tilt_rank <dbl>, esg_tilt_percentile <dbl>, esg_tilt_quantile_5 <dbl>,
#   and abbreviated variable names ¹​company_name, ²​standard_etf, ³​in_esg_only,
#   ⁴​in_standard_only, ⁵​in_on_index_only, ⁶​esg_tilt, ⁷​esg_uw_ow
perc_stand_only <- count(stand_only)/count(stand_fund)*100
perc_stand_only
         n
1 45.01992
# Barplots
bp_only_esg <- esg_fund |> 
  filter(in_esg_only = TRUE) |> 
    ggplot(aes(x = "", fill=sector))+
  geom_bar()
#bp_only_esg

bp_only_stand <- stand_fund |> 
  filter(in_standard_only = TRUE) |> 
    ggplot(aes(x = "", fill=sector))+
  geom_bar()
#bp_only_stand

#Piecharts
pie_only_esg <- bp_esg + coord_polar("y")
pie_only_esg

pie_only_stand <- bp_stand + coord_polar("y")
pie_only_stand

Firmlevel (emotive factoid)

Rather than looking at sectors, it might thus be insightful to look at specific companies, particularly those that the respective fund invests most in. None of the top ten of either fund is an exclusive fund, in fact, the top five companies of both funds are identical as they are all the “usual (big tech) suspects”. Concluding this first superficial analysis, differences between the standard and ESG funds are not very visible at first. The sector categories do not reflect negative screening processes and specific ESG investments are only marginal in their share of the fund.

slice_esg <- esg_fund |> 
  slice_max(order_by = esg_etf, n = 10) |> 
  select(company_name, esg_etf, in_esg_only)

slice_stand <- stand_fund |> 
  slice_max(order_by = standard_etf, n = 10) |> 
  select(company_name, standard_etf, in_standard_only)

slice_esg
# A tibble: 10 × 3
   company_name           esg_etf in_esg_only
   <chr>                    <dbl> <lgl>      
 1 APPLE INC                 6.96 FALSE      
 2 MICROSOFT CORP            5.58 FALSE      
 3 ALPHABET INC              3.40 FALSE      
 4 AMAZON COM INC            3.22 FALSE      
 5 TESLA INC                 2.23 FALSE      
 6 UNITEDHEALTH GROUP INC    1.34 FALSE      
 7 JPMORGAN CHASE & CO       1.08 FALSE      
 8 HOME DEPOT INC            1.06 FALSE      
 9 NVIDIA CORP               1.06 FALSE      
10 EXXON MOBIL CORP          1.02 FALSE      
slice_stand
# A tibble: 10 × 3
   company_name           standard_etf in_standard_only
   <chr>                         <dbl> <lgl>           
 1 APPLE INC                      6.92 FALSE           
 2 MICROSOFT CORP                 5.76 FALSE           
 3 ALPHABET INC                   3.61 FALSE           
 4 AMAZON COM INC                 3.32 FALSE           
 5 TESLA INC                      2.34 FALSE           
 6 BERKSHIRE HATHAWAY INC         1.60 FALSE           
 7 UNITEDHEALTH GROUP INC         1.57 FALSE           
 8 JOHNSON & JOHNSON              1.42 FALSE           
 9 EXXON MOBIL CORP               1.21 FALSE           
10 META PLATFORMS INC             1.03 FALSE