# Load packages
# Core
library(tidyverse)
library(tidyquant)
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("IVV", "VOO", "VTSAX", "VSMPX", "FBGRX")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2015-05-29 ")
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
## FBGRX IVV VOO VSMPX
## 2015-06-30 -0.0105734935 -2.001552e-02 -0.0196614817 -0.0171327818
## 2015-07-31 0.0367274588 2.167232e-02 0.0215312994 0.0162392010
## 2015-08-31 -0.0652927583 -6.340582e-02 -0.0633270278 -0.0618775355
## 2015-09-30 -0.0383785089 -2.529855e-02 -0.0249645272 -0.0297352557
## 2015-10-30 0.0681127705 8.138666e-02 0.0811321069 0.0755882326
## 2015-11-30 0.0098138681 3.914663e-03 0.0042413140 0.0056396831
## 2015-12-31 -0.0068256369 -1.748023e-02 -0.0175347842 -0.0206493054
## 2016-01-29 -0.0865764952 -5.132652e-02 -0.0503562709 -0.0582460651
## 2016-02-29 -0.0214135189 -5.656183e-04 -0.0020840256 -0.0002224765
## 2016-03-31 0.0606340034 6.054287e-02 0.0664749255 0.0679138556
## 2016-04-29 -0.0033499203 3.912198e-03 0.0034939794 0.0064571187
## 2016-05-31 0.0254512263 1.677724e-02 0.0173937481 0.0176980254
## 2016-06-30 -0.0312641277 2.532337e-03 0.0032173943 0.0022976872
## 2016-07-29 0.0635983742 3.670554e-02 0.0361745950 0.0388907457
## 2016-08-31 0.0077442606 1.281422e-03 0.0012034880 0.0026507917
## 2016-09-30 0.0169547641 6.676048e-05 0.0002899423 0.0017575980
## 2016-10-31 -0.0283092941 -1.794824e-02 -0.0180796911 -0.0222809012
## 2016-11-30 0.0059884279 3.603151e-02 0.0365798548 0.0434019624
## 2016-12-30 0.0063920341 2.120727e-02 0.0205084696 0.0191930964
## 2017-01-31 0.0472619716 1.736031e-02 0.0176696221 0.0190230476
## 2017-02-28 0.0380654111 3.898047e-02 0.0380288777 0.0365443651
## 2017-03-31 0.0263669871 1.174852e-03 0.0013179759 0.0007794482
## 2017-04-28 0.0323957438 9.605094e-03 0.0103460247 0.0105963120
## 2017-05-31 0.0393196789 1.384582e-02 0.0139461104 0.0101316595
## 2017-06-30 -0.0059497134 6.648595e-03 0.0062768818 0.0091933381
## 2017-07-31 0.0337357891 2.053444e-02 0.0204154185 0.0184883945
## 2017-08-31 0.0183404526 2.733030e-03 0.0029076732 0.0017266103
## 2017-09-29 0.0096237346 2.020828e-02 0.0202166599 0.0242334655
## 2017-10-31 0.0420522191 2.298155e-02 0.0230043199 0.0214987447
## 2017-11-30 0.0184740297 3.074250e-02 0.0301182711 0.0299213331
## 2017-12-29 0.0084808808 1.201715e-02 0.0127451977 0.0100463688
## 2018-01-31 0.0822140705 5.534857e-02 0.0543484026 0.0519284286
## 2018-02-28 -0.0228236512 -3.878544e-02 -0.0379720908 -0.0378832692
## 2018-03-29 -0.0296412690 -2.508868e-02 -0.0249858495 -0.0199853088
## 2018-04-30 0.0146034155 3.535704e-03 0.0034638856 0.0037863970
## 2018-05-31 0.0489251045 2.382141e-02 0.0238769896 0.0277555399
## 2018-06-29 0.0246065372 5.857019e-03 0.0075563180 0.0067416249
## 2018-07-31 0.0101770558 3.678071e-02 0.0350093606 0.0329207826
## 2018-08-31 0.0568017159 3.182403e-02 0.0316906187 0.0339898610
## 2018-09-28 0.0001993242 5.341772e-03 0.0057450385 0.0016616341
## 2018-10-31 -0.1092558132 -7.065857e-02 -0.0708268065 -0.0768027855
## 2018-11-30 -0.0043953265 1.902890e-02 0.0186757277 0.0204965906
## 2018-12-31 -0.0612858324 -9.294150e-02 -0.0926328398 -0.0975429244
## 2019-01-31 0.0927095447 7.626572e-02 0.0762163101 0.0824505041
## 2019-02-28 0.0336085638 3.178554e-02 0.0319819509 0.0345023033
## 2019-03-29 0.0257897001 1.897735e-02 0.0190732337 0.0142698601
## 2019-04-30 0.0481083610 3.921248e-02 0.0395482566 0.0390463426
## 2019-05-31 -0.0849759194 -6.505640e-02 -0.0655835102 -0.0665208169
## 2019-06-28 0.0691626779 6.715088e-02 0.0675759700 0.0675535894
## 2019-07-31 0.0199946214 1.508511e-02 0.0144958953 0.0143501910
## 2019-08-30 -0.0224727529 -1.671499e-02 -0.0165414940 -0.0203537604
## 2019-09-30 -0.0228673211 1.927215e-02 0.0195306687 0.0169240409
## 2019-10-31 0.0397225122 2.137649e-02 0.0215920298 0.0208888106
## 2019-11-29 0.0549080433 3.571878e-02 0.0356176603 0.0370953499
## 2019-12-31 0.0347017494 2.887363e-02 0.0293029492 0.0282387648
## 2020-01-31 0.0311624221 0.000000e+00 -0.0003717477 -0.0006690068
## 2020-02-28 -0.0596914943 -8.833951e-02 -0.0844660306 -0.0852119783
## 2020-03-31 -0.1189298200 -1.293007e-01 -0.1328617009 -0.1480393647
## 2020-04-30 0.1573420475 1.193644e-01 0.1203228213 0.1245481536
## 2020-05-29 0.0875934069 4.702860e-02 0.0462730048 0.0523919020
## 2020-06-30 0.0758626607 1.880796e-02 0.0182535863 0.0225688061
## 2020-07-31 0.0750107332 5.689306e-02 0.0571505459 0.0549499561
## 2020-08-31 0.1227750897 6.766623e-02 0.0673875985 0.0693986324
## 2020-09-30 -0.0414414297 -3.830787e-02 -0.0382867194 -0.0362493731
## 2020-10-30 -0.0308087710 -2.543547e-02 -0.0257805244 -0.0217030848
## 2020-11-30 0.1278189773 1.034297e-01 0.1038789219 0.1151007008
## 2020-12-31 0.0569552557 3.707060e-02 0.0367600524 0.0436240166
## 2021-01-29 0.0116439979 -1.036304e-02 -0.0102654879 -0.0032694145
## 2021-02-26 0.0235403450 2.721583e-02 0.0272863166 0.0314577933
## 2021-03-31 -0.0046284266 4.454671e-02 0.0447366967 0.0341376812
## 2021-04-30 0.0551873634 5.158485e-02 0.0515444452 0.0501811481
## 2021-05-28 -0.0146840565 6.591234e-03 0.0066519118 0.0042797497
## 2021-06-30 0.0644172114 2.232200e-02 0.0223441345 0.0251950273
## 2021-07-30 0.0055536984 2.408428e-02 0.0241767408 0.0169568987
## 2021-08-31 0.0422822232 2.977492e-02 0.0290901768 0.0282957525
## 2021-09-30 -0.0465437771 -4.796938e-02 -0.0477590440 -0.0458291763
## 2021-10-29 0.0743088849 6.768581e-02 0.0680187581 0.0650718184
## 2021-11-30 0.0040977539 -7.315445e-03 -0.0073704430 -0.0149013505
## 2021-12-31 -0.0111007443 4.460833e-02 0.0445932280 0.0374823512
## 2022-01-31 -0.1210833980 -5.432226e-02 -0.0538319599 -0.0621678850
## 2022-02-28 -0.0388567060 -2.931186e-02 -0.0302582665 -0.0257635494
## 2022-03-31 0.0244307904 3.686862e-02 0.0371919036 0.0318833004
## 2022-04-29 -0.1526449345 -9.261162e-02 -0.0919438203 -0.0944538726
## 2022-05-31 -0.0492878302 3.162537e-03 0.0025843913 -0.0025949125
## 2022-06-30 -0.1168484714 -8.692146e-02 -0.0862606410 -0.0873814358
## 2022-07-29 0.1313953244 8.861023e-02 0.0880031996 0.0898443753
## 2022-08-31 -0.0410727011 -4.215241e-02 -0.0421660956 -0.0380486015
## 2022-09-30 -0.1066063359 -9.689782e-02 -0.0964984592 -0.0974010181
## 2022-10-31 0.0356320026 7.811711e-02 0.0780491473 0.0785949281
## 2022-11-30 0.0500496721 5.403323e-02 0.0535880611 0.0510053391
## 2022-12-30 -0.1004222063 -5.899454e-02 -0.0590331438 -0.0604501207
## 2023-01-31 0.1202500780 6.083734e-02 0.0610029829 0.0667265392
## 2023-02-28 -0.0092677172 -2.565010e-02 -0.0253013526 -0.0235776566
## 2023-03-31 0.0676124412 3.658690e-02 0.0364282496 0.0259682381
## 2023-04-28 0.0007435966 1.587992e-02 0.0157762004 0.0104075391
## 2023-05-31 0.0763827315 4.228937e-03 0.0048045776 0.0041858134
## 2023-06-30 0.0742260576 6.389096e-02 0.0630675522 0.0662287628
## 2023-07-31 0.0511558484 3.194919e-02 0.0323715561 0.0350930761
## 2023-08-31 -0.0174014896 -1.641015e-02 -0.0164171954 -0.0194687268
## 2023-09-29 -0.0620498140 -4.818211e-02 -0.0486016068 -0.0490877180
## 2023-10-31 -0.0241913501 -2.234692e-02 -0.0219608216 -0.0265901449
## 2023-11-30 0.1096179166 8.767396e-02 0.0877399474 0.0895712234
## 2023-12-29 0.0550941489 4.507831e-02 0.0447688607 0.0517651324
## 2024-01-31 0.0288969081 1.572484e-02 0.0159436886 0.0111081637
## 2024-02-29 0.0880200559 5.073146e-02 0.0507602704 0.0526367478
## 2024-03-28 0.0333759719 3.267347e-02 0.0322747936 0.0316487338
## 2024-04-30 -0.0401249339 -4.133879e-02 -0.0409131207 -0.0451294599
## 2024-05-31 0.0728074065 4.935268e-02 0.0490347478 0.0461815428
## 2024-06-28 0.0558010650 3.506465e-02 0.0350500371 0.0308802812
## 2024-07-31 -0.0318659271 1.106735e-02 0.0115302489 0.0182092969
## 2024-08-30 0.0156441727 2.398172e-02 0.0236540817 0.0214300972
## 2024-09-30 0.0248518568 2.149810e-02 0.0215294273 0.0202775106
## 2024-10-31 0.0058406632 -9.720853e-03 -0.0095207988 -0.0075293471
## 2024-11-29 0.0683897986 5.753475e-02 0.0572211788 0.0642365499
## 2024-12-03 0.0195285836 3.118761e-03 0.0030489247 0.0022989952
## VTSAX
## 2015-06-30 -0.0171830202
## 2015-07-31 0.0163718759
## 2015-08-31 -0.0619236980
## 2015-09-30 -0.0299004519
## 2015-10-30 0.0756967608
## 2015-11-30 0.0055772368
## 2015-12-31 -0.0206641188
## 2016-01-29 -0.0581663550
## 2016-02-29 -0.0004174922
## 2016-03-31 0.0679657388
## 2016-04-29 0.0064460660
## 2016-05-31 0.0175628727
## 2016-06-30 0.0024521508
## 2016-07-29 0.0387266418
## 2016-08-31 0.0027622005
## 2016-09-30 0.0016070427
## 2016-10-31 -0.0223892084
## 2016-11-30 0.0435654333
## 2016-12-30 0.0191683703
## 2017-01-31 0.0190750342
## 2017-02-28 0.0364176003
## 2017-03-31 0.0007840506
## 2017-04-28 0.0104431579
## 2017-05-31 0.0101692878
## 2017-06-30 0.0091973953
## 2017-07-31 0.0184841710
## 2017-08-31 0.0016194314
## 2017-09-29 0.0243125770
## 2017-10-31 0.0214959244
## 2017-11-30 0.0299718470
## 2017-12-29 0.0100059172
## 2018-01-31 0.0518402769
## 2018-02-28 -0.0378494043
## 2018-03-29 -0.0200262581
## 2018-04-30 0.0037777575
## 2018-05-31 0.0278145022
## 2018-06-29 0.0066986261
## 2018-07-31 0.0329594809
## 2018-08-31 0.0339629764
## 2018-09-28 0.0016275030
## 2018-10-31 -0.0768784733
## 2018-11-30 0.0205438320
## 2018-12-31 -0.0976951746
## 2019-01-31 0.0825051767
## 2019-02-28 0.0345440104
## 2019-03-29 0.0142416035
## 2019-04-30 0.0389858102
## 2019-05-31 -0.0664794953
## 2019-06-28 0.0675679149
## 2019-07-31 0.0142731231
## 2019-08-30 -0.0203154994
## 2019-09-30 0.0168666196
## 2019-10-31 0.0208690266
## 2019-11-29 0.0371430093
## 2019-12-31 0.0282302950
## 2020-01-31 -0.0007533661
## 2020-02-28 -0.0851519290
## 2020-03-31 -0.1480879616
## 2020-04-30 0.1245064929
## 2020-05-29 0.0523551906
## 2020-06-30 0.0225247310
## 2020-07-31 0.0549776320
## 2020-08-31 0.0692824962
## 2020-09-30 -0.0362138501
## 2020-10-30 -0.0216946640
## 2020-11-30 0.1150959105
## 2020-12-31 0.0436494466
## 2021-01-29 -0.0032775928
## 2021-02-26 0.0313778847
## 2021-03-31 0.0341868752
## 2021-04-30 0.0500687761
## 2021-05-28 0.0043440428
## 2021-06-30 0.0251244219
## 2021-07-30 0.0169991824
## 2021-08-31 0.0282337753
## 2021-09-30 -0.0458505869
## 2021-10-29 0.0650992718
## 2021-11-30 -0.0149354677
## 2021-12-31 0.0374862383
## 2022-01-31 -0.0622048398
## 2022-02-28 -0.0258587437
## 2022-03-31 0.0319703617
## 2022-04-29 -0.0944894483
## 2022-05-31 -0.0026818012
## 2022-06-30 -0.0873091563
## 2022-07-29 0.0897771499
## 2022-08-31 -0.0380697909
## 2022-09-30 -0.0973649700
## 2022-10-31 0.0784996442
## 2022-11-30 0.0509863771
## 2022-12-30 -0.0604171594
## 2023-01-31 0.0666844699
## 2023-02-28 -0.0235879132
## 2023-03-31 0.0259962470
## 2023-04-28 0.0104114830
## 2023-05-31 0.0041741741
## 2023-06-30 0.0661729928
## 2023-07-31 0.0350656803
## 2023-08-31 -0.0195327263
## 2023-09-29 -0.0490429920
## 2023-10-31 -0.0266552033
## 2023-11-30 0.0896149629
## 2023-12-29 0.0517166055
## 2024-01-31 0.0111079295
## 2024-02-29 0.0526239375
## 2024-03-28 0.0315980643
## 2024-04-30 -0.0451592900
## 2024-05-31 0.0461855764
## 2024-06-28 0.0309118126
## 2024-07-31 0.0181075859
## 2024-08-30 0.0214821231
## 2024-09-30 0.0202524189
## 2024-10-31 -0.0075724350
## 2024-11-29 0.0641866620
## 2024-12-03 0.0023277865
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)
covariance_matrix
## FBGRX IVV VOO VSMPX VTSAX
## FBGRX 0.003322584 0.002334819 0.002335018 0.002426448 0.002426295
## IVV 0.002334819 0.001996853 0.001996611 0.002053635 0.002053746
## VOO 0.002335018 0.001996611 0.001997154 0.002054538 0.002054661
## VSMPX 0.002426448 0.002053635 0.002054538 0.002129750 0.002129855
## VTSAX 0.002426295 0.002053746 0.002054661 0.002129855 0.002129964
# 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.04740897
# 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
## FBGRX IVV VOO VSMPX VTSAX
## [1,] 0.01375939 0.01106511 0.008853649 0.009153813 0.004577003
rowSums(component_contribution)
## [1] 0.04740897
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
round(3) %>%
as_tibble()
component_percentages
## # A tibble: 1 × 5
## FBGRX IVV VOO VSMPX VTSAX
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.29 0.233 0.187 0.193 0.097
component_percentages %>%
as_tibble() %>%
gather(key = "asset", value = "contribution")
## # A tibble: 5 × 2
## asset contribution
## <chr> <dbl>
## 1 FBGRX 0.29
## 2 IVV 0.233
## 3 VOO 0.187
## 4 VSMPX 0.193
## 5 VTSAX 0.097
asset_returns_wide_tbl <- asset_returns_tbl %>%
pivot_wider(names_from = asset, values_from = returns) %>%
column_to_rownames(var = "date")
asset_returns_wide_tbl
## FBGRX IVV VOO VSMPX
## 2015-06-30 -0.0105734935 -2.001552e-02 -0.0196614817 -0.0171327818
## 2015-07-31 0.0367274588 2.167232e-02 0.0215312994 0.0162392010
## 2015-08-31 -0.0652927583 -6.340582e-02 -0.0633270278 -0.0618775355
## 2015-09-30 -0.0383785089 -2.529855e-02 -0.0249645272 -0.0297352557
## 2015-10-30 0.0681127705 8.138666e-02 0.0811321069 0.0755882326
## 2015-11-30 0.0098138681 3.914663e-03 0.0042413140 0.0056396831
## 2015-12-31 -0.0068256369 -1.748023e-02 -0.0175347842 -0.0206493054
## 2016-01-29 -0.0865764952 -5.132652e-02 -0.0503562709 -0.0582460651
## 2016-02-29 -0.0214135189 -5.656183e-04 -0.0020840256 -0.0002224765
## 2016-03-31 0.0606340034 6.054287e-02 0.0664749255 0.0679138556
## 2016-04-29 -0.0033499203 3.912198e-03 0.0034939794 0.0064571187
## 2016-05-31 0.0254512263 1.677724e-02 0.0173937481 0.0176980254
## 2016-06-30 -0.0312641277 2.532337e-03 0.0032173943 0.0022976872
## 2016-07-29 0.0635983742 3.670554e-02 0.0361745950 0.0388907457
## 2016-08-31 0.0077442606 1.281422e-03 0.0012034880 0.0026507917
## 2016-09-30 0.0169547641 6.676048e-05 0.0002899423 0.0017575980
## 2016-10-31 -0.0283092941 -1.794824e-02 -0.0180796911 -0.0222809012
## 2016-11-30 0.0059884279 3.603151e-02 0.0365798548 0.0434019624
## 2016-12-30 0.0063920341 2.120727e-02 0.0205084696 0.0191930964
## 2017-01-31 0.0472619716 1.736031e-02 0.0176696221 0.0190230476
## 2017-02-28 0.0380654111 3.898047e-02 0.0380288777 0.0365443651
## 2017-03-31 0.0263669871 1.174852e-03 0.0013179759 0.0007794482
## 2017-04-28 0.0323957438 9.605094e-03 0.0103460247 0.0105963120
## 2017-05-31 0.0393196789 1.384582e-02 0.0139461104 0.0101316595
## 2017-06-30 -0.0059497134 6.648595e-03 0.0062768818 0.0091933381
## 2017-07-31 0.0337357891 2.053444e-02 0.0204154185 0.0184883945
## 2017-08-31 0.0183404526 2.733030e-03 0.0029076732 0.0017266103
## 2017-09-29 0.0096237346 2.020828e-02 0.0202166599 0.0242334655
## 2017-10-31 0.0420522191 2.298155e-02 0.0230043199 0.0214987447
## 2017-11-30 0.0184740297 3.074250e-02 0.0301182711 0.0299213331
## 2017-12-29 0.0084808808 1.201715e-02 0.0127451977 0.0100463688
## 2018-01-31 0.0822140705 5.534857e-02 0.0543484026 0.0519284286
## 2018-02-28 -0.0228236512 -3.878544e-02 -0.0379720908 -0.0378832692
## 2018-03-29 -0.0296412690 -2.508868e-02 -0.0249858495 -0.0199853088
## 2018-04-30 0.0146034155 3.535704e-03 0.0034638856 0.0037863970
## 2018-05-31 0.0489251045 2.382141e-02 0.0238769896 0.0277555399
## 2018-06-29 0.0246065372 5.857019e-03 0.0075563180 0.0067416249
## 2018-07-31 0.0101770558 3.678071e-02 0.0350093606 0.0329207826
## 2018-08-31 0.0568017159 3.182403e-02 0.0316906187 0.0339898610
## 2018-09-28 0.0001993242 5.341772e-03 0.0057450385 0.0016616341
## 2018-10-31 -0.1092558132 -7.065857e-02 -0.0708268065 -0.0768027855
## 2018-11-30 -0.0043953265 1.902890e-02 0.0186757277 0.0204965906
## 2018-12-31 -0.0612858324 -9.294150e-02 -0.0926328398 -0.0975429244
## 2019-01-31 0.0927095447 7.626572e-02 0.0762163101 0.0824505041
## 2019-02-28 0.0336085638 3.178554e-02 0.0319819509 0.0345023033
## 2019-03-29 0.0257897001 1.897735e-02 0.0190732337 0.0142698601
## 2019-04-30 0.0481083610 3.921248e-02 0.0395482566 0.0390463426
## 2019-05-31 -0.0849759194 -6.505640e-02 -0.0655835102 -0.0665208169
## 2019-06-28 0.0691626779 6.715088e-02 0.0675759700 0.0675535894
## 2019-07-31 0.0199946214 1.508511e-02 0.0144958953 0.0143501910
## 2019-08-30 -0.0224727529 -1.671499e-02 -0.0165414940 -0.0203537604
## 2019-09-30 -0.0228673211 1.927215e-02 0.0195306687 0.0169240409
## 2019-10-31 0.0397225122 2.137649e-02 0.0215920298 0.0208888106
## 2019-11-29 0.0549080433 3.571878e-02 0.0356176603 0.0370953499
## 2019-12-31 0.0347017494 2.887363e-02 0.0293029492 0.0282387648
## 2020-01-31 0.0311624221 0.000000e+00 -0.0003717477 -0.0006690068
## 2020-02-28 -0.0596914943 -8.833951e-02 -0.0844660306 -0.0852119783
## 2020-03-31 -0.1189298200 -1.293007e-01 -0.1328617009 -0.1480393647
## 2020-04-30 0.1573420475 1.193644e-01 0.1203228213 0.1245481536
## 2020-05-29 0.0875934069 4.702860e-02 0.0462730048 0.0523919020
## 2020-06-30 0.0758626607 1.880796e-02 0.0182535863 0.0225688061
## 2020-07-31 0.0750107332 5.689306e-02 0.0571505459 0.0549499561
## 2020-08-31 0.1227750897 6.766623e-02 0.0673875985 0.0693986324
## 2020-09-30 -0.0414414297 -3.830787e-02 -0.0382867194 -0.0362493731
## 2020-10-30 -0.0308087710 -2.543547e-02 -0.0257805244 -0.0217030848
## 2020-11-30 0.1278189773 1.034297e-01 0.1038789219 0.1151007008
## 2020-12-31 0.0569552557 3.707060e-02 0.0367600524 0.0436240166
## 2021-01-29 0.0116439979 -1.036304e-02 -0.0102654879 -0.0032694145
## 2021-02-26 0.0235403450 2.721583e-02 0.0272863166 0.0314577933
## 2021-03-31 -0.0046284266 4.454671e-02 0.0447366967 0.0341376812
## 2021-04-30 0.0551873634 5.158485e-02 0.0515444452 0.0501811481
## 2021-05-28 -0.0146840565 6.591234e-03 0.0066519118 0.0042797497
## 2021-06-30 0.0644172114 2.232200e-02 0.0223441345 0.0251950273
## 2021-07-30 0.0055536984 2.408428e-02 0.0241767408 0.0169568987
## 2021-08-31 0.0422822232 2.977492e-02 0.0290901768 0.0282957525
## 2021-09-30 -0.0465437771 -4.796938e-02 -0.0477590440 -0.0458291763
## 2021-10-29 0.0743088849 6.768581e-02 0.0680187581 0.0650718184
## 2021-11-30 0.0040977539 -7.315445e-03 -0.0073704430 -0.0149013505
## 2021-12-31 -0.0111007443 4.460833e-02 0.0445932280 0.0374823512
## 2022-01-31 -0.1210833980 -5.432226e-02 -0.0538319599 -0.0621678850
## 2022-02-28 -0.0388567060 -2.931186e-02 -0.0302582665 -0.0257635494
## 2022-03-31 0.0244307904 3.686862e-02 0.0371919036 0.0318833004
## 2022-04-29 -0.1526449345 -9.261162e-02 -0.0919438203 -0.0944538726
## 2022-05-31 -0.0492878302 3.162537e-03 0.0025843913 -0.0025949125
## 2022-06-30 -0.1168484714 -8.692146e-02 -0.0862606410 -0.0873814358
## 2022-07-29 0.1313953244 8.861023e-02 0.0880031996 0.0898443753
## 2022-08-31 -0.0410727011 -4.215241e-02 -0.0421660956 -0.0380486015
## 2022-09-30 -0.1066063359 -9.689782e-02 -0.0964984592 -0.0974010181
## 2022-10-31 0.0356320026 7.811711e-02 0.0780491473 0.0785949281
## 2022-11-30 0.0500496721 5.403323e-02 0.0535880611 0.0510053391
## 2022-12-30 -0.1004222063 -5.899454e-02 -0.0590331438 -0.0604501207
## 2023-01-31 0.1202500780 6.083734e-02 0.0610029829 0.0667265392
## 2023-02-28 -0.0092677172 -2.565010e-02 -0.0253013526 -0.0235776566
## 2023-03-31 0.0676124412 3.658690e-02 0.0364282496 0.0259682381
## 2023-04-28 0.0007435966 1.587992e-02 0.0157762004 0.0104075391
## 2023-05-31 0.0763827315 4.228937e-03 0.0048045776 0.0041858134
## 2023-06-30 0.0742260576 6.389096e-02 0.0630675522 0.0662287628
## 2023-07-31 0.0511558484 3.194919e-02 0.0323715561 0.0350930761
## 2023-08-31 -0.0174014896 -1.641015e-02 -0.0164171954 -0.0194687268
## 2023-09-29 -0.0620498140 -4.818211e-02 -0.0486016068 -0.0490877180
## 2023-10-31 -0.0241913501 -2.234692e-02 -0.0219608216 -0.0265901449
## 2023-11-30 0.1096179166 8.767396e-02 0.0877399474 0.0895712234
## 2023-12-29 0.0550941489 4.507831e-02 0.0447688607 0.0517651324
## 2024-01-31 0.0288969081 1.572484e-02 0.0159436886 0.0111081637
## 2024-02-29 0.0880200559 5.073146e-02 0.0507602704 0.0526367478
## 2024-03-28 0.0333759719 3.267347e-02 0.0322747936 0.0316487338
## 2024-04-30 -0.0401249339 -4.133879e-02 -0.0409131207 -0.0451294599
## 2024-05-31 0.0728074065 4.935268e-02 0.0490347478 0.0461815428
## 2024-06-28 0.0558010650 3.506465e-02 0.0350500371 0.0308802812
## 2024-07-31 -0.0318659271 1.106735e-02 0.0115302489 0.0182092969
## 2024-08-30 0.0156441727 2.398172e-02 0.0236540817 0.0214300972
## 2024-09-30 0.0248518568 2.149810e-02 0.0215294273 0.0202775106
## 2024-10-31 0.0058406632 -9.720853e-03 -0.0095207988 -0.0075293471
## 2024-11-29 0.0683897986 5.753475e-02 0.0572211788 0.0642365499
## 2024-12-03 0.0195285836 3.118761e-03 0.0030489247 0.0022989952
## VTSAX
## 2015-06-30 -0.0171830202
## 2015-07-31 0.0163718759
## 2015-08-31 -0.0619236980
## 2015-09-30 -0.0299004519
## 2015-10-30 0.0756967608
## 2015-11-30 0.0055772368
## 2015-12-31 -0.0206641188
## 2016-01-29 -0.0581663550
## 2016-02-29 -0.0004174922
## 2016-03-31 0.0679657388
## 2016-04-29 0.0064460660
## 2016-05-31 0.0175628727
## 2016-06-30 0.0024521508
## 2016-07-29 0.0387266418
## 2016-08-31 0.0027622005
## 2016-09-30 0.0016070427
## 2016-10-31 -0.0223892084
## 2016-11-30 0.0435654333
## 2016-12-30 0.0191683703
## 2017-01-31 0.0190750342
## 2017-02-28 0.0364176003
## 2017-03-31 0.0007840506
## 2017-04-28 0.0104431579
## 2017-05-31 0.0101692878
## 2017-06-30 0.0091973953
## 2017-07-31 0.0184841710
## 2017-08-31 0.0016194314
## 2017-09-29 0.0243125770
## 2017-10-31 0.0214959244
## 2017-11-30 0.0299718470
## 2017-12-29 0.0100059172
## 2018-01-31 0.0518402769
## 2018-02-28 -0.0378494043
## 2018-03-29 -0.0200262581
## 2018-04-30 0.0037777575
## 2018-05-31 0.0278145022
## 2018-06-29 0.0066986261
## 2018-07-31 0.0329594809
## 2018-08-31 0.0339629764
## 2018-09-28 0.0016275030
## 2018-10-31 -0.0768784733
## 2018-11-30 0.0205438320
## 2018-12-31 -0.0976951746
## 2019-01-31 0.0825051767
## 2019-02-28 0.0345440104
## 2019-03-29 0.0142416035
## 2019-04-30 0.0389858102
## 2019-05-31 -0.0664794953
## 2019-06-28 0.0675679149
## 2019-07-31 0.0142731231
## 2019-08-30 -0.0203154994
## 2019-09-30 0.0168666196
## 2019-10-31 0.0208690266
## 2019-11-29 0.0371430093
## 2019-12-31 0.0282302950
## 2020-01-31 -0.0007533661
## 2020-02-28 -0.0851519290
## 2020-03-31 -0.1480879616
## 2020-04-30 0.1245064929
## 2020-05-29 0.0523551906
## 2020-06-30 0.0225247310
## 2020-07-31 0.0549776320
## 2020-08-31 0.0692824962
## 2020-09-30 -0.0362138501
## 2020-10-30 -0.0216946640
## 2020-11-30 0.1150959105
## 2020-12-31 0.0436494466
## 2021-01-29 -0.0032775928
## 2021-02-26 0.0313778847
## 2021-03-31 0.0341868752
## 2021-04-30 0.0500687761
## 2021-05-28 0.0043440428
## 2021-06-30 0.0251244219
## 2021-07-30 0.0169991824
## 2021-08-31 0.0282337753
## 2021-09-30 -0.0458505869
## 2021-10-29 0.0650992718
## 2021-11-30 -0.0149354677
## 2021-12-31 0.0374862383
## 2022-01-31 -0.0622048398
## 2022-02-28 -0.0258587437
## 2022-03-31 0.0319703617
## 2022-04-29 -0.0944894483
## 2022-05-31 -0.0026818012
## 2022-06-30 -0.0873091563
## 2022-07-29 0.0897771499
## 2022-08-31 -0.0380697909
## 2022-09-30 -0.0973649700
## 2022-10-31 0.0784996442
## 2022-11-30 0.0509863771
## 2022-12-30 -0.0604171594
## 2023-01-31 0.0666844699
## 2023-02-28 -0.0235879132
## 2023-03-31 0.0259962470
## 2023-04-28 0.0104114830
## 2023-05-31 0.0041741741
## 2023-06-30 0.0661729928
## 2023-07-31 0.0350656803
## 2023-08-31 -0.0195327263
## 2023-09-29 -0.0490429920
## 2023-10-31 -0.0266552033
## 2023-11-30 0.0896149629
## 2023-12-29 0.0517166055
## 2024-01-31 0.0111079295
## 2024-02-29 0.0526239375
## 2024-03-28 0.0315980643
## 2024-04-30 -0.0451592900
## 2024-05-31 0.0461855764
## 2024-06-28 0.0309118126
## 2024-07-31 0.0181075859
## 2024-08-30 0.0214821231
## 2024-09-30 0.0202524189
## 2024-10-31 -0.0075724350
## 2024-11-29 0.0641866620
## 2024-12-03 0.0023277865
calculate_component_contribution <- function(.data, w) {
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 of 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(.25, .25, .2, .2, .1))
## # A tibble: 1 × 5
## FBGRX IVV VOO VSMPX VTSAX
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.29 0.233 0.187 0.193 0.097
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 Volatility",
y = "Percent",
x = NULL)
## $y
## [1] "Percent"
##
## $x
## NULL
##
## $title
## [1] "Percent Contribution to Portfolio Volatility"
##
## attr(,"class")
## [1] "labels"
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?