# 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", "META", "XOM", "AAPL", "PG", "AMZN")

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
##                     AAPL          AMZN          META            PG         TSLA
## 2013-01-31 -1.555895e-01  0.0566799395  0.1516789757  0.1098054217  0.102078114
## 2013-02-28 -2.561119e-02 -0.0046435024 -0.1282882991  0.0134794505 -0.074128640
## 2013-03-28  2.850887e-03  0.0083654162 -0.0632427279  0.0114856261  0.084208138
## 2013-04-30  2.709165e-04 -0.0487507497  0.0821455246  0.0035496757  0.354111531
## 2013-05-31  2.217177e-02  0.0588686246 -0.1314244526 -0.0001301402  0.593716684
## 2013-06-28 -1.258961e-01  0.0310507506  0.0215323689  0.0029917303  0.093672163
## 2013-07-31  1.321022e-01  0.0813355350  0.3914335903  0.0495567308  0.223739522
## 2013-08-30  8.044309e-02 -0.0695574090  0.1151225376 -0.0304720869  0.229971642
## 2013-09-30 -2.172376e-02  0.1067688897  0.1959920866 -0.0299735976  0.134706620
## 2013-10-31  9.201554e-02  0.1521839116 -0.0003982568  0.0738218652 -0.189806595
## 2013-11-29  6.770806e-02  0.0781496860 -0.0658538825  0.0420747925 -0.228409405
## 2013-12-31  8.862423e-03  0.0130490386  0.1505889332 -0.0339343001  0.167108541
## 2014-01-31 -1.139490e-01 -0.1059765119  0.1353366826 -0.0531035606  0.187261714
## 2014-02-28  5.591802e-02  0.0094619003  0.0899636946  0.0262768405  0.299722785
## 2014-03-31  1.975639e-02 -0.0737086161 -0.1279130084  0.0243631672 -0.160783242
## 2014-04-30  9.476110e-02 -0.1007565303 -0.0076654749  0.0318633729 -0.002690122
## 2014-05-30  7.576507e-02  0.0273091844  0.0572141807 -0.0215504755 -0.000577422
## 2014-06-30  2.728622e-02  0.0383836202  0.0611263337 -0.0276086255  0.144457224
## 2014-07-31  2.832667e-02 -0.0369768154  0.0766417602 -0.0083354707 -0.072372676
## 2014-08-29  7.465126e-02  0.0799468404  0.0294318138  0.0722124904  0.188794007
## 2014-09-30 -1.722075e-02 -0.0502010184  0.0548688402  0.0075518029 -0.105566477
## 2014-10-31  6.948911e-02 -0.0540982347 -0.0525993222  0.0489305840 -0.004046477
## 2014-11-28  1.007310e-01  0.1031187277  0.0355004753  0.0355692987  0.011599801
## 2014-12-31 -7.460619e-02 -0.0872368614  0.0041099430  0.0072718807 -0.094774519
## 2015-01-30  5.961162e-02  0.1330922557 -0.0274166848 -0.0704975139 -0.088365289
## 2015-02-27  9.601587e-02  0.0697992426  0.0395195727  0.0099160783 -0.001277808
## 2015-03-31 -3.187446e-02 -0.0214295755  0.0403305473 -0.0381923504 -0.074350051
## 2015-04-30  5.769985e-03  0.1253212736 -0.0428664252 -0.0220929768  0.180226808
## 2015-05-29  4.434148e-02  0.0175090293  0.0053178880 -0.0141863790  0.103899574
## 2015-06-30 -3.793839e-02  0.0112589814  0.0798191968 -0.0019156697  0.067300935
## 2015-07-31 -3.348087e-02  0.2111621090  0.0917319265 -0.0117239108 -0.007896616
## 2015-08-31 -6.848900e-02 -0.0443525782 -0.0499449825 -0.0818807010 -0.066366250
## 2015-09-30 -2.205807e-02 -0.0019516837  0.0052417587  0.0178112879 -0.002653519
## 2015-10-30  8.011276e-02  0.2010808743  0.1259807059  0.0688360491 -0.182659777
## 2015-11-30 -5.821272e-03  0.0602956777  0.0220172480 -0.0203686021  0.106828586
## 2015-12-31 -1.167905e-01  0.0165440008  0.0040211236  0.0592721301  0.041471519
## 2016-01-29 -7.822331e-02 -0.1410054620  0.0696550716  0.0369854640 -0.227360626
## 2016-02-29 -1.288363e-03 -0.0605352209 -0.0482912334 -0.0172863546  0.003810669
## 2016-03-31  1.197459e-01  0.0717834363  0.0649943693  0.0248475192  0.179948109
## 2016-04-29 -1.507311e-01  0.1053453760  0.0300437251 -0.0188087864  0.046721797
## 2016-05-31  6.931407e-02  0.0915002899  0.0104065894  0.0114174144 -0.075597968
## 2016-06-30 -4.359596e-02 -0.0099694639 -0.0388739912  0.0438181768 -0.050296440
## 2016-07-29  8.623499e-02  0.0586021229  0.0811460306  0.0186129952  0.100785334
## 2016-08-31  2.337648e-02  0.0135476418  0.0174362592  0.0198964839 -0.102058091
## 2016-09-30  6.344839e-02  0.0848953908  0.0169035942  0.0275632322 -0.038366372
## 2016-10-31  4.324738e-03 -0.0583893058  0.0209835757 -0.0257305204 -0.031364583
## 2016-11-30 -2.183745e-02 -0.0509721927 -0.1008834147 -0.0512935601 -0.043041267
## 2016-12-30  4.684060e-02 -0.0009330556 -0.0288707686  0.0194555232  0.120665178
## 2017-01-31  4.664168e-02  0.0936394059  0.1246261775  0.0489063054  0.164624916
## 2017-02-28  1.255557e-01  0.0258446800  0.0392737297  0.0388475394 -0.007730364
## 2017-03-31  4.754096e-02  0.0479423007  0.0469123796 -0.0134867241  0.107278727
## 2017-04-28 -6.958977e-05  0.0424566944  0.0561214436 -0.0208197444  0.120916212
## 2017-05-31  6.560748e-02  0.0725778018  0.0080210346  0.0086652132  0.082295892
## 2017-06-30 -5.891598e-02 -0.0271286156 -0.0031742586 -0.0107285805  0.058654468
## 2017-07-31  3.218049e-02  0.0202278808  0.1142295624  0.0490638340 -0.111459860
## 2017-08-31  1.016531e-01 -0.0072953953  0.0159431383  0.0158393405  0.095543446
## 2017-09-29 -6.213475e-02 -0.0198260355 -0.0064170452 -0.0140790304 -0.042474144
## 2017-10-31  9.240372e-02  0.1395154056  0.0523871102 -0.0448815245 -0.028457409
## 2017-11-30  2.007537e-02  0.0626577318 -0.0161239915  0.0414058040 -0.070862541
## 2017-12-29 -1.536341e-02 -0.0062057845 -0.0040718638  0.0207847454  0.008061928
## 2018-01-31 -1.069348e-02  0.2156265497  0.0574259454 -0.0545960418  0.129254571
## 2018-02-28  6.596088e-02  0.0415536279 -0.0469404751 -0.0949390891 -0.032266877
## 2018-03-29 -5.980376e-02 -0.0440034760 -0.1097193190  0.0096321713 -0.253920408
## 2018-04-30 -1.513359e-02  0.0788803060  0.0736340657 -0.0823976834  0.099254576
## 2018-05-31  1.267417e-01  0.0397392430  0.1088543985  0.0114086885 -0.031698139
## 2018-06-29 -9.462877e-03  0.0421636787  0.0131574470  0.0646919480  0.186043257
## 2018-07-31  2.759879e-02  0.0446635734 -0.1186454147  0.0445237032 -0.140021491
## 2018-08-31  1.826735e-01  0.1243079079  0.0180877942  0.0252713672  0.011737389
## 2018-09-28 -8.337539e-03 -0.0048359814 -0.0662812815  0.0033698018 -0.130439038
## 2018-10-31 -3.095175e-02 -0.2258869989 -0.0801694780  0.0722239850  0.242170576
## 2018-11-30 -1.999124e-01  0.0560700324 -0.0765078375  0.0636713515  0.038271580
## 2018-12-31 -1.240887e-01 -0.1180514843 -0.0701060227 -0.0277873372 -0.051761952
## 2019-01-31  5.368671e-02  0.1348080312  0.2402517323  0.0561917606 -0.080628789
## 2019-02-28  4.380325e-02 -0.0469930640 -0.0319403363  0.0213319897  0.041032981
## 2019-03-29  9.260245e-02  0.0824420184  0.0319403363  0.0543074599 -0.133656413
## 2019-04-30  5.490104e-02  0.0786806224  0.1486247369  0.0301203364 -0.159123803
## 2019-05-31 -1.326323e-01 -0.0818753491 -0.0859589640 -0.0341024173 -0.253945372
## 2019-06-28  1.226769e-01  0.0646557767  0.0838886015  0.0634387129  0.188012109
## 2019-07-31  7.361705e-02 -0.0142806686  0.0063528129  0.0801851341  0.078092373
## 2019-08-30 -1.659833e-02 -0.0496880810 -0.0450721073  0.0183831037 -0.068516948
## 2019-09-30  7.042270e-02 -0.0229951159 -0.0417379967  0.0339348782  0.065449565
## 2019-10-31  1.049765e-01  0.0232034080  0.0734378622  0.0074120470  0.268061253
## 2019-11-29  7.469370e-02  0.0134958216  0.0508131662 -0.0198732634  0.046592176
## 2019-12-31  9.420405e-02  0.0257863501  0.0177448221  0.0230006770  0.237359743
## 2020-01-31  5.260197e-02  0.0834803026 -0.0164066766  0.0036793432  0.441578342
## 2020-02-28 -1.218304e-01 -0.0642332026 -0.0478817679 -0.0958479101  0.026424253
## 2020-03-31 -7.231431e-02  0.0344213022 -0.1431447955 -0.0289409195 -0.242781458
## 2020-04-30  1.444240e-01  0.2381504762  0.2047988680  0.0757489015  0.400209535
## 2020-05-29  8.166677e-02 -0.0128673719  0.0949059297 -0.0166819746  0.065730500
## 2020-06-30  1.374866e-01  0.1218341331  0.0087580663  0.0310017305  0.257108657
## 2020-07-31  1.528339e-01  0.1372488933  0.1107758302  0.0985014357  0.281420674
## 2020-08-31  1.960347e-01  0.0866005735  0.1448208092  0.0535292731  0.554719320
## 2020-09-30 -1.081713e-01 -0.0916533253 -0.1128922834  0.0047597769 -0.149762306
## 2020-10-30 -6.188825e-02 -0.0364089187  0.0046094118 -0.0081543103 -0.100371771
## 2020-11-30  9.120470e-02  0.0425228214  0.0513370615  0.0128277192  0.380308519
## 2020-12-31  1.084720e-01  0.0276719582 -0.0138514840  0.0019424593  0.217730753
## 2021-01-29 -5.516673e-03 -0.0156985929 -0.0558199321 -0.0757974417  0.117343701
## 2021-02-26 -8.306871e-02 -0.0359675607 -0.0027521734 -0.0371855093 -0.161038203
## 2021-03-31  7.312773e-03  0.0003717151  0.1338952493  0.0919708720 -0.011269836
## 2021-04-30  7.345290e-02  0.1139202399  0.0986904032 -0.0085753341  0.060292565
## 2021-05-28 -5.181669e-02 -0.0730764715  0.0111655140  0.0106610922 -0.126372343
## 2021-06-30  9.450013e-02  0.0651836137  0.0561319959  0.0005927393  0.083547955
## 2021-07-30  6.295829e-02 -0.0332696301  0.0244042639  0.0589591381  0.010973846
## 2021-08-31  4.161139e-02  0.0421339363  0.0627653158  0.0011244821  0.068224268
## 2021-09-30 -7.046175e-02 -0.0550034409 -0.1113884224 -0.0183569608  0.052632612
## 2021-10-29  5.700126e-02  0.0262547651 -0.0477344353  0.0287418781  0.362230202
## 2021-11-30  9.991941e-02  0.0391473463  0.0027467392  0.0110583665  0.027237848
## 2021-12-31  7.160287e-02 -0.0505062029  0.0359900670  0.1234692430 -0.079968440
## 2022-01-31 -1.583690e-02 -0.1085098142 -0.0711187548 -0.0139350003 -0.120597475
## 2022-02-28 -5.558227e-02  0.0263230079 -0.3950332501 -0.0288318931 -0.073397011
## 2022-03-31  5.588244e-02  0.0596239190  0.0522973952 -0.0200206122  0.213504290
## 2022-04-29 -1.021776e-01 -0.2711856801 -0.1036330771  0.0550700952 -0.213125289
## 2022-05-31 -5.603728e-02 -0.0333130879 -0.0346638538 -0.0822042357 -0.138340062
## 2022-06-30 -8.493681e-02 -0.1238178226 -0.1830448062 -0.0280472714 -0.118657126
## 2022-07-29  1.728044e-01  0.2394860591 -0.0134229820 -0.0280566657  0.280480149
## 2022-08-31 -3.170532e-02 -0.0625299224  0.0237876421 -0.0070074288 -0.075250271
## 2022-09-30 -1.289443e-01 -0.1149865758 -0.1830214977 -0.0885548273 -0.038313992
## 2022-10-31  1.039558e-01 -0.0981105335 -0.3759806337  0.0716352322 -0.153346760
## 2022-11-30 -3.358511e-02 -0.0593198454  0.2372132260  0.1021921701 -0.155866121
## 2022-12-30 -1.304192e-01 -0.1391406409  0.0187893291  0.0159620242 -0.457813194
## 2023-01-31  1.048293e-01  0.2051735029  0.2134239122 -0.0562266519  0.340915767
## 2023-02-28  2.291843e-02 -0.0902516639  0.1606981204 -0.0344393404  0.171904973
## 2023-03-31  1.121214e-01  0.0918019370  0.1918601553  0.0778033815  0.008471140
## 2023-04-28  2.857505e-02  0.0206963031  0.1256681718  0.0566667335 -0.233183710
## 2023-05-31  4.502913e-02  0.1340765703  0.0967012692 -0.0929469742  0.216021889
## 2023-06-15  4.823924e-02  0.0527394099  0.0626313364  0.0409061809  0.227009958
##                     XOM
## 2013-01-31  0.038753814
## 2013-02-28  0.001689317
## 2013-03-28  0.006233944
## 2013-04-30 -0.012507193
## 2013-05-31  0.023388530
## 2013-06-28 -0.001327336
## 2013-07-31  0.036940793
## 2013-08-30 -0.065998659
## 2013-09-30 -0.012932763
## 2013-10-31  0.040765992
## 2013-11-29  0.048950093
## 2013-12-31  0.079351091
## 2014-01-31 -0.093572315
## 2014-02-28  0.050688058
## 2014-03-31  0.014539943
## 2014-04-30  0.047287622
## 2014-05-30 -0.011761749
## 2014-06-30  0.001491020
## 2014-07-31 -0.017433559
## 2014-08-29  0.012184002
## 2014-09-30 -0.055929127
## 2014-10-31  0.027890328
## 2014-11-28 -0.058731180
## 2014-12-31  0.020876350
## 2015-01-30 -0.055944017
## 2015-02-27  0.020229233
## 2015-03-31 -0.040803101
## 2015-04-30  0.027500797
## 2015-05-29 -0.016913742
## 2015-06-30 -0.023754098
## 2015-07-31 -0.049144765
## 2015-08-31 -0.042106416
## 2015-09-30 -0.011899360
## 2015-10-30  0.106919412
## 2015-11-30 -0.004458872
## 2015-12-31 -0.046496891
## 2016-01-29 -0.001283752
## 2016-02-29  0.038151470
## 2016-03-31  0.042023909
## 2016-04-29  0.055948102
## 2016-05-31  0.015358297
## 2016-06-30  0.051663959
## 2016-07-29 -0.052450512
## 2016-08-31 -0.012067123
## 2016-09-30  0.001605177
## 2016-10-31 -0.046432577
## 2016-11-30  0.055477873
## 2016-12-30  0.033343937
## 2017-01-31 -0.073188226
## 2017-02-28 -0.022011992
## 2017-03-31  0.008449361
## 2017-04-28 -0.004399346
## 2017-05-31 -0.004785651
## 2017-06-30  0.002852992
## 2017-07-31 -0.008583512
## 2017-08-31 -0.037814686
## 2017-09-29  0.071409499
## 2017-10-31  0.016573272
## 2017-11-30  0.008492226
## 2017-12-29  0.004193235
## 2018-01-31  0.042828577
## 2018-02-28 -0.131870131
## 2018-03-29 -0.015031829
## 2018-04-30  0.041223690
## 2018-05-31  0.053994382
## 2018-06-29  0.018174341
## 2018-07-31 -0.014856187
## 2018-08-31 -0.006315034
## 2018-09-28  0.058737067
## 2018-10-31 -0.064867658
## 2018-11-30  0.007824772
## 2018-12-31 -0.153459251
## 2019-01-31  0.071989539
## 2019-02-28  0.086580855
## 2019-03-29  0.022149484
## 2019-04-30 -0.006456666
## 2019-05-31 -0.114687756
## 2019-06-28  0.079553378
## 2019-07-31 -0.030070514
## 2019-08-30 -0.070019097
## 2019-09-30  0.030629955
## 2019-10-31 -0.044007812
## 2019-11-29  0.020241274
## 2019-12-31  0.023929851
## 2020-01-31 -0.116279476
## 2020-02-28 -0.174397761
## 2020-03-31 -0.303619196
## 2020-04-30  0.202010305
## 2020-05-29 -0.002550263
## 2020-06-30 -0.016632020
## 2020-07-31 -0.060848237
## 2020-08-31 -0.032658521
## 2020-09-30 -0.151358475
## 2020-10-30 -0.051094171
## 2020-11-30  0.179916009
## 2020-12-31  0.077921979
## 2021-01-29  0.084176970
## 2021-02-26  0.209551659
## 2021-03-31  0.026498846
## 2021-04-30  0.024941694
## 2021-05-28  0.034011829
## 2021-06-30  0.077601835
## 2021-07-30 -0.091402186
## 2021-08-31 -0.039411765
## 2021-09-30  0.075914310
## 2021-10-29  0.091718058
## 2021-11-30 -0.061175906
## 2021-12-31  0.022309454
## 2022-01-31  0.216223097
## 2022-02-28  0.042897111
## 2022-03-31  0.051809573
## 2022-04-29  0.031699499
## 2022-05-31  0.128951123
## 2022-06-30 -0.114195586
## 2022-07-29  0.123836547
## 2022-08-31 -0.004251465
## 2022-09-30 -0.090603206
## 2022-10-31  0.238351940
## 2022-11-30  0.012789543
## 2022-12-30 -0.009384571
## 2023-01-31  0.050472483
## 2023-02-28 -0.046349079
## 2023-03-31 -0.002277172
## 2023-04-28  0.076177061
## 2023-05-31 -0.138185857
## 2023-06-15  0.035664847
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)

