# 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("AAPL", "NKE", "WMT", "AMZN", "NFLX")

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

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          NFLX           NKE
## 2013-01-31 -1.555895e-01  0.0566799395  0.5792178072  0.0463877001
## 2013-02-28 -2.561091e-02 -0.0046435024  0.1294683790  0.0114293292
## 2013-03-28  2.850483e-03  0.0083654162  0.0063600708  0.0802403898
## 2013-04-30  2.709271e-04 -0.0487507497  0.1323750202  0.0749062144
## 2013-05-31  2.217175e-02  0.0588686246  0.0460381788 -0.0276349938
## 2013-06-28 -1.258957e-01  0.0310507506 -0.0693560587  0.0322350207
## 2013-07-31  1.321026e-01  0.0813355350  0.1468488828 -0.0120064058
## 2013-08-30  8.044249e-02 -0.0695574090  0.1495238153  0.0017290123
## 2013-09-30 -2.172347e-02  0.1067688897  0.0853633452  0.1452412736
## 2013-10-31  9.201535e-02  0.1521839116  0.0420204523  0.0420554518
## 2013-11-29  6.770815e-02  0.0781496860  0.1260456325  0.0436476540
## 2013-12-31  8.862103e-03  0.0130490386  0.0064580908 -0.0032097859
## 2014-01-31 -1.139493e-01 -0.1059765119  0.1059769064 -0.0764776794
## 2014-02-28  5.591836e-02  0.0094619003  0.0849673396  0.0752104209
## 2014-03-31  1.975642e-02 -0.0737086161 -0.2357726219 -0.0583760483
## 2014-04-30  9.476091e-02 -0.1007565303 -0.0890406532 -0.0123973134
## 2014-05-30  7.576536e-02  0.0273091844  0.2603988640  0.0560134267
## 2014-06-30  2.728630e-02  0.0383836202  0.0530627854  0.0082868718
## 2014-07-31  2.832628e-02 -0.0369768154 -0.0414273713 -0.0054307654
## 2014-08-29  7.465193e-02  0.0799468404  0.1221472352  0.0212582234
## 2014-09-30 -1.722078e-02 -0.0502010184 -0.0569909207  0.1271455998
## 2014-10-31  6.948934e-02 -0.0540982347 -0.1386421470  0.0413960329
## 2014-11-28  1.007303e-01  0.1031187277 -0.1250817171  0.0657678597
## 2014-12-31 -7.460594e-02 -0.0872368614 -0.0144727330 -0.0292640440
## 2015-01-30  5.961167e-02  0.1330922557  0.2571875124 -0.0414073670
## 2015-02-27  9.601577e-02  0.0697992426  0.0722680160  0.0543410959
## 2015-03-31 -3.187422e-02 -0.0214295755 -0.1307827695  0.0325174960
## 2015-04-30  5.769568e-03  0.1253212736  0.2893246523 -0.0149623969
## 2015-05-29  4.434146e-02  0.0175090293  0.1145793430  0.0309561830
## 2015-06-30 -3.793815e-02  0.0112589814  0.0513461801  0.0605844730
## 2015-07-31 -3.348120e-02  0.2111621090  0.1972314899  0.0645268943
## 2015-08-31 -6.848885e-02 -0.0443525782  0.0062789186 -0.0305793184
## 2015-09-30 -2.205771e-02 -0.0019516837 -0.1079428532  0.0982089692
## 2015-10-30  8.011227e-02  0.2010808743  0.0483934447  0.0634860152
## 2015-11-30 -5.821117e-03  0.0602956777  0.1292201596  0.0094942926
## 2015-12-31 -1.167902e-01  0.0165440008 -0.0753374900 -0.0541859920
## 2016-01-29 -7.822350e-02 -0.1410054620 -0.2194783218 -0.0078708397
## 2016-02-29 -1.288175e-03 -0.0605352209  0.0169505524 -0.0067961343
## 2016-03-31  1.197458e-01  0.0717834363  0.0902267645  0.0006242962
## 2016-04-29 -1.507311e-01  0.1053453760 -0.1270822750 -0.0420293127
## 2016-05-31  6.931441e-02  0.0915002899  0.1304025548 -0.0651944236
## 2016-06-30 -4.359643e-02 -0.0099694639 -0.1144250835  0.0025548699
## 2016-07-29  8.623500e-02  0.0586021229 -0.0025174134  0.0054201466
## 2016-08-31  2.337661e-02  0.0135476418  0.0657364022  0.0378336873
## 2016-09-30  6.344829e-02  0.0848953908  0.0112246699 -0.0877710300
## 2016-10-31  4.324784e-03 -0.0583893058  0.2367091536 -0.0480494586
## 2016-11-30 -2.183750e-02 -0.0509721927 -0.0650992833 -0.0021950549
## 2016-12-30  4.684080e-02 -0.0009330556  0.0564934501  0.0186663346
## 2017-01-31  4.664156e-02  0.0936394059  0.1280336976  0.0399168848
## 2017-02-28  1.255552e-01  0.0258446800  0.0100410836  0.0774510837
## 2017-03-31  4.754156e-02  0.0479423007  0.0391854826 -0.0222248247
## 2017-04-28 -6.966058e-05  0.0424566944  0.0292677767 -0.0057587661
## 2017-05-31  6.560712e-02  0.0725778018  0.0689841760 -0.0446567827
## 2017-06-30 -5.891553e-02 -0.0271286156 -0.0874853720  0.1108366724
## 2017-07-31  3.218068e-02  0.0202278808  0.1954425989  0.0008473281
## 2017-08-31  1.016529e-01 -0.0072953953 -0.0390093333 -0.1082535995
## 2017-09-29 -6.213494e-02 -0.0198260355  0.0373014045 -0.0183453947
## 2017-10-31  9.240352e-02  0.1395154056  0.0798771971  0.0587962604
## 2017-11-30  2.007509e-02  0.0626577318 -0.0461006656  0.0941689173
## 2017-12-29 -1.536342e-02 -0.0062057845  0.0230816211  0.0379615851
## 2018-01-31 -1.069325e-02  0.2156265497  0.3422453562  0.0867719987
## 2018-02-28  6.596124e-02  0.0415536279  0.0750958659 -0.0175976724
## 2018-03-29 -5.980417e-02 -0.0440034760  0.0135328404 -0.0058209924
## 2018-04-30 -1.513360e-02  0.0788803060  0.0563153192  0.0289274320
## 2018-05-31  1.267421e-01  0.0397392430  0.1180177495  0.0486578671
## 2018-06-29 -9.463175e-03  0.0421636787  0.1073124981  0.1069237286
## 2018-07-31  2.759915e-02  0.0446635734 -0.1483892939 -0.0353827998
## 2018-08-31  1.826733e-01  0.1243079079  0.0857955874  0.0689794408
## 2018-09-28 -8.337456e-03 -0.0048359814  0.0173903689  0.0301962776
## 2018-10-31 -3.095158e-02 -0.2258869989 -0.2149050726 -0.1213304963
## 2018-11-30 -1.999125e-01  0.0560700324 -0.0532520010  0.0040295689
## 2018-12-31 -1.240887e-01 -0.1180514843 -0.0667287380 -0.0131317033
## 2019-01-31  5.368668e-02  0.1348080312  0.2377564149  0.0992992441
## 2019-02-28  4.380314e-02 -0.0469930640  0.0533383470  0.0459484467
## 2019-03-29  9.260255e-02  0.0824420184 -0.0043097723 -0.0153197698
## 2019-04-30  5.490107e-02  0.0786806224  0.0384589024  0.0420895263
## 2019-05-31 -1.326322e-01 -0.0818753491 -0.0764149871 -0.1270017765
## 2019-06-28  1.226770e-01  0.0646557767  0.0676869856  0.0845992778
## 2019-07-31  7.361675e-02 -0.0142806686 -0.1286120899  0.0244748156
## 2019-08-30 -1.659810e-02 -0.0496880810 -0.0948922673 -0.0153647948
## 2019-09-30  7.042266e-02 -0.0229951159 -0.0931610198  0.1056920829
## 2019-10-31  1.049766e-01  0.0232034080  0.0713417349 -0.0476461882
## 2019-11-29  7.469360e-02  0.0134958216  0.0905829220  0.0456631146
## 2019-12-31  9.420411e-02  0.0257863501  0.0279227940  0.0803307231
## 2020-01-31  5.260166e-02  0.0834803026  0.0643897455 -0.0507166081
## 2020-02-28 -1.218302e-01 -0.0642332026  0.0670726963 -0.0718008504
## 2020-03-31 -7.231449e-02  0.0344213022  0.0173805330 -0.0771940366
## 2020-04-30  1.444241e-01  0.2381504762  0.1116390480  0.0522721265
## 2020-05-29  8.166685e-02 -0.0128673719 -0.0002858456  0.1253847508
## 2020-06-30  1.374865e-01  0.1218341331  0.0807736724 -0.0053908076
## 2020-07-31  1.528340e-01  0.1372488933  0.0717317246 -0.0044976395
## 2020-08-31  1.960348e-01  0.0866005735  0.0799293979  0.1387491252
## 2020-09-30 -1.081715e-01 -0.0916533253 -0.0573783743  0.1151080734
## 2020-10-30 -6.188846e-02 -0.0364089187 -0.0497966282 -0.0444661498
## 2020-11-30  9.120486e-02  0.0425228214  0.0309615020  0.1148918280
## 2020-12-31  1.084721e-01  0.0276719582  0.0970870744  0.0510475586
## 2021-01-29 -5.516871e-03 -0.0156985929 -0.0155437114 -0.0573125906
## 2021-02-26 -8.306856e-02 -0.0359675607  0.0120608627  0.0108998341
## 2021-03-31  7.312590e-03  0.0003717151 -0.0324212105 -0.0141219698
## 2021-04-30  7.345311e-02  0.1139202399 -0.0158244352 -0.0020340357
## 2021-05-28 -5.181689e-02 -0.0730764715 -0.0209791877  0.0305595115
## 2021-06-30  9.450016e-02  0.0651836137  0.0492816132  0.1240977388
## 2021-07-30  6.295830e-02 -0.0332696301 -0.0203491777  0.0809137210
## 2021-08-31  4.161137e-02  0.0421339363  0.0950695060 -0.0150256617
## 2021-09-30 -7.046182e-02 -0.0550034409  0.0698019211 -0.1260500146
## 2021-10-29  5.700144e-02  0.0262547651  0.1231245456  0.1414103002
## 2021-11-30  9.991923e-02  0.0391473463 -0.0727082022  0.0115891752
## 2021-12-31  7.160291e-02 -0.0505062029 -0.0634444870 -0.0135064037
## 2022-01-31 -1.583698e-02 -0.1085098142 -0.3438762168 -0.1183307620
## 2022-02-28 -5.558215e-02  0.0263230079 -0.0794420544 -0.0809944589
## 2022-03-31  5.588237e-02  0.0596239190 -0.0518377235 -0.0124012394
## 2022-04-29 -1.021774e-01 -0.2711856801 -0.6769150653 -0.0760993929
## 2022-05-31 -5.603731e-02 -0.0333130879  0.0365177336 -0.0480486280
## 2022-06-30 -8.493695e-02 -0.1238178226 -0.1213919403 -0.1484559368
## 2022-07-29  1.728046e-01  0.2394860591  0.2516130190  0.1173044998
## 2022-08-31 -3.170523e-02 -0.0625299224 -0.0059760083 -0.0765608298
## 2022-09-30 -1.289443e-01 -0.1149865758  0.0517762908 -0.2445218308
## 2022-10-31  1.039556e-01 -0.0981105335  0.2148866613  0.1088674159
## 2022-11-30 -3.358501e-02 -0.0593198454  0.0457051938  0.1685055140
## 2022-12-30 -1.304193e-01 -0.1391406409 -0.0354794590  0.0676659468
## 2023-01-31  1.048293e-01  0.2051735029  0.1823328028  0.0845228013
## 2023-02-28  2.291831e-02 -0.0902516639 -0.0939461074 -0.0694250094
## 2023-03-31  1.121215e-01  0.0918019370  0.0699795803  0.0347432651
## 2023-04-28  2.857513e-02  0.0206963031 -0.0460542977  0.0327267598
## 2023-05-31  4.502909e-02  0.1340765703  0.1805874132 -0.1855465601
## 2023-06-30  9.014221e-02  0.0779864104  0.1084198198  0.0506912020
## 2023-07-31  1.270457e-02  0.0251489708 -0.0034566451  0.0001812632
## 2023-08-31 -4.330827e-02  0.0318772770 -0.0121241583 -0.0818940261
## 2023-09-29 -9.285932e-02 -0.0821945627 -0.1384714676 -0.0583949732
## 2023-10-31 -2.573296e-03  0.0458940197  0.0864351944  0.0721112797
## 2023-11-30  1.077599e-01  0.0931972815  0.1408733862  0.0704385179
## 2023-12-29  1.349106e-02  0.0392628771  0.0268736650 -0.0121758168
## 2024-01-31 -4.314466e-02  0.0212288659  0.1472315458 -0.0670407884
## 2024-02-29 -1.871727e-02  0.1300782611  0.0665352476  0.0233632226
## 2024-03-28 -5.264827e-02  0.0202729146  0.0072878392 -0.0970690721
## 2024-04-30 -6.728849e-03 -0.0302797899 -0.0979910641 -0.0184713375
## 2024-05-31  1.224144e-01  0.0081949152  0.1529149558  0.0297923740
## 2024-06-28  9.125889e-02  0.0910037984  0.0505386840 -0.2280934244
## 2024-07-31  5.298220e-02 -0.0329830511 -0.0714376073 -0.0067897252
## 2024-08-30  3.184114e-02 -0.0464130352  0.1099097171  0.1070689144
## 2024-09-30  1.731646e-02  0.0429307038  0.0112292853  0.0636340495
## 2024-10-31 -3.090179e-02  0.0003755644  0.0638447971 -0.1363797307
## 2024-11-29  5.041449e-02  0.1091142212  0.1595496547  0.0210398547
## 2024-12-05  2.377443e-02  0.0591153497  0.0344250116  0.0026760987
##                      WMT
## 2013-01-31  0.0248965362
## 2013-02-28  0.0117957081
## 2013-03-28  0.0620733326
## 2013-04-30  0.0378934789
## 2013-05-31 -0.0317798670
## 2013-06-28 -0.0046877665
## 2013-07-31  0.0452745761
## 2013-08-30 -0.0596998326
## 2013-09-30  0.0133389529
## 2013-10-31  0.0370286969
## 2013-11-29  0.0540193773
## 2013-12-31 -0.0232521048
## 2014-01-31 -0.0523039173
## 2014-02-28  0.0002680848
## 2014-03-31  0.0293256940
## 2014-04-30  0.0420200534
## 2014-05-30 -0.0314090828
## 2014-06-30 -0.0223929641
## 2014-07-31 -0.0200476009
## 2014-08-29  0.0323256347
## 2014-09-30  0.0127657636
## 2014-10-31 -0.0026190188
## 2014-11-28  0.1378165646
## 2014-12-31 -0.0135740780
## 2015-01-30 -0.0105346891
## 2015-02-27 -0.0124330644
## 2015-03-31 -0.0142313433
## 2015-04-30 -0.0524138130
## 2015-05-29 -0.0433506123
## 2015-06-30 -0.0460141204
## 2015-07-31  0.0146949011
## 2015-08-31 -0.0993583425
## 2015-09-30  0.0016978214
## 2015-10-30 -0.1246701364
## 2015-11-30  0.0275691977
## 2015-12-31  0.0492991432
## 2016-01-29  0.0793149165
## 2016-02-29 -0.0003015780
## 2016-03-31  0.0392710061
## 2016-04-29 -0.0239379375
## 2016-05-31  0.0641209472
## 2016-06-30  0.0311567442
## 2016-07-29 -0.0006846277
## 2016-08-31 -0.0143682797
## 2016-09-30  0.0094735847
## 2016-10-31 -0.0295506861
## 2016-11-30  0.0058385861
## 2016-12-30 -0.0116434419
## 2017-01-31 -0.0350394155
## 2017-02-28  0.0608886506
## 2017-03-31  0.0234092095
## 2017-04-28  0.0421087011
## 2017-05-31  0.0511558377
## 2017-06-30 -0.0378572498
## 2017-07-31  0.0553874322
## 2017-08-31 -0.0180255760
## 2017-09-29  0.0008963611
## 2017-10-31  0.1109629341
## 2017-11-30  0.1076142347
## 2017-12-29  0.0207685628
## 2018-01-31  0.0764920267
## 2018-02-28 -0.1691629165
## 2018-03-29 -0.0056770447
## 2018-04-30 -0.0057487504
## 2018-05-31 -0.0629873533
## 2018-06-29  0.0369861543
## 2018-07-31  0.0409480874
## 2018-08-31  0.0774627843
## 2018-09-28 -0.0205520227
## 2018-10-31  0.0656296010
## 2018-11-30 -0.0265766710
## 2018-12-31 -0.0417364164
## 2019-01-31  0.0283646832
## 2019-02-28  0.0324432780
## 2019-03-29 -0.0094926767
## 2019-04-30  0.0530142151
## 2019-05-31 -0.0084087303
## 2019-06-28  0.0854578463
## 2019-07-31 -0.0009964163
## 2019-08-30  0.0394578026
## 2019-09-30  0.0379544924
## 2019-10-31 -0.0120371398
## 2019-11-29  0.0154858409
## 2019-12-31  0.0023740895
## 2020-01-31 -0.0372905733
## 2020-02-28 -0.0613237040
## 2020-03-31  0.0581107916
## 2020-04-30  0.0674662098
## 2020-05-29  0.0248285938
## 2020-06-30 -0.0351084276
## 2020-07-31  0.0772517157
## 2020-08-31  0.0745883358
## 2020-09-30  0.0076052159
## 2020-10-30 -0.0083255549
## 2020-11-30  0.0963905535
## 2020-12-31 -0.0545611848
## 2021-01-29 -0.0257179747
## 2021-02-26 -0.0782174415
## 2021-03-31  0.0486515484
## 2021-04-30  0.0295953623
## 2021-05-28  0.0189582774
## 2021-06-30 -0.0071366464
## 2021-07-30  0.0107912235
## 2021-08-31  0.0418679445
## 2021-09-30 -0.0606836979
## 2021-10-29  0.0695571015
## 2021-11-30 -0.0606287355
## 2021-12-31  0.0324794594
## 2022-01-31 -0.0343092571
## 2022-02-28 -0.0338251276
## 2022-03-31  0.1008102631
## 2022-04-29  0.0269633133
## 2022-05-31 -0.1698040171
## 2022-06-30 -0.0563676819
## 2022-07-29  0.0826081356
## 2022-08-31  0.0081250979
## 2022-09-30 -0.0217358676
## 2022-10-31  0.0929241914
## 2022-11-30  0.0684917213
## 2022-12-30 -0.0685301126
## 2023-01-31  0.0145630125
## 2023-02-28 -0.0121679518
## 2023-03-31  0.0408372088
## 2023-04-28  0.0235920083
## 2023-05-31 -0.0237417843
## 2023-06-30  0.0678438644
## 2023-07-31  0.0169067654
## 2023-08-31  0.0206049564
## 2023-09-29 -0.0166185629
## 2023-10-31  0.0215261781
## 2023-11-30 -0.0483955454
## 2023-12-29  0.0162177594
## 2024-01-31  0.0470820679
## 2024-02-29  0.0620581657
## 2024-03-28  0.0296685050
## 2024-04-30 -0.0137217222
## 2024-05-31  0.1060150534
## 2024-06-28  0.0292221364
## 2024-07-31  0.0136415209
## 2024-08-30  0.1207589765
## 2024-09-30  0.0445699361
## 2024-10-31  0.0147513058
## 2024-11-29  0.1210993766
## 2024-12-05  0.0298211982
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)

