# Load packages

# Core
library(tidyverse)
library(tidyquant)
library(readr)

# Time series
library(lubridate)
library(tibbletime)

# modeling
library(broom)

Goal

Examine how each asset contributes to portfolio standard deviation. This is to ensure that our risk is not concentrated in any one asset.

1 Import stock prices

Choose your stocks from 2012-12-31 to present.

symbols <- c("TSLA", "NVDA", "LLY", "AMZN", "HD")

prices <- tq_get(x    = symbols, 
                 get. = "stock.prices",
                 from = "2012-12-31")

2 Convert prices to returns (monthly)

asset_returns_tbl <- prices %>%
    
    group_by(symbol) %>%
    
    tq_transmute(select     = adjusted, 
                 mutate_fun = periodReturn, 
                 period     = "monthly", 
                 type       = "log") %>%
    
    slice(-1) %>%

    ungroup() %>%
    
    set_names(c("asset", "date", "returns"))

3 Calculate Component Contribution to Portfolio Volatility

# Transform data into wide form
asset_returns_wide_tbl <- asset_returns_tbl %>%

    pivot_wider(names_from = asset, values_from = returns) %>%

    column_to_rownames(var = "date")

asset_returns_wide_tbl
##                     AMZN            HD           LLY         NVDA         TSLA
## 2013-01-31  0.0566799395  0.0787855805  8.489712e-02  0.000000000  0.102078114
## 2013-02-28 -0.0046435024  0.0233358855  2.705456e-02  0.038221513 -0.074128640
## 2013-03-28  0.0083654162  0.0239971314  3.822824e-02  0.013339108  0.084208138
## 2013-04-30 -0.0487507497  0.0498948548 -2.514156e-02  0.070706276  0.354111531
## 2013-05-31  0.0588686246  0.0698921746 -3.216761e-02  0.054652115  0.593716684
## 2013-06-28  0.0310507506 -0.0103004231 -7.903986e-02 -0.030167233  0.093672163
## 2013-07-31  0.0813355350  0.0199370477  7.809887e-02  0.028091844  0.223739522
## 2013-08-30 -0.0695574090 -0.0591623464 -2.362021e-02  0.026270270  0.229971642
## 2013-09-30  0.1067688897  0.0233419569 -2.103667e-02  0.053460137  0.134706620
## 2013-10-31  0.1521839116  0.0265400746 -1.018513e-02 -0.024065963 -0.189806595
## 2013-11-29  0.0781496860  0.0350690543  1.783353e-02  0.032034692 -0.228409405
## 2013-12-31  0.0130490386  0.0253914958  1.541234e-02  0.026567172  0.167108541
## 2014-01-31 -0.1059765119 -0.0690018893  5.734350e-02 -0.020177573  0.187261714
## 2014-02-28  0.0094619003  0.0652297096  1.076841e-01  0.162107598  0.299722785
## 2014-03-31 -0.0737086161 -0.0302574407 -1.266180e-02 -0.025903793 -0.160783242
## 2014-04-30 -0.1007565303  0.0047910631  4.069215e-03  0.030788759 -0.002690122
## 2014-05-30  0.0273091844  0.0090144589  2.105822e-02  0.032886131 -0.000577422
## 2014-06-30  0.0383836202  0.0148881260  3.786395e-02 -0.024508072  0.144457224
## 2014-07-31 -0.0369768154 -0.0013585386 -1.801554e-02 -0.057730175 -0.072372676
## 2014-08-29  0.0799468404  0.1453653629  4.814403e-02  0.110060312  0.188794007
## 2014-09-30 -0.0502010184 -0.0139635206  2.009218e-02 -0.052782688 -0.105566477
## 2014-10-31 -0.0540982347  0.0610991125  2.256553e-02  0.057399140 -0.004046477
## 2014-11-28  0.1031187277  0.0190942578  3.387641e-02  0.074852212  0.011599801
## 2014-12-31 -0.0872368614  0.0592872117  1.269063e-02 -0.044863472 -0.094774519
## 2015-01-30  0.1330922557 -0.0052534645  4.270476e-02 -0.043319148 -0.088365289
## 2015-02-27  0.0697992426  0.0943348017 -1.862771e-02  0.142699554 -0.001277808
## 2015-03-31 -0.0214295755 -0.0048519856  3.473257e-02 -0.052583174 -0.074350051
## 2015-04-30  0.1253212736 -0.0601296655 -1.079447e-02  0.058908784  0.180226808
## 2015-05-29  0.0175090293  0.0406649062  1.002140e-01  0.001460290  0.103899574
## 2015-06-30  0.0112589814  0.0026915557  5.654548e-02 -0.095717239  0.067300935
## 2015-07-31  0.2111621090  0.0517293675  1.214306e-02 -0.007988006 -0.007896616
## 2015-08-31 -0.0443525782 -0.0048821783 -1.988827e-02  0.123595460 -0.066366250
## 2015-09-30 -0.0019516837 -0.0032848928  1.614119e-02  0.092150607 -0.002653519
## 2015-10-30  0.2010808743  0.0681898427 -2.565819e-02  0.140555330 -0.182659777
## 2015-11-30  0.0602956777  0.0795701487  1.206584e-02  0.115405542  0.106828586
## 2015-12-31  0.0165440008 -0.0078335466  2.670039e-02  0.038347433  0.041471519
## 2016-01-29 -0.1410054620 -0.0503184953 -6.319465e-02 -0.118048457 -0.227360626
## 2016-02-29 -0.0605352209 -0.0131265332 -8.710638e-02  0.071923552  0.003810669
## 2016-03-31  0.0717834363  0.0778121744  1.389809e-04  0.127654702  0.179948109
## 2016-04-29  0.1053453760  0.0034411838  4.772511e-02 -0.002810615  0.046721797
## 2016-05-31  0.0915002899 -0.0081431745  1.393417e-05  0.276388359 -0.075597968
## 2016-06-30 -0.0099694639 -0.0341049023  4.838980e-02  0.006188120 -0.050296440
## 2016-07-29  0.0586021229  0.0793859715  5.123622e-02  0.194443575  0.100785334
## 2016-08-31  0.0135476418 -0.0251416105 -5.766442e-02  0.073469073 -0.102058091
## 2016-09-30  0.0848953908 -0.0414059113  3.177311e-02  0.110693716 -0.038366372
## 2016-10-31 -0.0583893058 -0.0532257577 -8.337066e-02  0.037805174 -0.031364583
## 2016-11-30 -0.0509721927  0.0641009907 -8.889170e-02  0.260525342 -0.043041267
## 2016-12-30 -0.0009330556  0.0355282294  9.148371e-02  0.146435763  0.120665178
## 2017-01-31  0.0936394059  0.0257690309  4.622901e-02  0.022601931  0.164624916
## 2017-02-28  0.0258446800  0.0519075101  7.906108e-02 -0.071875032 -0.007730364
## 2017-03-31  0.0479423007  0.0192297507  1.557687e-02  0.070843928  0.107278727
## 2017-04-28  0.0424566944  0.0612211938 -2.467487e-02 -0.043434229  0.120916212
## 2017-05-31  0.0725778018 -0.0109686832 -2.437713e-02  0.326022081  0.082295892
## 2017-06-30 -0.0271286156 -0.0007168729  3.373402e-02  0.001453936  0.058654468
## 2017-07-31  0.0202278808 -0.0250835731  4.364586e-03  0.117044572 -0.111459860
## 2017-08-31 -0.0072953953  0.0076990369 -1.035472e-02  0.042639433  0.095543446
## 2017-09-29 -0.0198260355  0.0874118355  5.096115e-02  0.053601393 -0.042474144
## 2017-10-31  0.1395154056  0.0134815658 -4.299711e-02  0.145700324 -0.028457409
## 2017-11-30  0.0626577318  0.0863479744  3.871506e-02 -0.029244614 -0.070862541
## 2017-12-29 -0.0062057845  0.0525908069 -2.128887e-03 -0.036583630  0.008061928
## 2018-01-31  0.2156265497  0.0582602398 -3.628849e-02  0.239240651  0.129254571
## 2018-02-28  0.0415536279 -0.0973183345 -4.850983e-02 -0.014959119 -0.032266877
## 2018-03-29 -0.0440034760 -0.0166710245  4.534379e-03 -0.043969208 -0.253920408
## 2018-04-30  0.0788803060  0.0361430063  4.671388e-02 -0.029312665  0.099254576
## 2018-05-31  0.0397392430  0.0150079842  5.468055e-02  0.115145239 -0.031698139
## 2018-06-29  0.0421636787  0.0448130025  3.404422e-03 -0.062544961  0.186043257
## 2018-07-31  0.0446635734  0.0123278115  1.466727e-01  0.033048642 -0.140021491
## 2018-08-31  0.1243079079  0.0214328511  7.244375e-02  0.137075312  0.011737389
## 2018-09-28 -0.0048359814  0.0312831471  1.559043e-02  0.001210693 -0.130439038
## 2018-10-31 -0.2258869989 -0.1636413353  1.047531e-02 -0.287373430  0.242170576
## 2018-11-30  0.0560700324  0.0308953956  9.491841e-02 -0.253667493  0.038271580
## 2018-12-31 -0.1180514843 -0.0482856910 -2.492015e-02 -0.202283210 -0.051761952
## 2019-01-31  0.1348080312  0.0659305848  3.515073e-02  0.073974226 -0.080628789
## 2019-02-28 -0.0469930640  0.0087342823  5.766186e-02  0.071593579  0.041032981
## 2019-03-29  0.0824420184  0.0432287439  2.710577e-02  0.151870096 -0.133656413
## 2019-04-30  0.0786806224  0.0597260110 -1.031708e-01  0.007987759 -0.159123803
## 2019-05-31 -0.0818753491 -0.0704140582 -3.848666e-03 -0.288680000 -0.253945372
## 2019-06-28  0.0646557767  0.0981494315 -4.543640e-02  0.192591766  0.188012109
## 2019-07-31 -0.0142806686  0.0271324442 -1.674733e-02  0.026972519  0.078092373
## 2019-08-30 -0.0496880810  0.0644244893  4.182353e-02 -0.006208104 -0.068516948
## 2019-09-30 -0.0229951159  0.0239606846 -1.014252e-02  0.038414457  0.065449565
## 2019-10-31  0.0232034080  0.0109732050  1.877974e-02  0.143946699  0.268061253
## 2019-11-29  0.0134958216 -0.0618537975  3.513642e-02  0.076031764  0.046592176
## 2019-12-31  0.0257863501 -0.0033307626  1.133131e-01  0.082162638  0.237359743
## 2020-01-31  0.0834803026  0.0435475958  6.059348e-02  0.004791018  0.441578342
## 2020-02-28 -0.0642332026 -0.0460234778 -9.658469e-02  0.133627002  0.026424253
## 2020-03-31  0.0344213022 -0.1475358694  9.514446e-02 -0.024248334 -0.242781458
## 2020-04-30  0.2381504762  0.1632976614  1.086423e-01  0.103279176  0.400209535
## 2020-05-29 -0.0128673719  0.1225079435 -6.292163e-03  0.194461689  0.065730500
## 2020-06-30  0.1218341331  0.0140897538  7.085218e-02  0.068216916  0.257108657
## 2020-07-31  0.1372488933  0.0580786034 -8.839645e-02  0.111189641  0.281420674
## 2020-08-31  0.0866005735  0.0710521789 -7.860410e-03  0.231105278  0.554719320
## 2020-09-30 -0.0916533253 -0.0207923594 -2.496379e-03  0.011895710 -0.149762306
## 2020-10-30 -0.0364089187 -0.0404156635 -1.262807e-01 -0.076501590 -0.100371771
## 2020-11-30  0.0425228214  0.0393346232  1.152649e-01  0.066921881  0.380308519
## 2020-12-31  0.0276719582 -0.0379919849  1.477450e-01 -0.025900198  0.217730753
## 2021-01-29 -0.0156985929  0.0193875579  2.084424e-01 -0.005010506  0.117343701
## 2021-02-26 -0.0359675607 -0.0471776442 -1.075327e-02  0.054292972 -0.161038203
## 2021-03-31  0.0003717151  0.1731013333 -9.232745e-02 -0.026723169 -0.011269836
## 2021-04-30  0.1139202399  0.0585934264 -2.191735e-02  0.117297890  0.060292565
## 2021-05-28 -0.0730764715 -0.0148158470  9.319753e-02  0.079071092 -0.126372343
## 2021-06-30  0.0651836137  0.0051678766  1.389736e-01  0.208332102  0.083547955
## 2021-07-30 -0.0332696301  0.0287459340  5.912676e-02 -0.025494317  0.010973846
## 2021-08-31  0.0421339363 -0.0061432568  6.218971e-02  0.138204273  0.068224268
## 2021-09-30 -0.0550034409  0.0114279562 -1.114489e-01 -0.077484698  0.052632612
## 2021-10-29  0.0262547651  0.1243887728  9.768788e-02  0.210396241  0.362230202
## 2021-11-30  0.0391473463  0.0747937603 -2.349018e-02  0.245338158  0.027237848
## 2021-12-31 -0.0505062029  0.0394414951  1.076076e-01 -0.105149407 -0.079968440
## 2022-01-31 -0.1085098142 -0.1229951198 -1.183488e-01 -0.183267473 -0.120597475
## 2022-02-28  0.0263230079 -0.1501033424  2.257800e-02 -0.004133051 -0.073397011
## 2022-03-31  0.0596239190 -0.0476407982  1.360237e-01  0.112575617  0.213504290
## 2022-04-29 -0.2711856801  0.0035682560  1.991407e-02 -0.386065652 -0.213125289
## 2022-05-31 -0.0333130879  0.0077923694  7.377332e-02  0.006717222 -0.138340062
## 2022-06-30 -0.1238178226 -0.0924986100  3.384519e-02 -0.208219133 -0.118657126
## 2022-07-29  0.2394860591  0.0927979416  1.669969e-02  0.180792226  0.280480149
## 2022-08-31 -0.0625299224 -0.0359895717 -8.701939e-02 -0.185089363 -0.075250271
## 2022-09-30 -0.1149865758 -0.0442344303  7.086113e-02 -0.217576931 -0.038313992
## 2022-10-31 -0.0981105335  0.0706150102  1.131576e-01  0.106044206 -0.153346760
## 2022-11-30 -0.0593198454  0.0959456724  2.731045e-02  0.226461806 -0.155866121
## 2022-12-30 -0.1391406409 -0.0254135678 -1.422176e-02 -0.146693587 -0.457813194
## 2023-01-31  0.2051735029  0.0259688397 -6.111843e-02  0.290330101  0.340915767
## 2023-02-28 -0.0902516639 -0.0890859340 -9.734734e-02  0.172531518  0.171904973
## 2023-03-31  0.0918019370  0.0024155042  9.845420e-02  0.179536463  0.008471140
## 2023-04-28  0.0206963031  0.0181990107  1.421063e-01 -0.001008420 -0.233183710
## 2023-05-31  0.1340765703 -0.0513718827  8.406586e-02  0.310008200  0.216021889
## 2023-06-30  0.0779864104  0.0915989949  8.803166e-02  0.111729812  0.249689452
## 2023-07-31  0.0251489708  0.0720271694 -3.125237e-02  0.099530558  0.021391609
## 2023-08-31  0.0318772770 -0.0042951791  2.003590e-01  0.054674199 -0.035588260
## 2023-09-29 -0.0821945627 -0.0890445401 -3.128531e-02 -0.126218838 -0.030929027
## 2023-10-31  0.0458940197 -0.0595558249  3.079793e-02 -0.064546120 -0.219831983
## 2023-11-30  0.0931972815  0.1030589654  6.669140e-02  0.137050148  0.178463656
## 2023-12-29  0.0392628771  0.1002596770 -1.383355e-02  0.057262957  0.034390133
## 2024-01-31  0.0212288659  0.0183277320  1.021455e-01  0.217059118 -0.282704160
## 2024-02-29  0.1300782611  0.0754203799  1.565235e-01  0.251388512  0.075015304
## 2024-03-28  0.0202729146  0.0137883179  3.170727e-02  0.132939648 -0.138383423
## 2024-04-30 -0.0302797899 -0.1378009772  4.028099e-03 -0.044746491  0.041724969
## 2024-05-31  0.0081949152  0.0088705888  5.071880e-02  0.238127560 -0.028782134
## 2024-06-28  0.0910037984  0.0275966031  9.863581e-02  0.119508657  0.105427913
## 2024-07-31 -0.0329830511  0.0671786035 -1.184196e-01 -0.054220171  0.159378271
## 2024-08-30 -0.0464130352  0.0069786330  1.784153e-01  0.019883146 -0.080549177
## 2024-09-30  0.0429307038  0.0949400894 -8.030490e-02  0.017277928  0.200441406
## 2024-10-31  0.0003755644 -0.0286646042 -6.553687e-02  0.089122746 -0.046070548
## 2024-11-29  0.1091142212  0.0912959118 -4.067532e-02  0.040520595  0.323147326
## 2024-12-31  0.0538418744 -0.0982063372 -2.979764e-02 -0.028993106  0.157010663
## 2025-01-31  0.0800742352  0.0574212126  4.938212e-02 -0.111926736  0.001880189
## 2025-02-28 -0.1130190481 -0.0380465801  1.284135e-01  0.039598579 -0.322794555
## 2025-03-31 -0.1095146233 -0.0726309844 -1.085725e-01 -0.141937962 -0.122658739
## 2025-04-30 -0.0311757737 -0.0165070667  8.474170e-02  0.004970099  0.085028653
## 2025-05-30  0.1058429765  0.0214065498 -1.956833e-01  0.215623673  0.205293048
## 2025-06-30  0.0677922335  0.0017050787  5.519472e-02  0.156363856 -0.086785707
## 2025-07-31  0.0649401278  0.0023700608 -5.194642e-02  0.118521186 -0.030005653
## 2025-08-29 -0.0220690894  0.1014973623 -7.978192e-03 -0.020963769  0.079775694
## 2025-09-30 -0.0420508819  0.0017654749  4.068545e-02  0.068827324  0.286693192
## 2025-10-31  0.1063983418 -0.0652643857  1.229944e-01  0.081830418  0.026275247
## 2025-11-18 -0.0929176542 -0.1205529686  1.785777e-01 -0.110206520 -0.129135446
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)

