# 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("AMD", "NVDA", "AAPL", "INTC", "GOOG")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2024-11-20")
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 AMD GOOG INTC NVDA
## 2013-01-31 -1.555898e-01 0.080042631 0.0660632586 0.020164366 0.000000000
## 2013-02-28 -2.561119e-02 -0.043228694 0.0584794367 0.003056544 0.038221601
## 2013-03-28 2.850272e-03 0.023810626 -0.0087878655 0.044951282 0.013339006
## 2013-04-30 2.716317e-04 0.100643521 0.0375393189 0.092225292 0.070706078
## 2013-05-31 2.217154e-02 0.349557500 0.0550324684 0.023060529 0.054651957
## 2013-06-28 -1.258956e-01 0.019802609 0.0104477177 -0.002061383 -0.030167461
## 2013-07-31 1.321020e-01 -0.079021973 0.0083478266 -0.037423260 0.028091872
## 2013-08-30 8.044283e-02 -0.142285017 -0.0471073807 -0.050298101 0.026270339
## 2013-09-30 -2.172315e-02 0.152839195 0.0336805508 0.041876977 0.053460252
## 2013-10-31 9.201550e-02 -0.131658393 0.1626137511 0.065437811 -0.024065843
## 2013-11-29 6.770778e-02 0.086012929 0.0277603690 -0.016765096 0.032034485
## 2013-12-31 8.862430e-03 0.061270767 0.0560803510 0.085191590 0.026567314
## 2014-01-31 -1.139496e-01 -0.120694197 0.0523736758 -0.056252163 -0.020177205
## 2014-02-28 5.591842e-02 0.078471606 0.0289427889 0.018415588 0.162107502
## 2014-03-31 1.975631e-02 0.077759411 -0.0863761431 0.041532748 -0.025903992
## 2014-04-30 9.476112e-02 0.019753709 -0.0559562158 0.033526929 0.030788446
## 2014-05-30 7.576506e-02 -0.022250646 0.0611852104 0.031886089 0.032886160
## 2014-06-30 2.728639e-02 0.046406386 0.0271165183 0.123136963 -0.024508262
## 2014-07-31 2.832646e-02 -0.069163352 -0.0064174879 0.092364017 -0.057729554
## 2014-08-29 7.465175e-02 0.064378658 0.0000000000 0.036569559 0.110060100
## 2014-09-30 -1.722070e-02 -0.201203738 0.0100266345 -0.002867590 -0.052782832
## 2014-10-31 6.948925e-02 -0.197092916 -0.0321734491 -0.023537749 0.057399304
## 2014-11-28 1.007303e-01 -0.003577818 -0.0313403105 0.097533170 0.074852026
## 2014-12-31 -7.460594e-02 -0.043963081 -0.0288908834 -0.026110053 -0.044863518
## 2015-01-30 5.961152e-02 -0.038172628 0.0153077624 -0.093822797 -0.043318820
## 2015-02-27 9.601578e-02 0.190716820 0.0437064372 0.013482719 0.142698875
## 2015-03-31 -3.187409e-02 -0.148805873 -0.0188002471 -0.061395674 -0.052582385
## 2015-04-30 5.769568e-03 -0.170452010 -0.0169025209 0.040118431 0.058908308
## 2015-05-29 4.434133e-02 0.008810621 -0.0097808463 0.064226615 0.001460651
## 2015-06-30 -3.793822e-02 0.051293347 -0.0220412022 -0.124698951 -0.095717212
## 2015-07-31 -3.348093e-02 -0.217948801 0.1839181544 -0.049529927 -0.007988113
## 2015-08-31 -6.848900e-02 -0.064193162 -0.0118342473 -0.005989995 0.123595346
## 2015-09-30 -2.205756e-02 -0.051002506 -0.0160275192 0.054546137 0.092151046
## 2015-10-30 8.011248e-02 0.209091727 0.1555397941 0.116381080 0.140555210
## 2015-11-30 -5.821329e-03 0.107245540 0.0437523642 0.033540208 0.115405310
## 2015-12-31 -1.167905e-01 0.195650415 0.0216860731 -0.009245828 0.038347321
## 2016-01-29 -7.822334e-02 -0.265854608 -0.0212148962 -0.104877119 -0.118048585
## 2016-02-29 -1.288262e-03 -0.027651504 -0.0627392605 -0.038432274 0.071923468
## 2016-03-31 1.197460e-01 0.286513083 0.0654275963 0.089177330 0.127655160
## 2016-04-29 -1.507311e-01 0.219628629 -0.0722726559 -0.066126645 -0.002810767
## 2016-05-31 6.931389e-02 0.252565652 0.0598051735 0.050954302 0.276388358
## 2016-06-30 -4.359635e-02 0.117539811 -0.0611191121 0.037587682 0.006188211
## 2016-07-29 8.623550e-02 0.288654408 0.1050873292 0.060911369 0.194443845
## 2016-08-31 2.337637e-02 0.075772552 -0.0022657966 0.036670579 0.073468813
## 2016-09-30 6.344821e-02 -0.068510397 0.0132615302 0.050526472 0.110693590
## 2016-10-31 4.324930e-03 0.045269423 0.0092841056 -0.079358796 0.037805166
## 2016-11-30 -2.183735e-02 0.208935186 -0.0343615135 0.002655694 0.260525323
## 2016-12-30 4.684064e-02 0.241162087 0.0180152337 0.044251364 0.146435625
## 2017-01-31 4.664149e-02 -0.089419301 0.0318397939 0.015050533 0.022602444
## 2017-02-28 1.255554e-01 0.332469208 0.0326200945 -0.009868727 -0.071875080
## 2017-03-31 4.754144e-02 0.006204787 0.0076842168 -0.003597425 0.070843829
## 2017-04-28 -6.988898e-05 -0.089826957 0.0880997230 0.002215632 -0.043434287
## 2017-05-31 6.560746e-02 -0.172743565 0.0629877923 0.006304226 0.326022310
## 2017-06-30 -5.891564e-02 0.109106841 -0.0599350111 -0.067885732 0.001453586
## 2017-07-31 3.218024e-02 0.086677465 0.0236741629 0.050003368 0.117044821
## 2017-08-31 1.016531e-01 -0.045855434 0.0094446934 -0.003862794 0.042639415
## 2017-09-29 -6.213496e-02 -0.019418086 0.0208389738 0.082343677 0.053601101
## 2017-10-31 9.240403e-02 -0.148545524 0.0582525835 0.177802961 0.145700750
## 2017-11-30 2.007508e-02 -0.009140779 0.0046809400 -0.008483269 -0.029245032
## 2017-12-29 -1.536341e-02 -0.057644734 0.0241716390 0.029013141 -0.036583515
## 2018-01-31 -1.069325e-02 0.290111036 0.1115967900 0.041999690 0.239240524
## 2018-02-28 6.596077e-02 -0.126279741 -0.0573515298 0.030369296 -0.014959100
## 2018-03-29 -5.980361e-02 -0.186458876 -0.0683057993 0.055059818 -0.043968890
## 2018-04-30 -1.513359e-02 0.079353598 -0.0141136248 -0.008871939 -0.029312870
## 2018-05-31 1.267419e-01 0.232656934 0.0643892525 0.072808751 0.115145137
## 2018-06-29 -9.462827e-03 0.087800110 0.0278664749 -0.104757033 -0.062544755
## 2018-07-31 2.759872e-02 0.201155761 0.0871651755 -0.032924012 0.033048678
## 2018-08-31 1.826733e-01 0.317113754 0.0007637297 0.012900460 0.137075326
## 2018-09-28 -8.337669e-03 0.204779675 -0.0205011698 -0.023820491 0.001210415
## 2018-10-31 -3.095166e-02 -0.528461644 -0.1028991445 -0.008707496 -0.287373427
## 2018-11-30 -1.999123e-01 0.156736193 0.0162678540 0.056809166 -0.253667341
## 2018-12-31 -1.240885e-01 -0.143100857 -0.0552431428 -0.049469773 -0.202283382
## 2019-01-31 5.368668e-02 0.279386699 0.0750917804 0.004040478 0.073974259
## 2019-02-28 4.380295e-02 -0.036716646 0.0031748651 0.123157658 0.071593764
## 2019-03-29 9.260247e-02 0.081186244 0.0465716243 0.013876406 0.151870020
## 2019-04-30 5.490115e-02 0.079439632 0.0128463578 -0.050803468 0.007987706
## 2019-05-31 -1.326324e-01 -0.007994204 -0.0740704060 -0.141405891 -0.288679961
## 2019-06-28 1.226770e-01 0.102547402 -0.0208014640 0.083390790 0.192591197
## 2019-07-31 7.361692e-02 0.002630713 0.1183224942 0.054473874 0.026972979
## 2019-08-30 -1.659795e-02 0.032312988 -0.0237704414 -0.057400564 -0.006207922
## 2019-09-30 7.042244e-02 -0.081448072 0.0256755038 0.083330803 0.038414001
## 2019-10-31 1.049765e-01 0.157348653 0.0331681100 0.092607456 0.143947125
## 2019-11-29 7.469386e-02 0.143100874 0.0349734427 0.032021665 0.076031804
## 2019-12-31 9.420400e-02 0.158192829 0.0242707879 0.030536784 0.082162730
## 2020-01-31 5.260166e-02 0.024554311 0.0701848929 0.065947220 0.004790944
## 2020-02-28 -1.218303e-01 -0.032874943 -0.0684586298 -0.136132889 0.133626995
## 2020-03-31 -7.231413e-02 0.000000000 -0.1413300093 -0.025539405 -0.024248630
## 2020-04-30 1.444238e-01 0.141443063 0.1482721074 0.102807242 0.103279489
## 2020-05-29 8.166687e-02 0.026557731 0.0578073650 0.053644676 0.194462068
## 2020-06-30 1.374866e-01 -0.022367226 -0.0107722179 -0.050515720 0.068216210
## 2020-07-31 1.528341e-01 0.386468079 0.0478934005 -0.225946970 0.111189689
## 2020-08-31 1.960349e-01 0.159505216 0.0971010982 0.072053228 0.231105455
## 2020-09-30 -1.081717e-01 -0.102282260 -0.1061508709 0.016158880 0.011895712
## 2020-10-30 -6.188804e-02 -0.085249927 0.0980590834 -0.156470648 -0.076501459
## 2020-11-30 9.120451e-02 0.207589583 0.0826847480 0.095180124 0.066921655
## 2020-12-31 1.084722e-01 -0.010305505 -0.0050446216 0.029950574 -0.025900148
## 2021-01-29 -5.516871e-03 -0.068478958 0.0467581267 0.108146388 -0.005010612
## 2021-02-26 -8.306882e-02 -0.013282561 0.1039617314 0.096749347 0.054293237
## 2021-03-31 7.312911e-03 -0.073771271 0.0154771604 0.051622229 -0.026723134
## 2021-04-30 7.345293e-02 0.038975739 0.1527899045 -0.106576487 0.117297791
## 2021-05-28 -5.181677e-02 -0.019048206 0.0005974250 -0.001012141 0.079071238
## 2021-06-30 9.450016e-02 0.159523669 0.0385416519 -0.017305606 0.208332035
## 2021-07-30 6.295830e-02 0.122680138 0.0760718346 -0.044063193 -0.025494261
## 2021-08-31 4.161137e-02 0.041774537 0.0730045198 0.012786314 0.138204289
## 2021-09-30 -7.046171e-02 -0.073246845 -0.0875715395 -0.014533399 -0.077484551
## 2021-10-29 5.700144e-02 0.155648945 0.1066948649 -0.083740660 0.210395738
## 2021-11-30 9.991913e-02 0.275527434 -0.0400332042 0.011003317 0.245338388
## 2021-12-31 7.160309e-02 -0.095815465 0.0155159766 0.045688233 -0.105149637
## 2022-01-31 -1.583689e-02 -0.230729542 -0.0640854435 -0.053441766 -0.183267111
## 2022-02-28 -5.558241e-02 0.076555710 -0.0059683911 -0.015619866 -0.004133430
## 2022-03-31 5.588255e-02 -0.120482480 0.0346685444 0.038252643 0.112575914
## 2022-04-29 -1.021777e-01 -0.245712033 -0.1944949638 -0.128356434 -0.386065635
## 2022-05-31 -5.603732e-02 0.174849100 -0.0081002558 0.026735898 0.006717041
## 2022-06-30 -8.493685e-02 -0.286700804 -0.0417810722 -0.171751920 -0.208219297
## 2022-07-29 1.728047e-01 0.211383814 0.0643327736 -0.029844736 0.180792160
## 2022-08-31 -3.170562e-02 -0.107161630 -0.0663691728 -0.118815533 -0.185089265
## 2022-09-30 -1.289442e-01 -0.292287949 -0.1268135622 -0.214021779 -0.217576729
## 2022-10-31 1.039558e-01 -0.053488672 -0.0156179604 0.098233898 0.106044003
## 2022-11-30 -3.358512e-02 0.256609830 0.0692745722 0.069498627 0.226461886
## 2022-12-30 -1.304193e-01 -0.181111434 -0.1339679747 -0.129028290 -0.146693626
## 2023-01-31 1.048294e-01 0.148643655 0.1182712812 0.066947619 0.290330385
## 2023-02-28 2.291841e-02 0.044631101 -0.1007318653 -0.113264002 0.172531281
## 2023-03-31 1.121214e-01 0.220952299 0.1412534063 0.270385077 0.179536630
## 2023-04-28 2.857513e-02 -0.092284450 0.0397753062 -0.050536267 -0.001008544
## 2023-05-31 4.502909e-02 0.279677610 0.1310217643 0.016246810 0.310008260
## 2023-06-30 9.014236e-02 -0.037054001 -0.0196454416 0.061671648 0.111729726
## 2023-07-31 1.270441e-02 0.004292397 0.0956332795 0.067356945 0.099530518
## 2023-08-31 -4.330819e-02 -0.078906991 0.0313565693 -0.014178264 0.054674107
## 2023-09-29 -9.285950e-02 -0.027814218 -0.0408675029 0.011599962 -0.126218633
## 2023-10-31 -2.573206e-03 -0.042923335 -0.0509540273 0.026372089 -0.064546188
## 2023-11-30 1.077599e-01 0.207055468 0.0665317006 0.205944141 0.137050155
## 2023-12-29 1.349106e-02 0.196105829 0.0510207183 0.117037006 0.057263031
## 2024-01-31 -4.314466e-02 0.128899206 0.0061543397 -0.153951576 0.217059116
## 2024-02-29 -1.871719e-02 0.138134928 -0.0143479204 0.002230120 0.251388401
## 2024-03-28 -5.264836e-02 -0.064576574 0.0855198700 0.025683568 0.132939782
## 2024-04-30 -6.728849e-03 -0.130678165 0.0781716797 -0.371303188 -0.044746618
## 2024-05-31 1.224143e-01 0.052397554 0.0550640990 0.016447718 0.238127666
## 2024-06-28 9.125897e-02 -0.028502961 0.0540905131 0.003882183 0.119508665
## 2024-07-31 5.298220e-02 -0.115750773 -0.0576203452 -0.007454249 -0.054220172
## 2024-08-30 3.184114e-02 0.027847841 -0.0475462855 -0.326382133 0.019883127
## 2024-09-30 1.731646e-02 0.099365224 0.0138344637 0.062437778 0.017277918
## 2024-10-31 -3.090179e-02 -0.130054782 0.0323671889 -0.086314048 0.089122612
## 2024-11-19 1.153584e-02 -0.033023588 0.0391227076 0.117369908 0.101957629
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)
covariance_matrix
## AAPL AMD GOOG INTC NVDA
## AAPL 0.006084880 0.004067025 0.002072423 0.002243854 0.005064274
## AMD 0.004067025 0.023291011 0.003758969 0.003257509 0.010217313
## GOOG 0.002072423 0.003758969 0.004225900 0.001879687 0.003930481
## INTC 0.002243854 0.003257509 0.001879687 0.007661920 0.003738245
## NVDA 0.005064274 0.010217313 0.003930481 0.003738245 0.014924334
# 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.07296305
# 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 AMD GOOG INTC NVDA
## [1,] 0.01338917 0.03174393 0.008420738 0.01002559 0.00938362
rowSums(component_contribution)
## [1] 0.07296305
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
round(3) %>%
as_tibble()
component_percentages
## # A tibble: 1 × 5
## AAPL AMD GOOG INTC NVDA
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.184 0.435 0.115 0.137 0.129
component_percentages %>%
as_tibble() %>%
gather(key = "asset", value = "contribution")
## # A tibble: 5 × 2
## asset contribution
## <chr> <dbl>
## 1 AAPL 0.184
## 2 AMD 0.435
## 3 GOOG 0.115
## 4 INTC 0.137
## 5 NVDA 0.129
# 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 AMD GOOG INTC NVDA
## 2013-01-31 -1.555898e-01 0.080042631 0.0660632586 0.020164366 0.000000000
## 2013-02-28 -2.561119e-02 -0.043228694 0.0584794367 0.003056544 0.038221601
## 2013-03-28 2.850272e-03 0.023810626 -0.0087878655 0.044951282 0.013339006
## 2013-04-30 2.716317e-04 0.100643521 0.0375393189 0.092225292 0.070706078
## 2013-05-31 2.217154e-02 0.349557500 0.0550324684 0.023060529 0.054651957
## 2013-06-28 -1.258956e-01 0.019802609 0.0104477177 -0.002061383 -0.030167461
## 2013-07-31 1.321020e-01 -0.079021973 0.0083478266 -0.037423260 0.028091872
## 2013-08-30 8.044283e-02 -0.142285017 -0.0471073807 -0.050298101 0.026270339
## 2013-09-30 -2.172315e-02 0.152839195 0.0336805508 0.041876977 0.053460252
## 2013-10-31 9.201550e-02 -0.131658393 0.1626137511 0.065437811 -0.024065843
## 2013-11-29 6.770778e-02 0.086012929 0.0277603690 -0.016765096 0.032034485
## 2013-12-31 8.862430e-03 0.061270767 0.0560803510 0.085191590 0.026567314
## 2014-01-31 -1.139496e-01 -0.120694197 0.0523736758 -0.056252163 -0.020177205
## 2014-02-28 5.591842e-02 0.078471606 0.0289427889 0.018415588 0.162107502
## 2014-03-31 1.975631e-02 0.077759411 -0.0863761431 0.041532748 -0.025903992
## 2014-04-30 9.476112e-02 0.019753709 -0.0559562158 0.033526929 0.030788446
## 2014-05-30 7.576506e-02 -0.022250646 0.0611852104 0.031886089 0.032886160
## 2014-06-30 2.728639e-02 0.046406386 0.0271165183 0.123136963 -0.024508262
## 2014-07-31 2.832646e-02 -0.069163352 -0.0064174879 0.092364017 -0.057729554
## 2014-08-29 7.465175e-02 0.064378658 0.0000000000 0.036569559 0.110060100
## 2014-09-30 -1.722070e-02 -0.201203738 0.0100266345 -0.002867590 -0.052782832
## 2014-10-31 6.948925e-02 -0.197092916 -0.0321734491 -0.023537749 0.057399304
## 2014-11-28 1.007303e-01 -0.003577818 -0.0313403105 0.097533170 0.074852026
## 2014-12-31 -7.460594e-02 -0.043963081 -0.0288908834 -0.026110053 -0.044863518
## 2015-01-30 5.961152e-02 -0.038172628 0.0153077624 -0.093822797 -0.043318820
## 2015-02-27 9.601578e-02 0.190716820 0.0437064372 0.013482719 0.142698875
## 2015-03-31 -3.187409e-02 -0.148805873 -0.0188002471 -0.061395674 -0.052582385
## 2015-04-30 5.769568e-03 -0.170452010 -0.0169025209 0.040118431 0.058908308
## 2015-05-29 4.434133e-02 0.008810621 -0.0097808463 0.064226615 0.001460651
## 2015-06-30 -3.793822e-02 0.051293347 -0.0220412022 -0.124698951 -0.095717212
## 2015-07-31 -3.348093e-02 -0.217948801 0.1839181544 -0.049529927 -0.007988113
## 2015-08-31 -6.848900e-02 -0.064193162 -0.0118342473 -0.005989995 0.123595346
## 2015-09-30 -2.205756e-02 -0.051002506 -0.0160275192 0.054546137 0.092151046
## 2015-10-30 8.011248e-02 0.209091727 0.1555397941 0.116381080 0.140555210
## 2015-11-30 -5.821329e-03 0.107245540 0.0437523642 0.033540208 0.115405310
## 2015-12-31 -1.167905e-01 0.195650415 0.0216860731 -0.009245828 0.038347321
## 2016-01-29 -7.822334e-02 -0.265854608 -0.0212148962 -0.104877119 -0.118048585
## 2016-02-29 -1.288262e-03 -0.027651504 -0.0627392605 -0.038432274 0.071923468
## 2016-03-31 1.197460e-01 0.286513083 0.0654275963 0.089177330 0.127655160
## 2016-04-29 -1.507311e-01 0.219628629 -0.0722726559 -0.066126645 -0.002810767
## 2016-05-31 6.931389e-02 0.252565652 0.0598051735 0.050954302 0.276388358
## 2016-06-30 -4.359635e-02 0.117539811 -0.0611191121 0.037587682 0.006188211
## 2016-07-29 8.623550e-02 0.288654408 0.1050873292 0.060911369 0.194443845
## 2016-08-31 2.337637e-02 0.075772552 -0.0022657966 0.036670579 0.073468813
## 2016-09-30 6.344821e-02 -0.068510397 0.0132615302 0.050526472 0.110693590
## 2016-10-31 4.324930e-03 0.045269423 0.0092841056 -0.079358796 0.037805166
## 2016-11-30 -2.183735e-02 0.208935186 -0.0343615135 0.002655694 0.260525323
## 2016-12-30 4.684064e-02 0.241162087 0.0180152337 0.044251364 0.146435625
## 2017-01-31 4.664149e-02 -0.089419301 0.0318397939 0.015050533 0.022602444
## 2017-02-28 1.255554e-01 0.332469208 0.0326200945 -0.009868727 -0.071875080
## 2017-03-31 4.754144e-02 0.006204787 0.0076842168 -0.003597425 0.070843829
## 2017-04-28 -6.988898e-05 -0.089826957 0.0880997230 0.002215632 -0.043434287
## 2017-05-31 6.560746e-02 -0.172743565 0.0629877923 0.006304226 0.326022310
## 2017-06-30 -5.891564e-02 0.109106841 -0.0599350111 -0.067885732 0.001453586
## 2017-07-31 3.218024e-02 0.086677465 0.0236741629 0.050003368 0.117044821
## 2017-08-31 1.016531e-01 -0.045855434 0.0094446934 -0.003862794 0.042639415
## 2017-09-29 -6.213496e-02 -0.019418086 0.0208389738 0.082343677 0.053601101
## 2017-10-31 9.240403e-02 -0.148545524 0.0582525835 0.177802961 0.145700750
## 2017-11-30 2.007508e-02 -0.009140779 0.0046809400 -0.008483269 -0.029245032
## 2017-12-29 -1.536341e-02 -0.057644734 0.0241716390 0.029013141 -0.036583515
## 2018-01-31 -1.069325e-02 0.290111036 0.1115967900 0.041999690 0.239240524
## 2018-02-28 6.596077e-02 -0.126279741 -0.0573515298 0.030369296 -0.014959100
## 2018-03-29 -5.980361e-02 -0.186458876 -0.0683057993 0.055059818 -0.043968890
## 2018-04-30 -1.513359e-02 0.079353598 -0.0141136248 -0.008871939 -0.029312870
## 2018-05-31 1.267419e-01 0.232656934 0.0643892525 0.072808751 0.115145137
## 2018-06-29 -9.462827e-03 0.087800110 0.0278664749 -0.104757033 -0.062544755
## 2018-07-31 2.759872e-02 0.201155761 0.0871651755 -0.032924012 0.033048678
## 2018-08-31 1.826733e-01 0.317113754 0.0007637297 0.012900460 0.137075326
## 2018-09-28 -8.337669e-03 0.204779675 -0.0205011698 -0.023820491 0.001210415
## 2018-10-31 -3.095166e-02 -0.528461644 -0.1028991445 -0.008707496 -0.287373427
## 2018-11-30 -1.999123e-01 0.156736193 0.0162678540 0.056809166 -0.253667341
## 2018-12-31 -1.240885e-01 -0.143100857 -0.0552431428 -0.049469773 -0.202283382
## 2019-01-31 5.368668e-02 0.279386699 0.0750917804 0.004040478 0.073974259
## 2019-02-28 4.380295e-02 -0.036716646 0.0031748651 0.123157658 0.071593764
## 2019-03-29 9.260247e-02 0.081186244 0.0465716243 0.013876406 0.151870020
## 2019-04-30 5.490115e-02 0.079439632 0.0128463578 -0.050803468 0.007987706
## 2019-05-31 -1.326324e-01 -0.007994204 -0.0740704060 -0.141405891 -0.288679961
## 2019-06-28 1.226770e-01 0.102547402 -0.0208014640 0.083390790 0.192591197
## 2019-07-31 7.361692e-02 0.002630713 0.1183224942 0.054473874 0.026972979
## 2019-08-30 -1.659795e-02 0.032312988 -0.0237704414 -0.057400564 -0.006207922
## 2019-09-30 7.042244e-02 -0.081448072 0.0256755038 0.083330803 0.038414001
## 2019-10-31 1.049765e-01 0.157348653 0.0331681100 0.092607456 0.143947125
## 2019-11-29 7.469386e-02 0.143100874 0.0349734427 0.032021665 0.076031804
## 2019-12-31 9.420400e-02 0.158192829 0.0242707879 0.030536784 0.082162730
## 2020-01-31 5.260166e-02 0.024554311 0.0701848929 0.065947220 0.004790944
## 2020-02-28 -1.218303e-01 -0.032874943 -0.0684586298 -0.136132889 0.133626995
## 2020-03-31 -7.231413e-02 0.000000000 -0.1413300093 -0.025539405 -0.024248630
## 2020-04-30 1.444238e-01 0.141443063 0.1482721074 0.102807242 0.103279489
## 2020-05-29 8.166687e-02 0.026557731 0.0578073650 0.053644676 0.194462068
## 2020-06-30 1.374866e-01 -0.022367226 -0.0107722179 -0.050515720 0.068216210
## 2020-07-31 1.528341e-01 0.386468079 0.0478934005 -0.225946970 0.111189689
## 2020-08-31 1.960349e-01 0.159505216 0.0971010982 0.072053228 0.231105455
## 2020-09-30 -1.081717e-01 -0.102282260 -0.1061508709 0.016158880 0.011895712
## 2020-10-30 -6.188804e-02 -0.085249927 0.0980590834 -0.156470648 -0.076501459
## 2020-11-30 9.120451e-02 0.207589583 0.0826847480 0.095180124 0.066921655
## 2020-12-31 1.084722e-01 -0.010305505 -0.0050446216 0.029950574 -0.025900148
## 2021-01-29 -5.516871e-03 -0.068478958 0.0467581267 0.108146388 -0.005010612
## 2021-02-26 -8.306882e-02 -0.013282561 0.1039617314 0.096749347 0.054293237
## 2021-03-31 7.312911e-03 -0.073771271 0.0154771604 0.051622229 -0.026723134
## 2021-04-30 7.345293e-02 0.038975739 0.1527899045 -0.106576487 0.117297791
## 2021-05-28 -5.181677e-02 -0.019048206 0.0005974250 -0.001012141 0.079071238
## 2021-06-30 9.450016e-02 0.159523669 0.0385416519 -0.017305606 0.208332035
## 2021-07-30 6.295830e-02 0.122680138 0.0760718346 -0.044063193 -0.025494261
## 2021-08-31 4.161137e-02 0.041774537 0.0730045198 0.012786314 0.138204289
## 2021-09-30 -7.046171e-02 -0.073246845 -0.0875715395 -0.014533399 -0.077484551
## 2021-10-29 5.700144e-02 0.155648945 0.1066948649 -0.083740660 0.210395738
## 2021-11-30 9.991913e-02 0.275527434 -0.0400332042 0.011003317 0.245338388
## 2021-12-31 7.160309e-02 -0.095815465 0.0155159766 0.045688233 -0.105149637
## 2022-01-31 -1.583689e-02 -0.230729542 -0.0640854435 -0.053441766 -0.183267111
## 2022-02-28 -5.558241e-02 0.076555710 -0.0059683911 -0.015619866 -0.004133430
## 2022-03-31 5.588255e-02 -0.120482480 0.0346685444 0.038252643 0.112575914
## 2022-04-29 -1.021777e-01 -0.245712033 -0.1944949638 -0.128356434 -0.386065635
## 2022-05-31 -5.603732e-02 0.174849100 -0.0081002558 0.026735898 0.006717041
## 2022-06-30 -8.493685e-02 -0.286700804 -0.0417810722 -0.171751920 -0.208219297
## 2022-07-29 1.728047e-01 0.211383814 0.0643327736 -0.029844736 0.180792160
## 2022-08-31 -3.170562e-02 -0.107161630 -0.0663691728 -0.118815533 -0.185089265
## 2022-09-30 -1.289442e-01 -0.292287949 -0.1268135622 -0.214021779 -0.217576729
## 2022-10-31 1.039558e-01 -0.053488672 -0.0156179604 0.098233898 0.106044003
## 2022-11-30 -3.358512e-02 0.256609830 0.0692745722 0.069498627 0.226461886
## 2022-12-30 -1.304193e-01 -0.181111434 -0.1339679747 -0.129028290 -0.146693626
## 2023-01-31 1.048294e-01 0.148643655 0.1182712812 0.066947619 0.290330385
## 2023-02-28 2.291841e-02 0.044631101 -0.1007318653 -0.113264002 0.172531281
## 2023-03-31 1.121214e-01 0.220952299 0.1412534063 0.270385077 0.179536630
## 2023-04-28 2.857513e-02 -0.092284450 0.0397753062 -0.050536267 -0.001008544
## 2023-05-31 4.502909e-02 0.279677610 0.1310217643 0.016246810 0.310008260
## 2023-06-30 9.014236e-02 -0.037054001 -0.0196454416 0.061671648 0.111729726
## 2023-07-31 1.270441e-02 0.004292397 0.0956332795 0.067356945 0.099530518
## 2023-08-31 -4.330819e-02 -0.078906991 0.0313565693 -0.014178264 0.054674107
## 2023-09-29 -9.285950e-02 -0.027814218 -0.0408675029 0.011599962 -0.126218633
## 2023-10-31 -2.573206e-03 -0.042923335 -0.0509540273 0.026372089 -0.064546188
## 2023-11-30 1.077599e-01 0.207055468 0.0665317006 0.205944141 0.137050155
## 2023-12-29 1.349106e-02 0.196105829 0.0510207183 0.117037006 0.057263031
## 2024-01-31 -4.314466e-02 0.128899206 0.0061543397 -0.153951576 0.217059116
## 2024-02-29 -1.871719e-02 0.138134928 -0.0143479204 0.002230120 0.251388401
## 2024-03-28 -5.264836e-02 -0.064576574 0.0855198700 0.025683568 0.132939782
## 2024-04-30 -6.728849e-03 -0.130678165 0.0781716797 -0.371303188 -0.044746618
## 2024-05-31 1.224143e-01 0.052397554 0.0550640990 0.016447718 0.238127666
## 2024-06-28 9.125897e-02 -0.028502961 0.0540905131 0.003882183 0.119508665
## 2024-07-31 5.298220e-02 -0.115750773 -0.0576203452 -0.007454249 -0.054220172
## 2024-08-30 3.184114e-02 0.027847841 -0.0475462855 -0.326382133 0.019883127
## 2024-09-30 1.731646e-02 0.099365224 0.0138344637 0.062437778 0.017277918
## 2024-10-31 -3.090179e-02 -0.130054782 0.0323671889 -0.086314048 0.089122612
## 2024-11-19 1.153584e-02 -0.033023588 0.0391227076 0.117369908 0.101957629
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 may vary with those of other assets withing 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 AMD GOOG INTC NVDA
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.184 0.435 0.115 0.137 0.129
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 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?
AMD is the the largest contributor to the portfolio volatility, AMD makes up around 45% of the portfolio. The next closest is AAPL with around 17%. I would say that the portfolio is heavily concentrated in AMD and it would be wise to diversify the portfolio more.