covariance_matrix
##              AAPL         AMZN         META            PG          TSLA
## AAPL 0.0064335580 0.0035600448 0.0027219810  0.0009748874  0.0055885015
## AMZN 0.0035600448 0.0077108486 0.0036204301  0.0001829217  0.0054979408
## META 0.0027219810 0.0036204301 0.0109266480  0.0009189940  0.0053769003
## PG   0.0009748874 0.0001829217 0.0009189940  0.0020732808 -0.0001211479
## TSLA 0.0055885015 0.0054979408 0.0053769003 -0.0001211479  0.0300766049
## XOM  0.0014126956 0.0010125450 0.0003395727  0.0007279222  0.0010201268
##               XOM
## AAPL 0.0014126956
## AMZN 0.0010125450
## META 0.0003395727
## PG   0.0007279222
## TSLA 0.0010201268
## XOM  0.0057525149
# 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.15, 0.15, 0.1)

sd_portfolio <- sqrt(t(w) %*% covariance_matrix %*% w)
sd_portfolio
##            [,1]
## [1,] 0.06201554
# 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
##            AAPL       AMZN       META          PG       TSLA         XOM
## [1,] 0.01183218 0.01267956 0.01429369 0.001888977 0.01907909 0.002242053
rowSums(component_contribution)
## [1] 0.06201554
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
    round(3) %>%
    as_tibble()

