# Load packages
# Core
library(tidyverse)
library(tidyquant)
library(readr)
# Time series
library(lubridate)
library(tibbletime)
# modeling
library(broom)
Examine how each asset contributes to portfolio standard deviation. This is to ensure that our risk is not concentrated in any one asset.
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")
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"))
# 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
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.