covariance_matrix
##              AMZN           HD          LLY         NVDA         TSLA
## AMZN 0.0071325413 0.0021292349 0.0005267214 0.0055429246 0.0053086270
## HD   0.0021292349 0.0037063381 0.0001517232 0.0027531188 0.0031679820
## LLY  0.0005267214 0.0001517232 0.0049948734 0.0004059497 0.0000911778
## NVDA 0.0055429246 0.0027531188 0.0004059497 0.0146658229 0.0063942691
## TSLA 0.0053086270 0.0031679820 0.0000911778 0.0063942691 0.0289838743
# Standard deviation of portfolio
# Summarizes how much each asset's returns vary with those of other assets within the portfolio into a single number
w <- c(0.2, 0.2, 0.2, 0.2, 0.2)

sd_portfolio <- sqrt(t(w) %*% covariance_matrix %*% w)
sd_portfolio
##            [,1]
## [1,] 0.06706024
# Component contribution
# Similar to the formula for sd_portfolio
# Mathematical trick to summarize the same, sd_portfolio, by asset instead of a single number
component_contribution <- (t(w) %*% covariance_matrix * w) / sd_portfolio[1,1]
component_contribution
##            AMZN          HD         LLY       NVDA       TSLA
## [1,] 0.01231135 0.007103104 0.003680539 0.01775245 0.02621281
rowSums(component_contribution)
## [1] 0.06706024
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
    round(3) %>%
    as_tibble()