component_percentages
## # A tibble: 1 × 6
##    AAPL  AMZN  META    PG  TSLA   XOM
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.191 0.204  0.23  0.03 0.308 0.036
component_percentages %>%

    as_tibble() %>%
    gather(key = "asset", value = "contribution")
## # A tibble: 6 × 2
##   asset contribution
##   <chr>        <dbl>
## 1 AAPL         0.191
## 2 AMZN         0.204
## 3 META         0.23 
## 4 PG           0.03 
## 5 TSLA         0.308
## 6 XOM          0.036

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
##                     AAPL          AMZN          META            PG         TSLA
## 2013-01-31 -1.555895e-01  0.0566799395  0.1516789757  0.1098054217  0.102078114
## 2013-02-28 -2.561119e-02 -0.0046435024 -0.1282882991  0.0134794505 -0.074128640
## 2013-03-28  2.850887e-03  0.0083654162 -0.0632427279  0.0114856261  0.084208138
## 2013-04-30  2.709165e-04 -0.0487507497  0.0821455246  0.0035496757  0.354111531
## 2013-05-31  2.217177e-02  0.0588686246 -0.1314244526 -0.0001301402  0.593716684
## 2013-06-28 -1.258961e-01  0.0310507506  0.0215323689  0.0029917303  0.093672163
## 2013-07-31  1.321022e-01  0.0813355350  0.3914335903  0.0495567308  0.223739522
## 2013-08-30  8.044309e-02 -0.0695574090  0.1151225376 -0.0304720869  0.229971642
## 2013-09-30 -2.172376e-02  0.1067688897  0.1959920866 -0.0299735976  0.134706620
## 2013-10-31  9.201554e-02  0.1521839116 -0.0003982568  0.0738218652 -0.189806595
## 2013-11-29  6.770806e-02  0.0781496860 -0.0658538825  0.0420747925 -0.228409405
## 2013-12-31  8.862423e-03  0.0130490386  0.1505889332 -0.0339343001  0.167108541
## 2014-01-31 -1.139490e-01 -0.1059765119  0.1353366826 -0.0531035606  0.187261714
## 2014-02-28  5.591802e-02  0.0094619003  0.0899636946  0.0262768405  0.299722785
## 2014-03-31  1.975639e-02 -0.0737086161 -0.1279130084  0.0243631672 -0.160783242
## 2014-04-30  9.476110e-02 -0.1007565303 -0.0076654749  0.0318633729 -0.002690122
## 2014-05-30  7.576507e-02  0.0273091844  0.0572141807 -0.0215504755 -0.000577422
## 2014-06-30  2.728622e-02  0.0383836202  0.0611263337 -0.0276086255  0.144457224
## 2014-07-31  2.832667e-02 -0.0369768154  0.0766417602 -0.0083354707 -0.072372676
## 2014-08-29  7.465126e-02  0.0799468404  0.0294318138  0.0722124904  0.188794007
## 2014-09-30 -1.722075e-02 -0.0502010184  0.0548688402  0.0075518029 -0.105566477
## 2014-10-31  6.948911e-02 -0.0540982347 -0.0525993222  0.0489305840 -0.004046477
## 2014-11-28  1.007310e-01  0.1031187277  0.0355004753  0.0355692987  0.011599801
## 2014-12-31 -7.460619e-02 -0.0872368614  0.0041099430  0.0072718807 -0.094774519
## 2015-01-30  5.961162e-02  0.1330922557 -0.0274166848 -0.0704975139 -0.088365289
## 2015-02-27  9.601587e-02  0.0697992426  0.0395195727  0.0099160783 -0.001277808
## 2015-03-31 -3.187446e-02 -0.0214295755  0.0403305473 -0.0381923504 -0.074350051
## 2015-04-30  5.769985e-03  0.1253212736 -0.0428664252 -0.0220929768  0.180226808
## 2015-05-29  4.434148e-02  0.0175090293  0.0053178880 -0.0141863790  0.103899574
## 2015-06-30 -3.793839e-02  0.0112589814  0.0798191968 -0.0019156697  0.067300935
## 2015-07-31 -3.348087e-02  0.2111621090  0.0917319265 -0.0117239108 -0.007896616
## 2015-08-31 -6.848900e-02 -0.0443525782 -0.0499449825 -0.0818807010 -0.066366250
## 2015-09-30 -2.205807e-02 -0.0019516837  0.0052417587  0.0178112879 -0.002653519
## 2015-10-30  8.011276e-02  0.2010808743  0.1259807059  0.0688360491 -0.182659777
## 2015-11-30 -5.821272e-03  0.0602956777  0.0220172480 -0.0203686021  0.106828586
## 2015-12-31 -1.167905e-01  0.0165440008  0.0040211236  0.0592721301  0.041471519
## 2016-01-29 -7.822331e-02 -0.1410054620  0.0696550716  0.0369854640 -0.227360626
## 2016-02-29 -1.288363e-03 -0.0605352209 -0.0482912334 -0.0172863546  0.003810669
## 2016-03-31  1.197459e-01  0.0717834363  0.0649943693  0.0248475192  0.179948109
## 2016-04-29 -1.507311e-01  0.1053453760  0.0300437251 -0.0188087864  0.046721797
## 2016-05-31  6.931407e-02  0.0915002899  0.0104065894  0.0114174144 -0.075597968
## 2016-06-30 -4.359596e-02 -0.0099694639 -0.0388739912  0.0438181768 -0.050296440
## 2016-07-29  8.623499e-02  0.0586021229  0.0811460306  0.0186129952  0.100785334
## 2016-08-31  2.337648e-02  0.0135476418  0.0174362592  0.0198964839 -0.102058091
## 2016-09-30  6.344839e-02  0.0848953908  0.0169035942  0.0275632322 -0.038366372
## 2016-10-31  4.324738e-03 -0.0583893058  0.0209835757 -0.0257305204 -0.031364583
## 2016-11-30 -2.183745e-02 -0.0509721927 -0.1008834147 -0.0512935601 -0.043041267
## 2016-12-30  4.684060e-02 -0.0009330556 -0.0288707686  0.0194555232  0.120665178
## 2017-01-31  4.664168e-02  0.0936394059  0.1246261775  0.0489063054  0.164624916
## 2017-02-28  1.255557e-01  0.0258446800  0.0392737297  0.0388475394 -0.007730364
## 2017-03-31  4.754096e-02  0.0479423007  0.0469123796 -0.0134867241  0.107278727
## 2017-04-28 -6.958977e-05  0.0424566944  0.0561214436 -0.0208197444  0.120916212
## 2017-05-31  6.560748e-02  0.0725778018  0.0080210346  0.0086652132  0.082295892
## 2017-06-30 -5.891598e-02 -0.0271286156 -0.0031742586 -0.0107285805  0.058654468
## 2017-07-31  3.218049e-02  0.0202278808  0.1142295624  0.0490638340 -0.111459860
## 2017-08-31  1.016531e-01 -0.0072953953  0.0159431383  0.0158393405  0.095543446
## 2017-09-29 -6.213475e-02 -0.0198260355 -0.0064170452 -0.0140790304 -0.042474144
## 2017-10-31  9.240372e-02  0.1395154056  0.0523871102 -0.0448815245 -0.028457409
## 2017-11-30  2.007537e-02  0.0626577318 -0.0161239915  0.0414058040 -0.070862541
## 2017-12-29 -1.536341e-02 -0.0062057845 -0.0040718638  0.0207847454  0.008061928
## 2018-01-31 -1.069348e-02  0.2156265497  0.0574259454 -0.0545960418  0.129254571
## 2018-02-28  6.596088e-02  0.0415536279 -0.0469404751 -0.0949390891 -0.032266877
## 2018-03-29 -5.980376e-02 -0.0440034760 -0.1097193190  0.0096321713 -0.253920408
## 2018-04-30 -1.513359e-02  0.0788803060  0.0736340657 -0.0823976834  0.099254576
## 2018-05-31  1.267417e-01  0.0397392430  0.1088543985  0.0114086885 -0.031698139
## 2018-06-29 -9.462877e-03  0.0421636787  0.0131574470  0.0646919480  0.186043257
## 2018-07-31  2.759879e-02  0.0446635734 -0.1186454147  0.0445237032 -0.140021491
## 2018-08-31  1.826735e-01  0.1243079079  0.0180877942  0.0252713672  0.011737389
## 2018-09-28 -8.337539e-03 -0.0048359814 -0.0662812815  0.0033698018 -0.130439038
## 2018-10-31 -3.095175e-02 -0.2258869989 -0.0801694780  0.0722239850  0.242170576
## 2018-11-30 -1.999124e-01  0.0560700324 -0.0765078375  0.0636713515  0.038271580
## 2018-12-31 -1.240887e-01 -0.1180514843 -0.0701060227 -0.0277873372 -0.051761952
## 2019-01-31  5.368671e-02  0.1348080312  0.2402517323  0.0561917606 -0.080628789
## 2019-02-28  4.380325e-02 -0.0469930640 -0.0319403363  0.0213319897  0.041032981
## 2019-03-29  9.260245e-02  0.0824420184  0.0319403363  0.0543074599 -0.133656413
## 2019-04-30  5.490104e-02  0.0786806224  0.1486247369  0.0301203364 -0.159123803
## 2019-05-31 -1.326323e-01 -0.0818753491 -0.0859589640 -0.0341024173 -0.253945372
## 2019-06-28  1.226769e-01  0.0646557767  0.0838886015  0.0634387129  0.188012109
## 2019-07-31  7.361705e-02 -0.0142806686  0.0063528129  0.0801851341  0.078092373
## 2019-08-30 -1.659833e-02 -0.0496880810 -0.0450721073  0.0183831037 -0.068516948
## 2019-09-30  7.042270e-02 -0.0229951159 -0.0417379967  0.0339348782  0.065449565
## 2019-10-31  1.049765e-01  0.0232034080  0.0734378622  0.0074120470  0.268061253
## 2019-11-29  7.469370e-02  0.0134958216  0.0508131662 -0.0198732634  0.046592176
## 2019-12-31  9.420405e-02  0.0257863501  0.0177448221  0.0230006770  0.237359743
## 2020-01-31  5.260197e-02  0.0834803026 -0.0164066766  0.0036793432  0.441578342
## 2020-02-28 -1.218304e-01 -0.0642332026 -0.0478817679 -0.0958479101  0.026424253
## 2020-03-31 -7.231431e-02  0.0344213022 -0.1431447955 -0.0289409195 -0.242781458
## 2020-04-30  1.444240e-01  0.2381504762  0.2047988680  0.0757489015  0.400209535
## 2020-05-29  8.166677e-02 -0.0128673719  0.0949059297 -0.0166819746  0.065730500
## 2020-06-30  1.374866e-01  0.1218341331  0.0087580663  0.0310017305  0.257108657
## 2020-07-31  1.528339e-01  0.1372488933  0.1107758302  0.0985014357  0.281420674
## 2020-08-31  1.960347e-01  0.0866005735  0.1448208092  0.0535292731  0.554719320
## 2020-09-30 -1.081713e-01 -0.0916533253 -0.1128922834  0.0047597769 -0.149762306
## 2020-10-30 -6.188825e-02 -0.0364089187  0.0046094118 -0.0081543103 -0.100371771
## 2020-11-30  9.120470e-02  0.0425228214  0.0513370615  0.0128277192  0.380308519
## 2020-12-31  1.084720e-01  0.0276719582 -0.0138514840  0.0019424593  0.217730753
## 2021-01-29 -5.516673e-03 -0.0156985929 -0.0558199321 -0.0757974417  0.117343701
## 2021-02-26 -8.306871e-02 -0.0359675607 -0.0027521734 -0.0371855093 -0.161038203
## 2021-03-31  7.312773e-03  0.0003717151  0.1338952493  0.0919708720 -0.011269836
## 2021-04-30  7.345290e-02  0.1139202399  0.0986904032 -0.0085753341  0.060292565
## 2021-05-28 -5.181669e-02 -0.0730764715  0.0111655140  0.0106610922 -0.126372343
## 2021-06-30  9.450013e-02  0.0651836137  0.0561319959  0.0005927393  0.083547955
## 2021-07-30  6.295829e-02 -0.0332696301  0.0244042639  0.0589591381  0.010973846
## 2021-08-31  4.161139e-02  0.0421339363  0.0627653158  0.0011244821  0.068224268
## 2021-09-30 -7.046175e-02 -0.0550034409 -0.1113884224 -0.0183569608  0.052632612
## 2021-10-29  5.700126e-02  0.0262547651 -0.0477344353  0.0287418781  0.362230202
## 2021-11-30  9.991941e-02  0.0391473463  0.0027467392  0.0110583665  0.027237848
## 2021-12-31  7.160287e-02 -0.0505062029  0.0359900670  0.1234692430 -0.079968440
## 2022-01-31 -1.583690e-02 -0.1085098142 -0.0711187548 -0.0139350003 -0.120597475
## 2022-02-28 -5.558227e-02  0.0263230079 -0.3950332501 -0.0288318931 -0.073397011
## 2022-03-31  5.588244e-02  0.0596239190  0.0522973952 -0.0200206122  0.213504290
## 2022-04-29 -1.021776e-01 -0.2711856801 -0.1036330771  0.0550700952 -0.213125289
## 2022-05-31 -5.603728e-02 -0.0333130879 -0.0346638538 -0.0822042357 -0.138340062
## 2022-06-30 -8.493681e-02 -0.1238178226 -0.1830448062 -0.0280472714 -0.118657126
## 2022-07-29  1.728044e-01  0.2394860591 -0.0134229820 -0.0280566657  0.280480149
## 2022-08-31 -3.170532e-02 -0.0625299224  0.0237876421 -0.0070074288 -0.075250271
## 2022-09-30 -1.289443e-01 -0.1149865758 -0.1830214977 -0.0885548273 -0.038313992
## 2022-10-31  1.039558e-01 -0.0981105335 -0.3759806337  0.0716352322 -0.153346760
## 2022-11-30 -3.358511e-02 -0.0593198454  0.2372132260  0.1021921701 -0.155866121
## 2022-12-30 -1.304192e-01 -0.1391406409  0.0187893291  0.0159620242 -0.457813194
## 2023-01-31  1.048293e-01  0.2051735029  0.2134239122 -0.0562266519  0.340915767
## 2023-02-28  2.291843e-02 -0.0902516639  0.1606981204 -0.0344393404  0.171904973
## 2023-03-31  1.121214e-01  0.0918019370  0.1918601553  0.0778033815  0.008471140
## 2023-04-28  2.857505e-02  0.0206963031  0.1256681718  0.0566667335 -0.233183710
## 2023-05-31  4.502913e-02  0.1340765703  0.0967012692 -0.0929469742  0.216021889
## 2023-06-15  4.823924e-02  0.0527394099  0.0626313364  0.0409061809  0.227009958
##                     XOM
## 2013-01-31  0.038753814
## 2013-02-28  0.001689317
## 2013-03-28  0.006233944
## 2013-04-30 -0.012507193
## 2013-05-31  0.023388530
## 2013-06-28 -0.001327336
## 2013-07-31  0.036940793
## 2013-08-30 -0.065998659
## 2013-09-30 -0.012932763
## 2013-10-31  0.040765992
## 2013-11-29  0.048950093
## 2013-12-31  0.079351091
## 2014-01-31 -0.093572315
## 2014-02-28  0.050688058
## 2014-03-31  0.014539943
## 2014-04-30  0.047287622
## 2014-05-30 -0.011761749
## 2014-06-30  0.001491020
## 2014-07-31 -0.017433559
## 2014-08-29  0.012184002
## 2014-09-30 -0.055929127
## 2014-10-31  0.027890328
## 2014-11-28 -0.058731180
## 2014-12-31  0.020876350
## 2015-01-30 -0.055944017
## 2015-02-27  0.020229233
## 2015-03-31 -0.040803101
## 2015-04-30  0.027500797
## 2015-05-29 -0.016913742
## 2015-06-30 -0.023754098
## 2015-07-31 -0.049144765
## 2015-08-31 -0.042106416
## 2015-09-30 -0.011899360
## 2015-10-30  0.106919412
## 2015-11-30 -0.004458872
## 2015-12-31 -0.046496891
## 2016-01-29 -0.001283752
## 2016-02-29  0.038151470
## 2016-03-31  0.042023909
## 2016-04-29  0.055948102
## 2016-05-31  0.015358297
## 2016-06-30  0.051663959
## 2016-07-29 -0.052450512
## 2016-08-31 -0.012067123
## 2016-09-30  0.001605177
## 2016-10-31 -0.046432577
## 2016-11-30  0.055477873
## 2016-12-30  0.033343937
## 2017-01-31 -0.073188226
## 2017-02-28 -0.022011992
## 2017-03-31  0.008449361
## 2017-04-28 -0.004399346
## 2017-05-31 -0.004785651
## 2017-06-30  0.002852992
## 2017-07-31 -0.008583512
## 2017-08-31 -0.037814686
## 2017-09-29  0.071409499
## 2017-10-31  0.016573272
## 2017-11-30  0.008492226
## 2017-12-29  0.004193235
## 2018-01-31  0.042828577
## 2018-02-28 -0.131870131
## 2018-03-29 -0.015031829
## 2018-04-30  0.041223690
## 2018-05-31  0.053994382
## 2018-06-29  0.018174341
## 2018-07-31 -0.014856187
## 2018-08-31 -0.006315034
## 2018-09-28  0.058737067
## 2018-10-31 -0.064867658
## 2018-11-30  0.007824772
## 2018-12-31 -0.153459251
## 2019-01-31  0.071989539
## 2019-02-28  0.086580855
## 2019-03-29  0.022149484
## 2019-04-30 -0.006456666
## 2019-05-31 -0.114687756
## 2019-06-28  0.079553378
## 2019-07-31 -0.030070514
## 2019-08-30 -0.070019097
## 2019-09-30  0.030629955
## 2019-10-31 -0.044007812
## 2019-11-29  0.020241274
## 2019-12-31  0.023929851
## 2020-01-31 -0.116279476
## 2020-02-28 -0.174397761
## 2020-03-31 -0.303619196
## 2020-04-30  0.202010305
## 2020-05-29 -0.002550263
## 2020-06-30 -0.016632020
## 2020-07-31 -0.060848237
## 2020-08-31 -0.032658521
## 2020-09-30 -0.151358475
## 2020-10-30 -0.051094171
## 2020-11-30  0.179916009
## 2020-12-31  0.077921979
## 2021-01-29  0.084176970
## 2021-02-26  0.209551659
## 2021-03-31  0.026498846
## 2021-04-30  0.024941694
## 2021-05-28  0.034011829
## 2021-06-30  0.077601835
## 2021-07-30 -0.091402186
## 2021-08-31 -0.039411765
## 2021-09-30  0.075914310
## 2021-10-29  0.091718058
## 2021-11-30 -0.061175906
## 2021-12-31  0.022309454
## 2022-01-31  0.216223097
## 2022-02-28  0.042897111
## 2022-03-31  0.051809573
## 2022-04-29  0.031699499
## 2022-05-31  0.128951123
## 2022-06-30 -0.114195586
## 2022-07-29  0.123836547
## 2022-08-31 -0.004251465
## 2022-09-30 -0.090603206
## 2022-10-31  0.238351940
## 2022-11-30  0.012789543
## 2022-12-30 -0.009384571
## 2023-01-31  0.050472483
## 2023-02-28 -0.046349079
## 2023-03-31 -0.002277172
## 2023-04-28  0.076177061
## 2023-05-31 -0.138185857
## 2023-06-15  0.035664847
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.15, 0.15, 0.1))
## # A tibble: 1 × 6
##    AAPL  AMZN  META    PG  TSLA   XOM
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.191 0.204  0.23  0.03 0.308 0.036
plot_data <- asset_returns_wide_tbl %>%
    
    calculate_component_contribution(w = c(0.2, 0.2, 0.2, 0.15, 0.15, 0.1)) %>%
    
    # 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.15, 0.15, 0.1)) %>%
    
    # 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 is the largest contributor to the portfolio volatility?

Based on the results, TSLA has the largest contribution to the portfolio volatility with a contribution of 30.8%.

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

Based on the results, it can be concluded that the portfolio risk is indeed a little concentrated on TSLA. META, AMZN, and AAPL also contribute significantly to the portfolio volatility. However, PG and XOM have relatively low contributions, indicating that they are less likely to have a substantial influence on the portfolio’s overall risk.

Therefore, the portfolio risk is a little concentrated on TSLA, but it is important to acknowledge that META, AMZN, and AAPL also contribute significantly. Thus, while there is some level of concentration, it is not solely limited to a single asset.