# 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("MSFT", "AAPL", "F", "JPM", "SBUX")
prices <- tq_get(x = symbols,
from = "2012-12-31")
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 F JPM MSFT SBUX
## 2013-01-31 -1.555891e-01 0.007336514 0.074549358 0.027328357 0.045383300
## 2013-02-28 -2.561098e-02 -0.026605494 0.038975507 0.020914888 -0.019139047
## 2013-03-28 2.850341e-03 0.041931662 -0.030299039 0.028720653 0.037571686
## 2013-04-30 2.710680e-04 0.041703790 0.038370509 0.145776915 0.066073915
## 2013-05-31 2.217147e-02 0.141581102 0.107826257 0.059941116 0.040473486
## 2013-06-28 -1.258956e-01 -0.013483439 -0.033529016 -0.010368593 0.036848587
## 2013-07-31 1.321021e-01 0.093099217 0.061462297 -0.081394998 0.084553347
## 2013-08-30 8.044303e-02 -0.041736039 -0.097951073 0.054854582 -0.008017011
## 2013-09-30 -2.172347e-02 0.041142996 0.022697024 -0.003599556 0.087519648
## 2013-10-31 9.201564e-02 0.019821242 0.004434394 0.062037677 0.051650721
## 2013-11-29 6.770768e-02 -0.001754662 0.104545287 0.081562869 0.008260797
## 2013-12-31 8.862541e-03 -0.101594827 0.021781106 -0.019063755 -0.038415507
## 2014-01-31 -1.139495e-01 -0.022950149 -0.048308450 0.011428724 -0.097327539
## 2014-02-28 5.591842e-02 0.028337755 0.026031351 0.019815433 0.001524169
## 2014-03-31 1.975620e-02 0.013553195 0.066219798 0.067616745 0.033535264
## 2014-04-30 9.476113e-02 0.042433407 -0.074831040 -0.014498126 -0.038338177
## 2014-05-30 7.576516e-02 0.017797667 -0.007350916 0.020307875 0.040101316
## 2014-06-30 2.728658e-02 0.047514820 0.036226204 0.018393370 0.054986505
## 2014-07-31 2.832582e-02 -0.005703505 0.007833586 0.034412965 0.003869503
## 2014-08-29 7.465212e-02 0.022655779 0.030398696 0.057484710 0.005031248
## 2014-09-30 -1.722062e-02 -0.163093372 0.013201021 0.020264493 -0.030666877
## 2014-10-31 6.948933e-02 -0.039619142 0.010691152 0.012646047 0.001324045
## 2014-11-28 1.007304e-01 0.110104229 -0.005305125 0.024439108 0.076233249
## 2014-12-31 -7.460608e-02 -0.014729689 0.039437723 -0.028858033 0.010290518
## 2015-01-30 5.961152e-02 -0.042159651 -0.134036572 -0.139546610 0.064653032
## 2015-02-27 9.601605e-02 0.105088112 0.119456927 0.089036002 0.069515921
## 2015-03-31 -3.187456e-02 -0.012315518 -0.011488679 -0.075530057 0.012860004
## 2015-04-30 5.769705e-03 -0.011906559 0.049912904 0.179201506 0.046020398
## 2015-05-29 4.434140e-02 -0.040690241 0.039063045 -0.030803902 0.050063178
## 2015-06-30 -3.793808e-02 -0.010603231 0.029655881 -0.059571111 0.031447604
## 2015-07-31 -3.348113e-02 -0.001898051 0.017814168 0.056150966 0.077313632
## 2015-08-31 -6.848855e-02 -0.066924203 -0.066827152 -0.063950848 -0.054435786
## 2015-09-30 -2.205778e-02 -0.021866921 -0.050062484 0.016860704 0.038194110
## 2015-10-30 8.011219e-02 0.097566361 0.059589389 0.173394797 0.096045615
## 2015-11-30 -5.821330e-03 -0.032947403 0.037123377 0.038685962 -0.015806247
## 2015-12-31 -1.167903e-01 -0.016890088 -0.009795867 0.020578133 -0.022402811
## 2016-01-29 -7.822333e-02 -0.132400522 -0.097447106 -0.007054311 0.012251849
## 2016-02-29 -1.288695e-03 0.046634183 -0.055281576 -0.072344072 -0.039776696
## 2016-03-31 1.197463e-01 0.076161443 0.050564613 0.082036511 0.025275049
## 2016-04-29 -1.507312e-01 0.015403495 0.072421661 -0.102086620 -0.059881614
## 2016-05-31 6.931441e-02 -0.005175392 0.032228048 0.067842181 -0.020626135
## 2016-06-30 -4.359643e-02 -0.070635815 -0.049142543 -0.035138510 0.039822882
## 2016-07-29 8.623524e-02 0.018039746 0.036778879 0.102268065 0.016150427
## 2016-08-31 2.337653e-02 -0.004750796 0.053713074 0.019880925 -0.028377876
## 2016-09-30 6.344836e-02 -0.042973761 -0.013573086 0.002433562 -0.037876854
## 2016-10-31 4.324784e-03 -0.015339743 0.046556464 0.039487791 -0.019961798
## 2016-11-30 -2.183772e-02 0.018565949 0.146281569 0.012390809 0.092935577
## 2016-12-30 4.684101e-02 0.014114096 0.073564590 0.030721533 -0.043182234
## 2017-01-31 4.664149e-02 0.034770998 -0.013907057 0.039598068 -0.005418265
## 2017-02-28 1.255549e-01 0.013660353 0.068385960 -0.004373380 0.033938683
## 2017-03-31 4.754214e-02 -0.073678118 -0.031157790 0.028960693 0.026376535
## 2017-04-28 -7.034577e-05 -0.001325445 -0.003879637 0.038718498 0.028199655
## 2017-05-31 6.560778e-02 -0.030989883 -0.057361433 0.025672863 0.061537547
## 2017-06-30 -5.891585e-02 0.006275507 0.106698835 -0.013115545 -0.086996990
## 2017-07-31 3.218035e-02 0.015437809 0.009852355 0.053249901 -0.077160367
## 2017-08-31 1.016530e-01 -0.017078833 -0.009962257 0.033389051 0.020675214
## 2017-09-29 -6.213485e-02 0.081784737 0.049580914 -0.003751640 -0.021185319
## 2017-10-31 9.240364e-02 0.037094311 0.057849137 0.110342275 0.020820713
## 2017-11-30 2.007528e-02 0.020170192 0.038126797 0.016841135 0.058198344
## 2017-12-29 -1.536322e-02 -0.002398999 0.022889191 0.016145139 -0.006767966
## 2018-01-31 -1.069325e-02 -0.105436020 0.083669329 0.104998235 -0.010854383
## 2018-02-28 6.596086e-02 -0.033367471 -0.001470744 -0.008450751 0.010500995
## 2018-03-29 -5.980379e-02 0.043344725 -0.049062941 -0.027022969 0.013740441
## 2018-04-30 -1.513369e-02 0.027664676 -0.005821886 0.024353271 -0.005543040
## 2018-05-31 1.267420e-01 0.027206737 -0.016405082 0.059652151 -0.010540809
## 2018-06-29 -9.463174e-03 -0.042446989 -0.026610146 -0.002329677 -0.148490595
## 2018-07-31 2.759915e-02 -0.083701368 0.103604540 0.073020845 0.069961275
## 2018-08-31 1.826731e-01 -0.057392608 -0.003223818 0.061088317 0.026968696
## 2018-09-28 -8.337457e-03 -0.024561029 -0.015302592 0.017997738 0.061493683
## 2018-10-31 -3.095188e-02 0.049722260 -0.027461172 -0.068387200 0.024846922
## 2018-11-30 -1.999124e-01 -0.014767855 0.019709057 0.041798132 0.140772392
## 2018-12-31 -1.240885e-01 -0.207067498 -0.130157868 -0.087790724 -0.035391216
## 2019-01-31 5.368688e-02 0.157317696 0.066577317 0.027768721 0.056450829
## 2019-02-28 4.380286e-02 -0.003414836 0.008274895 0.074511439 0.035843588
## 2019-03-29 9.260273e-02 0.001139338 -0.030451232 0.051409344 0.056446420
## 2019-04-30 5.490099e-02 0.190041352 0.144248645 0.101963476 0.043948390
## 2019-05-31 -1.326326e-01 -0.093207215 -0.090959576 -0.050747350 -0.016446502
## 2019-06-28 1.226772e-01 0.071929847 0.053649996 0.079843927 0.097268332
## 2019-07-31 7.361699e-02 -0.056064903 0.043933429 0.017097083 0.121817466
## 2019-08-30 -1.659817e-02 -0.038507508 -0.054383457 0.014924749 0.023339193
## 2019-09-30 7.042274e-02 -0.001091168 0.068847232 0.008451158 -0.088066333
## 2019-10-31 1.049764e-01 -0.047969047 0.067598371 0.030738882 -0.044636883
## 2019-11-29 7.469379e-02 0.053270313 0.053308410 0.057761429 0.015222407
## 2019-12-31 9.420400e-02 0.026145394 0.056365491 0.040901229 0.028730015
## 2020-01-31 5.260197e-02 -0.036128849 -0.045422682 0.076455636 -0.035778158
## 2020-02-28 -1.218306e-01 -0.236842544 -0.130987536 -0.046764588 -0.073793053
## 2020-03-31 -7.231413e-02 -0.365332829 -0.254395154 -0.026900021 -0.176498833
## 2020-04-30 1.444240e-01 0.052431184 0.072040206 0.127800752 0.154584958
## 2020-05-29 8.166646e-02 0.114941475 0.016056403 0.025073827 0.021923571
## 2020-06-30 1.374868e-01 0.062785607 -0.033968894 0.104864041 -0.058071447
## 2020-07-31 1.528342e-01 0.083578659 0.036757344 0.007343382 0.039173323
## 2020-08-31 1.960347e-01 0.031276093 0.036075652 0.097808741 0.104138892
## 2020-09-30 -1.081715e-01 -0.023740011 -0.039911812 -0.069775256 0.017020036
## 2020-10-30 -6.188825e-02 0.148989310 0.027455307 -0.038085890 0.012031770
## 2020-11-30 9.120479e-02 0.160965249 0.184291720 0.058325902 0.124427569
## 2020-12-31 1.084718e-01 -0.032459303 0.075070933 0.038264353 0.087470492
## 2021-01-29 -5.516636e-03 0.180613471 0.019688895 0.041997437 -0.099891725
## 2021-02-26 -8.306869e-02 0.105360516 0.134337603 0.004109537 0.113907204
## 2021-03-31 7.312974e-03 0.045937014 0.033803642 0.014482783 0.011412725
## 2021-04-30 7.345250e-02 -0.059706509 0.016197997 0.067286419 0.046665805
## 2021-05-28 -5.181641e-02 0.230396199 0.065610935 -0.007656630 -0.001371630
## 2021-06-30 9.450015e-02 0.022457457 -0.054425937 0.081569718 -0.018344187
## 2021-07-30 6.295808e-02 -0.063193450 -0.018724794 0.050423685 0.082537183
## 2021-08-31 4.161148e-02 -0.068225059 0.052429196 0.059768863 -0.029111089
## 2021-09-30 -7.046171e-02 0.083166562 0.023113173 -0.068406363 -0.063058706
## 2021-10-29 5.700133e-02 0.187487195 0.043184474 0.162366286 -0.039195223
## 2021-11-30 9.991933e-02 0.121503664 -0.067316565 -0.001282912 0.037405521
## 2021-12-31 7.160291e-02 0.079120280 -0.003026836 0.017184198 0.064715224
## 2022-01-31 -1.583698e-02 -0.017760396 -0.057573295 -0.078334623 -0.173689998
## 2022-02-28 -5.558224e-02 -0.144997363 -0.046840803 -0.037922000 -0.063666591
## 2022-03-31 5.588255e-02 -0.037718483 -0.039412222 0.031364785 -0.008973682
## 2022-04-29 -1.021777e-01 -0.170852707 -0.125475890 -0.105212707 -0.197853185
## 2022-05-31 -5.603732e-02 -0.034486135 0.102398669 -0.018242471 0.057440822
## 2022-06-30 -8.493685e-02 -0.206290836 -0.160612341 -0.056909745 -0.027246896
## 2022-07-29 1.728045e-01 0.277522897 0.032933925 0.089014570 0.104207815
## 2022-08-31 -3.170533e-02 0.046680618 -0.014230322 -0.068989025 -0.002728166
## 2022-09-30 -1.289442e-01 -0.308009852 -0.084640352 -0.115710363 0.002257277
## 2022-10-31 1.039558e-01 0.177099560 0.195049247 -0.003311716 0.027276945
## 2022-11-30 -3.358511e-02 0.049274125 0.093228097 0.097329075 0.171478179
## 2022-12-30 -1.304192e-01 -0.178300814 -0.029971320 -0.061923656 -0.029793630
## 2023-01-31 1.048292e-01 0.149842254 0.050130147 0.032773604 0.095493484
## 2023-02-28 2.291831e-02 -0.051572824 0.023932730 0.008977437 -0.061778412
## 2023-03-31 1.121213e-01 0.042973881 -0.095373141 0.144863483 0.019785355
## 2023-04-28 2.857514e-02 -0.046428209 0.066892599 0.063692730 0.093098928
## 2023-05-31 4.502928e-02 0.010050248 -0.018470996 0.068691231 -0.152484863
## 2023-06-30 9.014229e-02 0.231772774 0.069243291 0.036330649 0.014438417
## 2023-07-31 1.270449e-02 -0.124878811 0.089422374 -0.013659480 0.025022636
## 2023-08-31 -4.330827e-02 -0.085292325 -0.076477375 -0.022476498 -0.036193091
## 2023-09-29 -9.285932e-02 0.023626288 -0.008992713 -0.037330801 -0.065414707
## 2023-10-31 -2.573296e-03 -0.226568559 -0.034614473 0.068420445 0.010571663
## 2023-11-30 1.077599e-01 0.050985446 0.115463163 0.115954961 0.079231836
## 2023-12-29 1.349098e-02 0.172363132 0.086017828 -0.007603110 -0.033693292
## 2024-01-31 -4.314458e-02 -0.039319107 0.030882974 0.055700639 -0.031530363
## 2024-02-29 -1.871719e-02 0.086245455 0.064947066 0.041447449 0.025900213
## 2024-03-28 -5.264827e-02 0.065342093 0.073747059 0.016971419 -0.037687599
## 2024-04-30 -6.728939e-03 -0.088929891 -0.037859708 -0.077540195 -0.032246668
## 2024-05-31 1.224144e-01 0.010425170 0.055241341 0.065966531 -0.090558361
## 2024-06-28 9.125889e-02 0.033241828 -0.001827671 0.073855019 -0.029988933
## 2024-07-31 5.298220e-02 -0.147527308 0.056324587 -0.066128350 0.001283661
## 2024-08-30 3.184114e-02 0.049080425 0.054858353 -0.001095688 0.199298433
## 2024-09-30 1.731646e-02 -0.057947102 -0.064016743 0.031060679 0.030409470
## 2024-10-31 -3.090179e-02 -0.025900783 0.057231870 -0.057267739 0.002151757
## 2024-11-19 1.153584e-02 0.084753379 0.091114782 0.027764062 0.012797298
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)
covariance_matrix
## AAPL F JPM MSFT SBUX
## AAPL 0.006084878 0.002997860 0.001403274 0.002426352 0.001414833
## F 0.002997860 0.009575411 0.003713304 0.001989287 0.002056974
## JPM 0.001403274 0.003713304 0.004578016 0.001487242 0.001778659
## MSFT 0.002426352 0.001989287 0.001487242 0.003516175 0.001188812
## SBUX 0.001414833 0.002056974 0.001778659 0.001188812 0.004202247
# 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.0555318
# 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 F JPM MSFT SBUX
## [1,] 0.01430754 0.02021154 0.009616335 0.008007932 0.003388456
rowSums(component_contribution)
## [1] 0.0555318
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
round(3) %>%
as_tibble()
component_percentages
## # A tibble: 1 × 5
## AAPL F JPM MSFT SBUX
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.258 0.364 0.173 0.144 0.061
component_percentages %>%
as_tibble() %>%
gather(key = "asset", value = "contribution")
## # A tibble: 5 × 2
## asset contribution
## <chr> <dbl>
## 1 AAPL 0.258
## 2 F 0.364
## 3 JPM 0.173
## 4 MSFT 0.144
## 5 SBUX 0.061
# 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 F JPM MSFT SBUX
## 2013-01-31 -1.555891e-01 0.007336514 0.074549358 0.027328357 0.045383300
## 2013-02-28 -2.561098e-02 -0.026605494 0.038975507 0.020914888 -0.019139047
## 2013-03-28 2.850341e-03 0.041931662 -0.030299039 0.028720653 0.037571686
## 2013-04-30 2.710680e-04 0.041703790 0.038370509 0.145776915 0.066073915
## 2013-05-31 2.217147e-02 0.141581102 0.107826257 0.059941116 0.040473486
## 2013-06-28 -1.258956e-01 -0.013483439 -0.033529016 -0.010368593 0.036848587
## 2013-07-31 1.321021e-01 0.093099217 0.061462297 -0.081394998 0.084553347
## 2013-08-30 8.044303e-02 -0.041736039 -0.097951073 0.054854582 -0.008017011
## 2013-09-30 -2.172347e-02 0.041142996 0.022697024 -0.003599556 0.087519648
## 2013-10-31 9.201564e-02 0.019821242 0.004434394 0.062037677 0.051650721
## 2013-11-29 6.770768e-02 -0.001754662 0.104545287 0.081562869 0.008260797
## 2013-12-31 8.862541e-03 -0.101594827 0.021781106 -0.019063755 -0.038415507
## 2014-01-31 -1.139495e-01 -0.022950149 -0.048308450 0.011428724 -0.097327539
## 2014-02-28 5.591842e-02 0.028337755 0.026031351 0.019815433 0.001524169
## 2014-03-31 1.975620e-02 0.013553195 0.066219798 0.067616745 0.033535264
## 2014-04-30 9.476113e-02 0.042433407 -0.074831040 -0.014498126 -0.038338177
## 2014-05-30 7.576516e-02 0.017797667 -0.007350916 0.020307875 0.040101316
## 2014-06-30 2.728658e-02 0.047514820 0.036226204 0.018393370 0.054986505
## 2014-07-31 2.832582e-02 -0.005703505 0.007833586 0.034412965 0.003869503
## 2014-08-29 7.465212e-02 0.022655779 0.030398696 0.057484710 0.005031248
## 2014-09-30 -1.722062e-02 -0.163093372 0.013201021 0.020264493 -0.030666877
## 2014-10-31 6.948933e-02 -0.039619142 0.010691152 0.012646047 0.001324045
## 2014-11-28 1.007304e-01 0.110104229 -0.005305125 0.024439108 0.076233249
## 2014-12-31 -7.460608e-02 -0.014729689 0.039437723 -0.028858033 0.010290518
## 2015-01-30 5.961152e-02 -0.042159651 -0.134036572 -0.139546610 0.064653032
## 2015-02-27 9.601605e-02 0.105088112 0.119456927 0.089036002 0.069515921
## 2015-03-31 -3.187456e-02 -0.012315518 -0.011488679 -0.075530057 0.012860004
## 2015-04-30 5.769705e-03 -0.011906559 0.049912904 0.179201506 0.046020398
## 2015-05-29 4.434140e-02 -0.040690241 0.039063045 -0.030803902 0.050063178
## 2015-06-30 -3.793808e-02 -0.010603231 0.029655881 -0.059571111 0.031447604
## 2015-07-31 -3.348113e-02 -0.001898051 0.017814168 0.056150966 0.077313632
## 2015-08-31 -6.848855e-02 -0.066924203 -0.066827152 -0.063950848 -0.054435786
## 2015-09-30 -2.205778e-02 -0.021866921 -0.050062484 0.016860704 0.038194110
## 2015-10-30 8.011219e-02 0.097566361 0.059589389 0.173394797 0.096045615
## 2015-11-30 -5.821330e-03 -0.032947403 0.037123377 0.038685962 -0.015806247
## 2015-12-31 -1.167903e-01 -0.016890088 -0.009795867 0.020578133 -0.022402811
## 2016-01-29 -7.822333e-02 -0.132400522 -0.097447106 -0.007054311 0.012251849
## 2016-02-29 -1.288695e-03 0.046634183 -0.055281576 -0.072344072 -0.039776696
## 2016-03-31 1.197463e-01 0.076161443 0.050564613 0.082036511 0.025275049
## 2016-04-29 -1.507312e-01 0.015403495 0.072421661 -0.102086620 -0.059881614
## 2016-05-31 6.931441e-02 -0.005175392 0.032228048 0.067842181 -0.020626135
## 2016-06-30 -4.359643e-02 -0.070635815 -0.049142543 -0.035138510 0.039822882
## 2016-07-29 8.623524e-02 0.018039746 0.036778879 0.102268065 0.016150427
## 2016-08-31 2.337653e-02 -0.004750796 0.053713074 0.019880925 -0.028377876
## 2016-09-30 6.344836e-02 -0.042973761 -0.013573086 0.002433562 -0.037876854
## 2016-10-31 4.324784e-03 -0.015339743 0.046556464 0.039487791 -0.019961798
## 2016-11-30 -2.183772e-02 0.018565949 0.146281569 0.012390809 0.092935577
## 2016-12-30 4.684101e-02 0.014114096 0.073564590 0.030721533 -0.043182234
## 2017-01-31 4.664149e-02 0.034770998 -0.013907057 0.039598068 -0.005418265
## 2017-02-28 1.255549e-01 0.013660353 0.068385960 -0.004373380 0.033938683
## 2017-03-31 4.754214e-02 -0.073678118 -0.031157790 0.028960693 0.026376535
## 2017-04-28 -7.034577e-05 -0.001325445 -0.003879637 0.038718498 0.028199655
## 2017-05-31 6.560778e-02 -0.030989883 -0.057361433 0.025672863 0.061537547
## 2017-06-30 -5.891585e-02 0.006275507 0.106698835 -0.013115545 -0.086996990
## 2017-07-31 3.218035e-02 0.015437809 0.009852355 0.053249901 -0.077160367
## 2017-08-31 1.016530e-01 -0.017078833 -0.009962257 0.033389051 0.020675214
## 2017-09-29 -6.213485e-02 0.081784737 0.049580914 -0.003751640 -0.021185319
## 2017-10-31 9.240364e-02 0.037094311 0.057849137 0.110342275 0.020820713
## 2017-11-30 2.007528e-02 0.020170192 0.038126797 0.016841135 0.058198344
## 2017-12-29 -1.536322e-02 -0.002398999 0.022889191 0.016145139 -0.006767966
## 2018-01-31 -1.069325e-02 -0.105436020 0.083669329 0.104998235 -0.010854383
## 2018-02-28 6.596086e-02 -0.033367471 -0.001470744 -0.008450751 0.010500995
## 2018-03-29 -5.980379e-02 0.043344725 -0.049062941 -0.027022969 0.013740441
## 2018-04-30 -1.513369e-02 0.027664676 -0.005821886 0.024353271 -0.005543040
## 2018-05-31 1.267420e-01 0.027206737 -0.016405082 0.059652151 -0.010540809
## 2018-06-29 -9.463174e-03 -0.042446989 -0.026610146 -0.002329677 -0.148490595
## 2018-07-31 2.759915e-02 -0.083701368 0.103604540 0.073020845 0.069961275
## 2018-08-31 1.826731e-01 -0.057392608 -0.003223818 0.061088317 0.026968696
## 2018-09-28 -8.337457e-03 -0.024561029 -0.015302592 0.017997738 0.061493683
## 2018-10-31 -3.095188e-02 0.049722260 -0.027461172 -0.068387200 0.024846922
## 2018-11-30 -1.999124e-01 -0.014767855 0.019709057 0.041798132 0.140772392
## 2018-12-31 -1.240885e-01 -0.207067498 -0.130157868 -0.087790724 -0.035391216
## 2019-01-31 5.368688e-02 0.157317696 0.066577317 0.027768721 0.056450829
## 2019-02-28 4.380286e-02 -0.003414836 0.008274895 0.074511439 0.035843588
## 2019-03-29 9.260273e-02 0.001139338 -0.030451232 0.051409344 0.056446420
## 2019-04-30 5.490099e-02 0.190041352 0.144248645 0.101963476 0.043948390
## 2019-05-31 -1.326326e-01 -0.093207215 -0.090959576 -0.050747350 -0.016446502
## 2019-06-28 1.226772e-01 0.071929847 0.053649996 0.079843927 0.097268332
## 2019-07-31 7.361699e-02 -0.056064903 0.043933429 0.017097083 0.121817466
## 2019-08-30 -1.659817e-02 -0.038507508 -0.054383457 0.014924749 0.023339193
## 2019-09-30 7.042274e-02 -0.001091168 0.068847232 0.008451158 -0.088066333
## 2019-10-31 1.049764e-01 -0.047969047 0.067598371 0.030738882 -0.044636883
## 2019-11-29 7.469379e-02 0.053270313 0.053308410 0.057761429 0.015222407
## 2019-12-31 9.420400e-02 0.026145394 0.056365491 0.040901229 0.028730015
## 2020-01-31 5.260197e-02 -0.036128849 -0.045422682 0.076455636 -0.035778158
## 2020-02-28 -1.218306e-01 -0.236842544 -0.130987536 -0.046764588 -0.073793053
## 2020-03-31 -7.231413e-02 -0.365332829 -0.254395154 -0.026900021 -0.176498833
## 2020-04-30 1.444240e-01 0.052431184 0.072040206 0.127800752 0.154584958
## 2020-05-29 8.166646e-02 0.114941475 0.016056403 0.025073827 0.021923571
## 2020-06-30 1.374868e-01 0.062785607 -0.033968894 0.104864041 -0.058071447
## 2020-07-31 1.528342e-01 0.083578659 0.036757344 0.007343382 0.039173323
## 2020-08-31 1.960347e-01 0.031276093 0.036075652 0.097808741 0.104138892
## 2020-09-30 -1.081715e-01 -0.023740011 -0.039911812 -0.069775256 0.017020036
## 2020-10-30 -6.188825e-02 0.148989310 0.027455307 -0.038085890 0.012031770
## 2020-11-30 9.120479e-02 0.160965249 0.184291720 0.058325902 0.124427569
## 2020-12-31 1.084718e-01 -0.032459303 0.075070933 0.038264353 0.087470492
## 2021-01-29 -5.516636e-03 0.180613471 0.019688895 0.041997437 -0.099891725
## 2021-02-26 -8.306869e-02 0.105360516 0.134337603 0.004109537 0.113907204
## 2021-03-31 7.312974e-03 0.045937014 0.033803642 0.014482783 0.011412725
## 2021-04-30 7.345250e-02 -0.059706509 0.016197997 0.067286419 0.046665805
## 2021-05-28 -5.181641e-02 0.230396199 0.065610935 -0.007656630 -0.001371630
## 2021-06-30 9.450015e-02 0.022457457 -0.054425937 0.081569718 -0.018344187
## 2021-07-30 6.295808e-02 -0.063193450 -0.018724794 0.050423685 0.082537183
## 2021-08-31 4.161148e-02 -0.068225059 0.052429196 0.059768863 -0.029111089
## 2021-09-30 -7.046171e-02 0.083166562 0.023113173 -0.068406363 -0.063058706
## 2021-10-29 5.700133e-02 0.187487195 0.043184474 0.162366286 -0.039195223
## 2021-11-30 9.991933e-02 0.121503664 -0.067316565 -0.001282912 0.037405521
## 2021-12-31 7.160291e-02 0.079120280 -0.003026836 0.017184198 0.064715224
## 2022-01-31 -1.583698e-02 -0.017760396 -0.057573295 -0.078334623 -0.173689998
## 2022-02-28 -5.558224e-02 -0.144997363 -0.046840803 -0.037922000 -0.063666591
## 2022-03-31 5.588255e-02 -0.037718483 -0.039412222 0.031364785 -0.008973682
## 2022-04-29 -1.021777e-01 -0.170852707 -0.125475890 -0.105212707 -0.197853185
## 2022-05-31 -5.603732e-02 -0.034486135 0.102398669 -0.018242471 0.057440822
## 2022-06-30 -8.493685e-02 -0.206290836 -0.160612341 -0.056909745 -0.027246896
## 2022-07-29 1.728045e-01 0.277522897 0.032933925 0.089014570 0.104207815
## 2022-08-31 -3.170533e-02 0.046680618 -0.014230322 -0.068989025 -0.002728166
## 2022-09-30 -1.289442e-01 -0.308009852 -0.084640352 -0.115710363 0.002257277
## 2022-10-31 1.039558e-01 0.177099560 0.195049247 -0.003311716 0.027276945
## 2022-11-30 -3.358511e-02 0.049274125 0.093228097 0.097329075 0.171478179
## 2022-12-30 -1.304192e-01 -0.178300814 -0.029971320 -0.061923656 -0.029793630
## 2023-01-31 1.048292e-01 0.149842254 0.050130147 0.032773604 0.095493484
## 2023-02-28 2.291831e-02 -0.051572824 0.023932730 0.008977437 -0.061778412
## 2023-03-31 1.121213e-01 0.042973881 -0.095373141 0.144863483 0.019785355
## 2023-04-28 2.857514e-02 -0.046428209 0.066892599 0.063692730 0.093098928
## 2023-05-31 4.502928e-02 0.010050248 -0.018470996 0.068691231 -0.152484863
## 2023-06-30 9.014229e-02 0.231772774 0.069243291 0.036330649 0.014438417
## 2023-07-31 1.270449e-02 -0.124878811 0.089422374 -0.013659480 0.025022636
## 2023-08-31 -4.330827e-02 -0.085292325 -0.076477375 -0.022476498 -0.036193091
## 2023-09-29 -9.285932e-02 0.023626288 -0.008992713 -0.037330801 -0.065414707
## 2023-10-31 -2.573296e-03 -0.226568559 -0.034614473 0.068420445 0.010571663
## 2023-11-30 1.077599e-01 0.050985446 0.115463163 0.115954961 0.079231836
## 2023-12-29 1.349098e-02 0.172363132 0.086017828 -0.007603110 -0.033693292
## 2024-01-31 -4.314458e-02 -0.039319107 0.030882974 0.055700639 -0.031530363
## 2024-02-29 -1.871719e-02 0.086245455 0.064947066 0.041447449 0.025900213
## 2024-03-28 -5.264827e-02 0.065342093 0.073747059 0.016971419 -0.037687599
## 2024-04-30 -6.728939e-03 -0.088929891 -0.037859708 -0.077540195 -0.032246668
## 2024-05-31 1.224144e-01 0.010425170 0.055241341 0.065966531 -0.090558361
## 2024-06-28 9.125889e-02 0.033241828 -0.001827671 0.073855019 -0.029988933
## 2024-07-31 5.298220e-02 -0.147527308 0.056324587 -0.066128350 0.001283661
## 2024-08-30 3.184114e-02 0.049080425 0.054858353 -0.001095688 0.199298433
## 2024-09-30 1.731646e-02 -0.057947102 -0.064016743 0.031060679 0.030409470
## 2024-10-31 -3.090179e-02 -0.025900783 0.057231870 -0.057267739 0.002151757
## 2024-11-19 1.153584e-02 0.084753379 0.091114782 0.027764062 0.012797298
calculate_component_contribution <-function(.data, w) {
# Covariance of asset returns
covariance_matrix <- cov(.data)
# Standard deviation of portfolio
# Summarizes how much each asset's returns vary with those of other assets within the portfolio into a single number
sd_portfolio <- sqrt(t(w) %*% covariance_matrix %*% w)
# Component contribution
# Similar to the formula for sd_portfolio
# Mathematical trick to summarize the same, sd_portfolio, by asset instead 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
## AAPL F JPM MSFT SBUX
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.258 0.364 0.173 0.144 0.061
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 Weight
add_column(weight = c(.25, .25, .2, .2, .1)) %>%
# Tranform 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 = .5)) +
theme_tq() +
labs(title = "Percent Contriibution to Portfolio Volatility 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?
The largest contributor to portfolio volatility is F, as its contribution significantly exceeds its weight in the portfolio. This indicates that risk is concentrated in this single asset. While other assets, like AAPL and MSFT, have more balanced contributions relative to their weights, F stands out as a disproportionate driver of risk. To improve diversification, reducing F’s weight may be worth considering.