component_percentages
## # A tibble: 1 × 5
##    AMZN    HD   LLY  NVDA  TSLA
##   <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.184 0.106 0.055 0.265 0.391
component_percentages %>%

    as_tibble() %>%
    gather(key = "asset", value = "contribution")
## # A tibble: 5 × 2
##   asset contribution
##   <chr>        <dbl>
## 1 AMZN         0.184
## 2 HD           0.106
## 3 LLY          0.055
## 4 NVDA         0.265
## 5 TSLA         0.391

6 Plot: Colum Chart of Component Contribution and Weight

asset_returns_wide_tbl <- asset_returns_tbl %>%
    
    pivot_wider(names_from = asset, values_from = returns) %>%
    
    column_to_rownames(var = "date")

asset_returns_wide_tbl
##                     AMZN            HD           LLY         NVDA         TSLA
## 2013-01-31  0.0566799395  0.0787855805  8.489712e-02  0.000000000  0.102078114
## 2013-02-28 -0.0046435024  0.0233358855  2.705456e-02  0.038221513 -0.074128640
## 2013-03-28  0.0083654162  0.0239971314  3.822824e-02  0.013339108  0.084208138
## 2013-04-30 -0.0487507497  0.0498948548 -2.514156e-02  0.070706276  0.354111531
## 2013-05-31  0.0588686246  0.0698921746 -3.216761e-02  0.054652115  0.593716684
## 2013-06-28  0.0310507506 -0.0103004231 -7.903986e-02 -0.030167233  0.093672163
## 2013-07-31  0.0813355350  0.0199370477  7.809887e-02  0.028091844  0.223739522
## 2013-08-30 -0.0695574090 -0.0591623464 -2.362021e-02  0.026270270  0.229971642
## 2013-09-30  0.1067688897  0.0233419569 -2.103667e-02  0.053460137  0.134706620
## 2013-10-31  0.1521839116  0.0265400746 -1.018513e-02 -0.024065963 -0.189806595
## 2013-11-29  0.0781496860  0.0350690543  1.783353e-02  0.032034692 -0.228409405
## 2013-12-31  0.0130490386  0.0253914958  1.541234e-02  0.026567172  0.167108541
## 2014-01-31 -0.1059765119 -0.0690018893  5.734350e-02 -0.020177573  0.187261714
## 2014-02-28  0.0094619003  0.0652297096  1.076841e-01  0.162107598  0.299722785
## 2014-03-31 -0.0737086161 -0.0302574407 -1.266180e-02 -0.025903793 -0.160783242
## 2014-04-30 -0.1007565303  0.0047910631  4.069215e-03  0.030788759 -0.002690122
## 2014-05-30  0.0273091844  0.0090144589  2.105822e-02  0.032886131 -0.000577422
## 2014-06-30  0.0383836202  0.0148881260  3.786395e-02 -0.024508072  0.144457224
## 2014-07-31 -0.0369768154 -0.0013585386 -1.801554e-02 -0.057730175 -0.072372676
## 2014-08-29  0.0799468404  0.1453653629  4.814403e-02  0.110060312  0.188794007
## 2014-09-30 -0.0502010184 -0.0139635206  2.009218e-02 -0.052782688 -0.105566477
## 2014-10-31 -0.0540982347  0.0610991125  2.256553e-02  0.057399140 -0.004046477
## 2014-11-28  0.1031187277  0.0190942578  3.387641e-02  0.074852212  0.011599801
## 2014-12-31 -0.0872368614  0.0592872117  1.269063e-02 -0.044863472 -0.094774519
## 2015-01-30  0.1330922557 -0.0052534645  4.270476e-02 -0.043319148 -0.088365289
## 2015-02-27  0.0697992426  0.0943348017 -1.862771e-02  0.142699554 -0.001277808
## 2015-03-31 -0.0214295755 -0.0048519856  3.473257e-02 -0.052583174 -0.074350051
## 2015-04-30  0.1253212736 -0.0601296655 -1.079447e-02  0.058908784  0.180226808
## 2015-05-29  0.0175090293  0.0406649062  1.002140e-01  0.001460290  0.103899574
## 2015-06-30  0.0112589814  0.0026915557  5.654548e-02 -0.095717239  0.067300935
## 2015-07-31  0.2111621090  0.0517293675  1.214306e-02 -0.007988006 -0.007896616
## 2015-08-31 -0.0443525782 -0.0048821783 -1.988827e-02  0.123595460 -0.066366250
## 2015-09-30 -0.0019516837 -0.0032848928  1.614119e-02  0.092150607 -0.002653519
## 2015-10-30  0.2010808743  0.0681898427 -2.565819e-02  0.140555330 -0.182659777
## 2015-11-30  0.0602956777  0.0795701487  1.206584e-02  0.115405542  0.106828586
## 2015-12-31  0.0165440008 -0.0078335466  2.670039e-02  0.038347433  0.041471519
## 2016-01-29 -0.1410054620 -0.0503184953 -6.319465e-02 -0.118048457 -0.227360626
## 2016-02-29 -0.0605352209 -0.0131265332 -8.710638e-02  0.071923552  0.003810669
## 2016-03-31  0.0717834363  0.0778121744  1.389809e-04  0.127654702  0.179948109
## 2016-04-29  0.1053453760  0.0034411838  4.772511e-02 -0.002810615  0.046721797
## 2016-05-31  0.0915002899 -0.0081431745  1.393417e-05  0.276388359 -0.075597968
## 2016-06-30 -0.0099694639 -0.0341049023  4.838980e-02  0.006188120 -0.050296440
## 2016-07-29  0.0586021229  0.0793859715  5.123622e-02  0.194443575  0.100785334
## 2016-08-31  0.0135476418 -0.0251416105 -5.766442e-02  0.073469073 -0.102058091
## 2016-09-30  0.0848953908 -0.0414059113  3.177311e-02  0.110693716 -0.038366372
## 2016-10-31 -0.0583893058 -0.0532257577 -8.337066e-02  0.037805174 -0.031364583
## 2016-11-30 -0.0509721927  0.0641009907 -8.889170e-02  0.260525342 -0.043041267
## 2016-12-30 -0.0009330556  0.0355282294  9.148371e-02  0.146435763  0.120665178
## 2017-01-31  0.0936394059  0.0257690309  4.622901e-02  0.022601931  0.164624916
## 2017-02-28  0.0258446800  0.0519075101  7.906108e-02 -0.071875032 -0.007730364
## 2017-03-31  0.0479423007  0.0192297507  1.557687e-02  0.070843928  0.107278727
## 2017-04-28  0.0424566944  0.0612211938 -2.467487e-02 -0.043434229  0.120916212
## 2017-05-31  0.0725778018 -0.0109686832 -2.437713e-02  0.326022081  0.082295892
## 2017-06-30 -0.0271286156 -0.0007168729  3.373402e-02  0.001453936  0.058654468
## 2017-07-31  0.0202278808 -0.0250835731  4.364586e-03  0.117044572 -0.111459860
## 2017-08-31 -0.0072953953  0.0076990369 -1.035472e-02  0.042639433  0.095543446
## 2017-09-29 -0.0198260355  0.0874118355  5.096115e-02  0.053601393 -0.042474144
## 2017-10-31  0.1395154056  0.0134815658 -4.299711e-02  0.145700324 -0.028457409
## 2017-11-30  0.0626577318  0.0863479744  3.871506e-02 -0.029244614 -0.070862541
## 2017-12-29 -0.0062057845  0.0525908069 -2.128887e-03 -0.036583630  0.008061928
## 2018-01-31  0.2156265497  0.0582602398 -3.628849e-02  0.239240651  0.129254571
## 2018-02-28  0.0415536279 -0.0973183345 -4.850983e-02 -0.014959119 -0.032266877
## 2018-03-29 -0.0440034760 -0.0166710245  4.534379e-03 -0.043969208 -0.253920408
## 2018-04-30  0.0788803060  0.0361430063  4.671388e-02 -0.029312665  0.099254576
## 2018-05-31  0.0397392430  0.0150079842  5.468055e-02  0.115145239 -0.031698139
## 2018-06-29  0.0421636787  0.0448130025  3.404422e-03 -0.062544961  0.186043257
## 2018-07-31  0.0446635734  0.0123278115  1.466727e-01  0.033048642 -0.140021491
## 2018-08-31  0.1243079079  0.0214328511  7.244375e-02  0.137075312  0.011737389
## 2018-09-28 -0.0048359814  0.0312831471  1.559043e-02  0.001210693 -0.130439038
## 2018-10-31 -0.2258869989 -0.1636413353  1.047531e-02 -0.287373430  0.242170576
## 2018-11-30  0.0560700324  0.0308953956  9.491841e-02 -0.253667493  0.038271580
## 2018-12-31 -0.1180514843 -0.0482856910 -2.492015e-02 -0.202283210 -0.051761952
## 2019-01-31  0.1348080312  0.0659305848  3.515073e-02  0.073974226 -0.080628789
## 2019-02-28 -0.0469930640  0.0087342823  5.766186e-02  0.071593579  0.041032981
## 2019-03-29  0.0824420184  0.0432287439  2.710577e-02  0.151870096 -0.133656413
## 2019-04-30  0.0786806224  0.0597260110 -1.031708e-01  0.007987759 -0.159123803
## 2019-05-31 -0.0818753491 -0.0704140582 -3.848666e-03 -0.288680000 -0.253945372
## 2019-06-28  0.0646557767  0.0981494315 -4.543640e-02  0.192591766  0.188012109
## 2019-07-31 -0.0142806686  0.0271324442 -1.674733e-02  0.026972519  0.078092373
## 2019-08-30 -0.0496880810  0.0644244893  4.182353e-02 -0.006208104 -0.068516948
## 2019-09-30 -0.0229951159  0.0239606846 -1.014252e-02  0.038414457  0.065449565
## 2019-10-31  0.0232034080  0.0109732050  1.877974e-02  0.143946699  0.268061253
## 2019-11-29  0.0134958216 -0.0618537975  3.513642e-02  0.076031764  0.046592176
## 2019-12-31  0.0257863501 -0.0033307626  1.133131e-01  0.082162638  0.237359743
## 2020-01-31  0.0834803026  0.0435475958  6.059348e-02  0.004791018  0.441578342
## 2020-02-28 -0.0642332026 -0.0460234778 -9.658469e-02  0.133627002  0.026424253
## 2020-03-31  0.0344213022 -0.1475358694  9.514446e-02 -0.024248334 -0.242781458
## 2020-04-30  0.2381504762  0.1632976614  1.086423e-01  0.103279176  0.400209535
## 2020-05-29 -0.0128673719  0.1225079435 -6.292163e-03  0.194461689  0.065730500
## 2020-06-30  0.1218341331  0.0140897538  7.085218e-02  0.068216916  0.257108657
## 2020-07-31  0.1372488933  0.0580786034 -8.839645e-02  0.111189641  0.281420674
## 2020-08-31  0.0866005735  0.0710521789 -7.860410e-03  0.231105278  0.554719320
## 2020-09-30 -0.0916533253 -0.0207923594 -2.496379e-03  0.011895710 -0.149762306
## 2020-10-30 -0.0364089187 -0.0404156635 -1.262807e-01 -0.076501590 -0.100371771
## 2020-11-30  0.0425228214  0.0393346232  1.152649e-01  0.066921881  0.380308519
## 2020-12-31  0.0276719582 -0.0379919849  1.477450e-01 -0.025900198  0.217730753
## 2021-01-29 -0.0156985929  0.0193875579  2.084424e-01 -0.005010506  0.117343701
## 2021-02-26 -0.0359675607 -0.0471776442 -1.075327e-02  0.054292972 -0.161038203
## 2021-03-31  0.0003717151  0.1731013333 -9.232745e-02 -0.026723169 -0.011269836
## 2021-04-30  0.1139202399  0.0585934264 -2.191735e-02  0.117297890  0.060292565
## 2021-05-28 -0.0730764715 -0.0148158470  9.319753e-02  0.079071092 -0.126372343
## 2021-06-30  0.0651836137  0.0051678766  1.389736e-01  0.208332102  0.083547955
## 2021-07-30 -0.0332696301  0.0287459340  5.912676e-02 -0.025494317  0.010973846
## 2021-08-31  0.0421339363 -0.0061432568  6.218971e-02  0.138204273  0.068224268
## 2021-09-30 -0.0550034409  0.0114279562 -1.114489e-01 -0.077484698  0.052632612
## 2021-10-29  0.0262547651  0.1243887728  9.768788e-02  0.210396241  0.362230202
## 2021-11-30  0.0391473463  0.0747937603 -2.349018e-02  0.245338158  0.027237848
## 2021-12-31 -0.0505062029  0.0394414951  1.076076e-01 -0.105149407 -0.079968440
## 2022-01-31 -0.1085098142 -0.1229951198 -1.183488e-01 -0.183267473 -0.120597475
## 2022-02-28  0.0263230079 -0.1501033424  2.257800e-02 -0.004133051 -0.073397011
## 2022-03-31  0.0596239190 -0.0476407982  1.360237e-01  0.112575617  0.213504290
## 2022-04-29 -0.2711856801  0.0035682560  1.991407e-02 -0.386065652 -0.213125289
## 2022-05-31 -0.0333130879  0.0077923694  7.377332e-02  0.006717222 -0.138340062
## 2022-06-30 -0.1238178226 -0.0924986100  3.384519e-02 -0.208219133 -0.118657126
## 2022-07-29  0.2394860591  0.0927979416  1.669969e-02  0.180792226  0.280480149
## 2022-08-31 -0.0625299224 -0.0359895717 -8.701939e-02 -0.185089363 -0.075250271
## 2022-09-30 -0.1149865758 -0.0442344303  7.086113e-02 -0.217576931 -0.038313992
## 2022-10-31 -0.0981105335  0.0706150102  1.131576e-01  0.106044206 -0.153346760
## 2022-11-30 -0.0593198454  0.0959456724  2.731045e-02  0.226461806 -0.155866121
## 2022-12-30 -0.1391406409 -0.0254135678 -1.422176e-02 -0.146693587 -0.457813194
## 2023-01-31  0.2051735029  0.0259688397 -6.111843e-02  0.290330101  0.340915767
## 2023-02-28 -0.0902516639 -0.0890859340 -9.734734e-02  0.172531518  0.171904973
## 2023-03-31  0.0918019370  0.0024155042  9.845420e-02  0.179536463  0.008471140
## 2023-04-28  0.0206963031  0.0181990107  1.421063e-01 -0.001008420 -0.233183710
## 2023-05-31  0.1340765703 -0.0513718827  8.406586e-02  0.310008200  0.216021889
## 2023-06-30  0.0779864104  0.0915989949  8.803166e-02  0.111729812  0.249689452
## 2023-07-31  0.0251489708  0.0720271694 -3.125237e-02  0.099530558  0.021391609
## 2023-08-31  0.0318772770 -0.0042951791  2.003590e-01  0.054674199 -0.035588260
## 2023-09-29 -0.0821945627 -0.0890445401 -3.128531e-02 -0.126218838 -0.030929027
## 2023-10-31  0.0458940197 -0.0595558249  3.079793e-02 -0.064546120 -0.219831983
## 2023-11-30  0.0931972815  0.1030589654  6.669140e-02  0.137050148  0.178463656
## 2023-12-29  0.0392628771  0.1002596770 -1.383355e-02  0.057262957  0.034390133
## 2024-01-31  0.0212288659  0.0183277320  1.021455e-01  0.217059118 -0.282704160
## 2024-02-29  0.1300782611  0.0754203799  1.565235e-01  0.251388512  0.075015304
## 2024-03-28  0.0202729146  0.0137883179  3.170727e-02  0.132939648 -0.138383423
## 2024-04-30 -0.0302797899 -0.1378009772  4.028099e-03 -0.044746491  0.041724969
## 2024-05-31  0.0081949152  0.0088705888  5.071880e-02  0.238127560 -0.028782134
## 2024-06-28  0.0910037984  0.0275966031  9.863581e-02  0.119508657  0.105427913
## 2024-07-31 -0.0329830511  0.0671786035 -1.184196e-01 -0.054220171  0.159378271
## 2024-08-30 -0.0464130352  0.0069786330  1.784153e-01  0.019883146 -0.080549177
## 2024-09-30  0.0429307038  0.0949400894 -8.030490e-02  0.017277928  0.200441406
## 2024-10-31  0.0003755644 -0.0286646042 -6.553687e-02  0.089122746 -0.046070548
## 2024-11-29  0.1091142212  0.0912959118 -4.067532e-02  0.040520595  0.323147326
## 2024-12-31  0.0538418744 -0.0982063372 -2.979764e-02 -0.028993106  0.157010663
## 2025-01-31  0.0800742352  0.0574212126  4.938212e-02 -0.111926736  0.001880189
## 2025-02-28 -0.1130190481 -0.0380465801  1.284135e-01  0.039598579 -0.322794555
## 2025-03-31 -0.1095146233 -0.0726309844 -1.085725e-01 -0.141937962 -0.122658739
## 2025-04-30 -0.0311757737 -0.0165070667  8.474170e-02  0.004970099  0.085028653
## 2025-05-30  0.1058429765  0.0214065498 -1.956833e-01  0.215623673  0.205293048
## 2025-06-30  0.0677922335  0.0017050787  5.519472e-02  0.156363856 -0.086785707
## 2025-07-31  0.0649401278  0.0023700608 -5.194642e-02  0.118521186 -0.030005653
## 2025-08-29 -0.0220690894  0.1014973623 -7.978192e-03 -0.020963769  0.079775694
## 2025-09-30 -0.0420508819  0.0017654749  4.068545e-02  0.068827324  0.286693192
## 2025-10-31  0.1063983418 -0.0652643857  1.229944e-01  0.081830418  0.026275247
## 2025-11-18 -0.0929176542 -0.1205529686  1.785777e-01 -0.110206520 -0.129135446
calculate_component_contribution <- function(.data, w) {
    
    # Covariance of asset returns
    covariance_matrix <- cov(.data)
    
    # Standard deviation of portfolio
    # Summarizes how much each asset's returns vary with those of other assets within the portfolio into a single number
    sd_portfolio <- sqrt(t(w) %*% covariance_matrix %*% w)
    
    # Component contribution
    # Similar to the formula for sd_portfolio
    # Mathematical trick to summarize the same, sd_portfolio, by asset instead on a single number
    component_contribution <- (t(w) %*% covariance_matrix * w) / sd_portfolio[1,1]
    
    # Component contribution in percentage
    component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
        round(3) %>%
        as_tibble()
    
    return(component_percentages)
}

