# Load packages

# Core
library(tidyverse)
library(tidyquant)

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("MSFT", "AAPL", "F", "JPM", "SBUX")

prices <- tq_get(x    = symbols,
                 from = "2012-12-31")

2 Convert prices to returns (monthly)

asset_returns_tbl <- prices %>%
    
    group_by(symbol) %>%
    
    tq_transmute(select     = adjusted,
                 mutate_fun = periodReturn,
                period.     = "monthly",
                type        = "log") %>%
    
    slice(-1) %>%
    
    ungroup() %>% 
    
    set_names(c("asset", "date", "returns"))

3 Calculate Component Contribution to Portfolio Volatility

# Transform data into wide form
asset_returns_wide_tbl <- asset_returns_tbl %>%

    pivot_wider(names_from = asset, values_from = returns) %>%

    column_to_rownames(var = "date")

asset_returns_wide_tbl
##                     AAPL            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

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 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.