covariance_matrix
##             AAPL         AMZN         NFLX         NKE          WMT
## AAPL 0.006049203 0.0032645150 0.0027523143 0.001860236 0.0011947963
## AMZN 0.003264515 0.0071392648 0.0062686240 0.001709648 0.0008761259
## NFLX 0.002752314 0.0062686240 0.0172360940 0.002330652 0.0003538805
## NKE  0.001860236 0.0017096477 0.0023306519 0.005380418 0.0010699795
## WMT  0.001194796 0.0008761259 0.0003538805 0.001069979 0.0026885616
# 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.25, 0.25, 0.2, 0.2, 0.1)

sd_portfolio <- sqrt(t(w) %*% covariance_matrix %*% w)
sd_portfolio
##            [,1]
## [1,] 0.06139971
# 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       NFLX         NKE         WMT
## [1,] 0.01372327 0.01744394 0.02020847 0.008279136 0.001744892
rowSums(component_contribution)
## [1] 0.06139971
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
    round(3) %>%
    as_tibble()

component_percentages
## # A tibble: 1 × 5
##    AAPL  AMZN  NFLX   NKE   WMT
##   <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.224 0.284 0.329 0.135 0.028
component_percentages %>%

    as_tibble() %>%
    gather(key = "asset", value = "contribution")