asset_returns_wide_tbl %>% calculate_component_contribution(w = c(0.2, 0.2, 0.2, 0.2, 0.2))
## # A tibble: 1 × 5
##    AMZN    HD   LLY  NVDA  TSLA
##   <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.184 0.106 0.055 0.265 0.391
plot_data <- asset_returns_wide_tbl %>%
    
    calculate_component_contribution(w = c(0.2, 0.2, 0.2, 0.2, 0.2)) %>%
    
    # Transform to long form
    pivot_longer(cols = everything(), names_to = "Asset", values_to = "Contribution") %>%
    
    # Add weights
    add_column(weight = c(0.2, 0.2, 0.2, 0.2, 0.2)) %>%
    
    # Transform to long
    pivot_longer(cols = c(Contribution, weight), names_to = "type", values_to = "value")

plot_data %>%
    
    ggplot(aes(x = Asset, y = value, fill = type)) + 
    geom_col(position = "dodge") + 
    
    scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + 
    scale_fill_tq() + 
    theme(plot.title = element_text(hjust = 0.5)) + 
    theme_tq() + 
    
    labs(title = "Percent Contribution to Portfolio Volatility and Weight", y = "Percent", x = NULL)

Which of the assets in your portfolio the largest contributor to the portfolio volatility?

Based on the results I have yielded, Tesla has the largest contribution to my portfolios volatility with a contribution of 39.10%

Do you think your portfolio risk is concentrated in any one asset?

Although I had equal weights for all of the stocks, I do think that the portfolio’s risk is heavily concentrated in TSLA and NVDA, as they produce the most volatility. HD, LLY, and AMZN are my less volatile stocks, having less of a impact on the overall risk of the portfolio.