## # A tibble: 5 × 2
##   asset contribution
##   <chr>        <dbl>
## 1 AAPL         0.224
## 2 AMZN         0.284
## 3 NFLX         0.329
## 4 NKE          0.135
## 5 WMT          0.028
# 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          NFLX           NKE
## 2013-01-31 -1.555895e-01  0.0566799395  0.5792178072  0.0463877001
## 2013-02-28 -2.561091e-02 -0.0046435024  0.1294683790  0.0114293292
## 2013-03-28  2.850483e-03  0.0083654162  0.0063600708  0.0802403898
## 2013-04-30  2.709271e-04 -0.0487507497  0.1323750202  0.0749062144
## 2013-05-31  2.217175e-02  0.0588686246  0.0460381788 -0.0276349938
## 2013-06-28 -1.258957e-01  0.0310507506 -0.0693560587  0.0322350207
## 2013-07-31  1.321026e-01  0.0813355350  0.1468488828 -0.0120064058
## 2013-08-30  8.044249e-02 -0.0695574090  0.1495238153  0.0017290123
## 2013-09-30 -2.172347e-02  0.1067688897  0.0853633452  0.1452412736
## 2013-10-31  9.201535e-02  0.1521839116  0.0420204523  0.0420554518
## 2013-11-29  6.770815e-02  0.0781496860  0.1260456325  0.0436476540
## 2013-12-31  8.862103e-03  0.0130490386  0.0064580908 -0.0032097859
## 2014-01-31 -1.139493e-01 -0.1059765119  0.1059769064 -0.0764776794
## 2014-02-28  5.591836e-02  0.0094619003  0.0849673396  0.0752104209
## 2014-03-31  1.975642e-02 -0.0737086161 -0.2357726219 -0.0583760483
## 2014-04-30  9.476091e-02 -0.1007565303 -0.0890406532 -0.0123973134
## 2014-05-30  7.576536e-02  0.0273091844  0.2603988640  0.0560134267
## 2014-06-30  2.728630e-02  0.0383836202  0.0530627854  0.0082868718
## 2014-07-31  2.832628e-02 -0.0369768154 -0.0414273713 -0.0054307654
## 2014-08-29  7.465193e-02  0.0799468404  0.1221472352  0.0212582234
## 2014-09-30 -1.722078e-02 -0.0502010184 -0.0569909207  0.1271455998
## 2014-10-31  6.948934e-02 -0.0540982347 -0.1386421470  0.0413960329
## 2014-11-28  1.007303e-01  0.1031187277 -0.1250817171  0.0657678597
## 2014-12-31 -7.460594e-02 -0.0872368614 -0.0144727330 -0.0292640440
## 2015-01-30  5.961167e-02  0.1330922557  0.2571875124 -0.0414073670
## 2015-02-27  9.601577e-02  0.0697992426  0.0722680160  0.0543410959
## 2015-03-31 -3.187422e-02 -0.0214295755 -0.1307827695  0.0325174960
## 2015-04-30  5.769568e-03  0.1253212736  0.2893246523 -0.0149623969
## 2015-05-29  4.434146e-02  0.0175090293  0.1145793430  0.0309561830
## 2015-06-30 -3.793815e-02  0.0112589814  0.0513461801  0.0605844730
## 2015-07-31 -3.348120e-02  0.2111621090  0.1972314899  0.0645268943
## 2015-08-31 -6.848885e-02 -0.0443525782  0.0062789186 -0.0305793184
## 2015-09-30 -2.205771e-02 -0.0019516837 -0.1079428532  0.0982089692
## 2015-10-30  8.011227e-02  0.2010808743  0.0483934447  0.0634860152
## 2015-11-30 -5.821117e-03  0.0602956777  0.1292201596  0.0094942926
## 2015-12-31 -1.167902e-01  0.0165440008 -0.0753374900 -0.0541859920
## 2016-01-29 -7.822350e-02 -0.1410054620 -0.2194783218 -0.0078708397
## 2016-02-29 -1.288175e-03 -0.0605352209  0.0169505524 -0.0067961343
## 2016-03-31  1.197458e-01  0.0717834363  0.0902267645  0.0006242962
## 2016-04-29 -1.507311e-01  0.1053453760 -0.1270822750 -0.0420293127
## 2016-05-31  6.931441e-02  0.0915002899  0.1304025548 -0.0651944236
## 2016-06-30 -4.359643e-02 -0.0099694639 -0.1144250835  0.0025548699
## 2016-07-29  8.623500e-02  0.0586021229 -0.0025174134  0.0054201466
## 2016-08-31  2.337661e-02  0.0135476418  0.0657364022  0.0378336873
## 2016-09-30  6.344829e-02  0.0848953908  0.0112246699 -0.0877710300
## 2016-10-31  4.324784e-03 -0.0583893058  0.2367091536 -0.0480494586
## 2016-11-30 -2.183750e-02 -0.0509721927 -0.0650992833 -0.0021950549
## 2016-12-30  4.684080e-02 -0.0009330556  0.0564934501  0.0186663346
## 2017-01-31  4.664156e-02  0.0936394059  0.1280336976  0.0399168848
## 2017-02-28  1.255552e-01  0.0258446800  0.0100410836  0.0774510837
## 2017-03-31  4.754156e-02  0.0479423007  0.0391854826 -0.0222248247
## 2017-04-28 -6.966058e-05  0.0424566944  0.0292677767 -0.0057587661
## 2017-05-31  6.560712e-02  0.0725778018  0.0689841760 -0.0446567827
## 2017-06-30 -5.891553e-02 -0.0271286156 -0.0874853720  0.1108366724
## 2017-07-31  3.218068e-02  0.0202278808  0.1954425989  0.0008473281
## 2017-08-31  1.016529e-01 -0.0072953953 -0.0390093333 -0.1082535995
## 2017-09-29 -6.213494e-02 -0.0198260355  0.0373014045 -0.0183453947
## 2017-10-31  9.240352e-02  0.1395154056  0.0798771971  0.0587962604
## 2017-11-30  2.007509e-02  0.0626577318 -0.0461006656  0.0941689173
## 2017-12-29 -1.536342e-02 -0.0062057845  0.0230816211  0.0379615851
## 2018-01-31 -1.069325e-02  0.2156265497  0.3422453562  0.0867719987
## 2018-02-28  6.596124e-02  0.0415536279  0.0750958659 -0.0175976724
## 2018-03-29 -5.980417e-02 -0.0440034760  0.0135328404 -0.0058209924
## 2018-04-30 -1.513360e-02  0.0788803060  0.0563153192  0.0289274320
## 2018-05-31  1.267421e-01  0.0397392430  0.1180177495  0.0486578671
## 2018-06-29 -9.463175e-03  0.0421636787  0.1073124981  0.1069237286
## 2018-07-31  2.759915e-02  0.0446635734 -0.1483892939 -0.0353827998
## 2018-08-31  1.826733e-01  0.1243079079  0.0857955874  0.0689794408
## 2018-09-28 -8.337456e-03 -0.0048359814  0.0173903689  0.0301962776
## 2018-10-31 -3.095158e-02 -0.2258869989 -0.2149050726 -0.1213304963
## 2018-11-30 -1.999125e-01  0.0560700324 -0.0532520010  0.0040295689
## 2018-12-31 -1.240887e-01 -0.1180514843 -0.0667287380 -0.0131317033
## 2019-01-31  5.368668e-02  0.1348080312  0.2377564149  0.0992992441
## 2019-02-28  4.380314e-02 -0.0469930640  0.0533383470  0.0459484467
## 2019-03-29  9.260255e-02  0.0824420184 -0.0043097723 -0.0153197698
## 2019-04-30  5.490107e-02  0.0786806224  0.0384589024  0.0420895263
## 2019-05-31 -1.326322e-01 -0.0818753491 -0.0764149871 -0.1270017765
## 2019-06-28  1.226770e-01  0.0646557767  0.0676869856  0.0845992778
## 2019-07-31  7.361675e-02 -0.0142806686 -0.1286120899  0.0244748156
## 2019-08-30 -1.659810e-02 -0.0496880810 -0.0948922673 -0.0153647948
## 2019-09-30  7.042266e-02 -0.0229951159 -0.0931610198  0.1056920829
## 2019-10-31  1.049766e-01  0.0232034080  0.0713417349 -0.0476461882
## 2019-11-29  7.469360e-02  0.0134958216  0.0905829220  0.0456631146
## 2019-12-31  9.420411e-02  0.0257863501  0.0279227940  0.0803307231
## 2020-01-31  5.260166e-02  0.0834803026  0.0643897455 -0.0507166081
## 2020-02-28 -1.218302e-01 -0.0642332026  0.0670726963 -0.0718008504
## 2020-03-31 -7.231449e-02  0.0344213022  0.0173805330 -0.0771940366
## 2020-04-30  1.444241e-01  0.2381504762  0.1116390480  0.0522721265
## 2020-05-29  8.166685e-02 -0.0128673719 -0.0002858456  0.1253847508
## 2020-06-30  1.374865e-01  0.1218341331  0.0807736724 -0.0053908076
## 2020-07-31  1.528340e-01  0.1372488933  0.0717317246 -0.0044976395
## 2020-08-31  1.960348e-01  0.0866005735  0.0799293979  0.1387491252
## 2020-09-30 -1.081715e-01 -0.0916533253 -0.0573783743  0.1151080734
## 2020-10-30 -6.188846e-02 -0.0364089187 -0.0497966282 -0.0444661498
## 2020-11-30  9.120486e-02  0.0425228214  0.0309615020  0.1148918280
## 2020-12-31  1.084721e-01  0.0276719582  0.0970870744  0.0510475586
## 2021-01-29 -5.516871e-03 -0.0156985929 -0.0155437114 -0.0573125906
## 2021-02-26 -8.306856e-02 -0.0359675607  0.0120608627  0.0108998341
## 2021-03-31  7.312590e-03  0.0003717151 -0.0324212105 -0.0141219698
## 2021-04-30  7.345311e-02  0.1139202399 -0.0158244352 -0.0020340357
## 2021-05-28 -5.181689e-02 -0.0730764715 -0.0209791877  0.0305595115
## 2021-06-30  9.450016e-02  0.0651836137  0.0492816132  0.1240977388
## 2021-07-30  6.295830e-02 -0.0332696301 -0.0203491777  0.0809137210
## 2021-08-31  4.161137e-02  0.0421339363  0.0950695060 -0.0150256617
## 2021-09-30 -7.046182e-02 -0.0550034409  0.0698019211 -0.1260500146
## 2021-10-29  5.700144e-02  0.0262547651  0.1231245456  0.1414103002
## 2021-11-30  9.991923e-02  0.0391473463 -0.0727082022  0.0115891752
## 2021-12-31  7.160291e-02 -0.0505062029 -0.0634444870 -0.0135064037
## 2022-01-31 -1.583698e-02 -0.1085098142 -0.3438762168 -0.1183307620
## 2022-02-28 -5.558215e-02  0.0263230079 -0.0794420544 -0.0809944589
## 2022-03-31  5.588237e-02  0.0596239190 -0.0518377235 -0.0124012394
## 2022-04-29 -1.021774e-01 -0.2711856801 -0.6769150653 -0.0760993929
## 2022-05-31 -5.603731e-02 -0.0333130879  0.0365177336 -0.0480486280
## 2022-06-30 -8.493695e-02 -0.1238178226 -0.1213919403 -0.1484559368
## 2022-07-29  1.728046e-01  0.2394860591  0.2516130190  0.1173044998
## 2022-08-31 -3.170523e-02 -0.0625299224 -0.0059760083 -0.0765608298
## 2022-09-30 -1.289443e-01 -0.1149865758  0.0517762908 -0.2445218308
## 2022-10-31  1.039556e-01 -0.0981105335  0.2148866613  0.1088674159
## 2022-11-30 -3.358501e-02 -0.0593198454  0.0457051938  0.1685055140
## 2022-12-30 -1.304193e-01 -0.1391406409 -0.0354794590  0.0676659468
## 2023-01-31  1.048293e-01  0.2051735029  0.1823328028  0.0845228013
## 2023-02-28  2.291831e-02 -0.0902516639 -0.0939461074 -0.0694250094
## 2023-03-31  1.121215e-01  0.0918019370  0.0699795803  0.0347432651
## 2023-04-28  2.857513e-02  0.0206963031 -0.0460542977  0.0327267598
## 2023-05-31  4.502909e-02  0.1340765703  0.1805874132 -0.1855465601
## 2023-06-30  9.014221e-02  0.0779864104  0.1084198198  0.0506912020
## 2023-07-31  1.270457e-02  0.0251489708 -0.0034566451  0.0001812632
## 2023-08-31 -4.330827e-02  0.0318772770 -0.0121241583 -0.0818940261
## 2023-09-29 -9.285932e-02 -0.0821945627 -0.1384714676 -0.0583949732
## 2023-10-31 -2.573296e-03  0.0458940197  0.0864351944  0.0721112797
## 2023-11-30  1.077599e-01  0.0931972815  0.1408733862  0.0704385179
## 2023-12-29  1.349106e-02  0.0392628771  0.0268736650 -0.0121758168
## 2024-01-31 -4.314466e-02  0.0212288659  0.1472315458 -0.0670407884
## 2024-02-29 -1.871727e-02  0.1300782611  0.0665352476  0.0233632226
## 2024-03-28 -5.264827e-02  0.0202729146  0.0072878392 -0.0970690721
## 2024-04-30 -6.728849e-03 -0.0302797899 -0.0979910641 -0.0184713375
## 2024-05-31  1.224144e-01  0.0081949152  0.1529149558  0.0297923740
## 2024-06-28  9.125889e-02  0.0910037984  0.0505386840 -0.2280934244
## 2024-07-31  5.298220e-02 -0.0329830511 -0.0714376073 -0.0067897252
## 2024-08-30  3.184114e-02 -0.0464130352  0.1099097171  0.1070689144
## 2024-09-30  1.731646e-02  0.0429307038  0.0112292853  0.0636340495
## 2024-10-31 -3.090179e-02  0.0003755644  0.0638447971 -0.1363797307
## 2024-11-29  5.041449e-02  0.1091142212  0.1595496547  0.0210398547
## 2024-12-05  2.377443e-02  0.0591153497  0.0344250116  0.0026760987
##                      WMT
## 2013-01-31  0.0248965362
## 2013-02-28  0.0117957081
## 2013-03-28  0.0620733326
## 2013-04-30  0.0378934789
## 2013-05-31 -0.0317798670
## 2013-06-28 -0.0046877665
## 2013-07-31  0.0452745761
## 2013-08-30 -0.0596998326
## 2013-09-30  0.0133389529
## 2013-10-31  0.0370286969
## 2013-11-29  0.0540193773
## 2013-12-31 -0.0232521048
## 2014-01-31 -0.0523039173
## 2014-02-28  0.0002680848
## 2014-03-31  0.0293256940
## 2014-04-30  0.0420200534
## 2014-05-30 -0.0314090828
## 2014-06-30 -0.0223929641
## 2014-07-31 -0.0200476009
## 2014-08-29  0.0323256347
## 2014-09-30  0.0127657636
## 2014-10-31 -0.0026190188
## 2014-11-28  0.1378165646
## 2014-12-31 -0.0135740780
## 2015-01-30 -0.0105346891
## 2015-02-27 -0.0124330644
## 2015-03-31 -0.0142313433
## 2015-04-30 -0.0524138130
## 2015-05-29 -0.0433506123
## 2015-06-30 -0.0460141204
## 2015-07-31  0.0146949011
## 2015-08-31 -0.0993583425
## 2015-09-30  0.0016978214
## 2015-10-30 -0.1246701364
## 2015-11-30  0.0275691977
## 2015-12-31  0.0492991432
## 2016-01-29  0.0793149165
## 2016-02-29 -0.0003015780
## 2016-03-31  0.0392710061
## 2016-04-29 -0.0239379375
## 2016-05-31  0.0641209472
## 2016-06-30  0.0311567442
## 2016-07-29 -0.0006846277
## 2016-08-31 -0.0143682797
## 2016-09-30  0.0094735847
## 2016-10-31 -0.0295506861
## 2016-11-30  0.0058385861
## 2016-12-30 -0.0116434419
## 2017-01-31 -0.0350394155
## 2017-02-28  0.0608886506
## 2017-03-31  0.0234092095
## 2017-04-28  0.0421087011
## 2017-05-31  0.0511558377
## 2017-06-30 -0.0378572498
## 2017-07-31  0.0553874322
## 2017-08-31 -0.0180255760
## 2017-09-29  0.0008963611
## 2017-10-31  0.1109629341
## 2017-11-30  0.1076142347
## 2017-12-29  0.0207685628
## 2018-01-31  0.0764920267
## 2018-02-28 -0.1691629165
## 2018-03-29 -0.0056770447
## 2018-04-30 -0.0057487504
## 2018-05-31 -0.0629873533
## 2018-06-29  0.0369861543
## 2018-07-31  0.0409480874
## 2018-08-31  0.0774627843
## 2018-09-28 -0.0205520227
## 2018-10-31  0.0656296010
## 2018-11-30 -0.0265766710
## 2018-12-31 -0.0417364164
## 2019-01-31  0.0283646832
## 2019-02-28  0.0324432780
## 2019-03-29 -0.0094926767
## 2019-04-30  0.0530142151
## 2019-05-31 -0.0084087303
## 2019-06-28  0.0854578463
## 2019-07-31 -0.0009964163
## 2019-08-30  0.0394578026
## 2019-09-30  0.0379544924
## 2019-10-31 -0.0120371398
## 2019-11-29  0.0154858409
## 2019-12-31  0.0023740895
## 2020-01-31 -0.0372905733
## 2020-02-28 -0.0613237040
## 2020-03-31  0.0581107916
## 2020-04-30  0.0674662098
## 2020-05-29  0.0248285938
## 2020-06-30 -0.0351084276
## 2020-07-31  0.0772517157
## 2020-08-31  0.0745883358
## 2020-09-30  0.0076052159
## 2020-10-30 -0.0083255549
## 2020-11-30  0.0963905535
## 2020-12-31 -0.0545611848
## 2021-01-29 -0.0257179747
## 2021-02-26 -0.0782174415
## 2021-03-31  0.0486515484
## 2021-04-30  0.0295953623
## 2021-05-28  0.0189582774
## 2021-06-30 -0.0071366464
## 2021-07-30  0.0107912235
## 2021-08-31  0.0418679445
## 2021-09-30 -0.0606836979
## 2021-10-29  0.0695571015
## 2021-11-30 -0.0606287355
## 2021-12-31  0.0324794594
## 2022-01-31 -0.0343092571
## 2022-02-28 -0.0338251276
## 2022-03-31  0.1008102631
## 2022-04-29  0.0269633133
## 2022-05-31 -0.1698040171
## 2022-06-30 -0.0563676819
## 2022-07-29  0.0826081356
## 2022-08-31  0.0081250979
## 2022-09-30 -0.0217358676
## 2022-10-31  0.0929241914
## 2022-11-30  0.0684917213
## 2022-12-30 -0.0685301126
## 2023-01-31  0.0145630125
## 2023-02-28 -0.0121679518
## 2023-03-31  0.0408372088
## 2023-04-28  0.0235920083
## 2023-05-31 -0.0237417843
## 2023-06-30  0.0678438644
## 2023-07-31  0.0169067654
## 2023-08-31  0.0206049564
## 2023-09-29 -0.0166185629
## 2023-10-31  0.0215261781
## 2023-11-30 -0.0483955454
## 2023-12-29  0.0162177594
## 2024-01-31  0.0470820679
## 2024-02-29  0.0620581657
## 2024-03-28  0.0296685050
## 2024-04-30 -0.0137217222
## 2024-05-31  0.1060150534
## 2024-06-28  0.0292221364
## 2024-07-31  0.0136415209
## 2024-08-30  0.1207589765
## 2024-09-30  0.0445699361
## 2024-10-31  0.0147513058
## 2024-11-29  0.1210993766
## 2024-12-05  0.0298211982
calculate_component_contribution <- function(.data, w) {
    
    # Covariance of asset returns
    covariance_matrix <- cov(.data)
    
    covariance_matrix
    
    # 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 of a single number
    component_contribution <- (t(w) %*% covariance_matrix * w) / sd_portfolio[1,1]
    component_contribution
    

    # 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(.25, .25, .2, .2, .1))
## # A tibble: 1 × 5
##    AAPL  AMZN  NFLX   NKE   WMT
##   <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.224 0.284 0.329 0.135 0.028

6 Plot: Colum Chart of Component Contribution and Weight

plot_data <- asset_returns_wide_tbl %>% 
    
    calculate_component_contribution(w = c(.25, .25, .2, .2, .1)) %>% 
    
    # Transform to long form 
    pivot_longer(cols = everything(), names_to = "Asset", values_to = "Contribution") %>% 
    
    # Add weights 
    add_column(weight = c(.25, .25, .2, .2, .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 Volitility and Weight", y = "Percent", 
         x = NULL)

Which of the assets in your portfolio the largest contributor to the portfolio volatility? Do you think your portfolio risk is concentrated in any one asset?

Out of all of the assets in the portfolio, the largest contributer to the portfolio volatility would be Netflix as it has a little over 30% of the contribution to the portfolio. This is also interesting as the stock “NFLX” is only weighted at .20. I wouldn’t say that the portfolios risk is concentrated in one asset, however the asset with the most risk involved would be Netflix, however AMZN and AAPL both arent too far behind, with the least risk being with WMT at under 5 percent contribution to volitility and NKE being just under 15 percent.