# Load packages
# Load packages
# Core
library(tidyverse)
library(tidyquant)
library(readr)
# Time series
library(lubridate)
library(tibbletime)
# modeling
library(broom)
Examine how each asset contributes to portfolio standard deviation. This is to ensure that our risk is not concentrated in any one asset.
Choose your stocks from 2012-12-31 to present.
symbols <- c("NVDA", "WMT", "GOOG", "AAPL", "AMZN")
prices <- tq_get(x = symbols,
get = "stock.prices",
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 AMZN GOOG NVDA WMT
## 2013-01-31 -1.555893e-01 0.0566799395 0.0660632586 0.000000000 0.0248962168
## 2013-02-28 -2.561140e-02 -0.0046435024 0.0584794367 0.038222120 0.0117956058
## 2013-03-28 2.850694e-03 0.0083654162 -0.0087879622 0.013338504 0.0620735396
## 2013-04-30 2.712089e-04 -0.0487507497 0.0375394155 0.070705912 0.0378937598
## 2013-05-31 2.217140e-02 0.0588686246 0.0550324684 0.054652070 -0.0317798579
## 2013-06-28 -1.258957e-01 0.0310507506 0.0104477177 -0.030166835 -0.0046881535
## 2013-07-31 1.321023e-01 0.0813355350 0.0083479130 0.028091422 0.0452743948
## 2013-08-30 8.044301e-02 -0.0695574090 -0.0471075578 0.026270861 -0.0596998497
## 2013-09-30 -2.172366e-02 0.1067688897 0.0336806414 0.053460153 0.0133394429
## 2013-10-31 9.201546e-02 0.1521839116 0.1626137511 -0.024066004 0.0370285962
## 2013-11-29 6.770824e-02 0.0781496860 0.0277602965 0.032034482 0.0540191949
## 2013-12-31 8.861882e-03 0.0130490386 0.0560803550 0.026566918 -0.0232519252
## 2014-01-31 -1.139489e-01 -0.1059765119 0.0523737443 -0.020177211 -0.0523039124
## 2014-02-28 5.591787e-02 0.0094619003 0.0289427889 0.162107756 0.0002678933
## 2014-03-31 1.975654e-02 -0.0737086161 -0.0863761431 -0.025904064 0.0293256967
## 2014-04-30 9.476142e-02 -0.1007565303 -0.0559561430 0.030788586 0.0420197899
## 2014-05-30 7.576503e-02 0.0273091844 0.0611852061 0.032886358 -0.0314089103
## 2014-06-30 2.728629e-02 0.0383836202 0.0271165165 -0.024508257 -0.0223932503
## 2014-07-31 2.832645e-02 -0.0369768154 -0.0064175546 -0.057729900 -0.0200474185
## 2014-08-29 7.465131e-02 0.0799468404 0.0000000000 0.110060179 0.0323257367
## 2014-09-30 -1.722053e-02 -0.0502010184 0.0100265681 -0.052782835 0.0127660411
## 2014-10-31 6.948925e-02 -0.0540982347 -0.0321733827 0.057399308 -0.0026185588
## 2014-11-28 1.007303e-01 0.1031187277 -0.0313402397 0.074852208 0.1378157726
## 2014-12-31 -7.460594e-02 -0.0872368614 -0.0288909542 -0.044863451 -0.0135738377
## 2015-01-30 5.961145e-02 0.1330922557 0.0153077624 -0.043319070 -0.0105348532
## 2015-02-27 9.601619e-02 0.0697992426 0.0437064372 0.142698940 -0.0124329003
## 2015-03-31 -3.187470e-02 -0.0214295755 -0.0188003170 -0.052582503 -0.0142311748
## 2015-04-30 5.769910e-03 0.1253212736 -0.0169024509 0.058908761 -0.0524138927
## 2015-05-29 4.434146e-02 0.0175090293 -0.0097808463 0.001460428 -0.0433516287
## 2015-06-30 -3.793841e-02 0.0112589814 -0.0220411287 -0.095717445 -0.0460132900
## 2015-07-31 -3.348072e-02 0.2111621090 0.1839180810 -0.007988114 0.0146946154
## 2015-08-31 -6.848906e-02 -0.0443525782 -0.0118342473 0.123595579 -0.0993579597
## 2015-09-30 -2.205771e-02 -0.0019516837 -0.0160275192 0.092151037 0.0016976104
## 2015-10-30 8.011234e-02 0.2010808743 0.1555397941 0.140555370 -0.1246695070
## 2015-11-30 -5.821401e-03 0.0602956777 0.0437523642 0.115404974 0.0275686631
## 2015-12-31 -1.167902e-01 0.0165440008 0.0216861739 0.038347250 0.0492992595
## 2016-01-29 -7.822342e-02 -0.1410054620 -0.0212149969 -0.118048437 0.0793147120
## 2016-02-29 -1.288435e-03 -0.0605352209 -0.0627391508 0.071923701 -0.0003016804
## 2016-03-31 1.197463e-01 0.0717834363 0.0654275894 0.127654654 0.0392708212
## 2016-04-29 -1.507311e-01 0.1053453760 -0.0722726482 -0.002810493 -0.0239374458
## 2016-05-31 6.931398e-02 0.0915002899 0.0598050631 0.276388669 0.0641207582
## 2016-06-30 -4.359626e-02 -0.0099694639 -0.0611192226 0.006187796 0.0311572078
## 2016-07-29 8.623532e-02 0.0586021229 0.1050874397 0.194443523 -0.0006849941
## 2016-08-31 2.337661e-02 0.0135476418 -0.0022657966 0.073469238 -0.0143680021
## 2016-09-30 6.344805e-02 0.0848953908 0.0132614319 0.110693590 0.0094735830
## 2016-10-31 4.325076e-03 -0.0583893058 0.0092841065 0.037805166 -0.0295506806
## 2016-11-30 -2.183764e-02 -0.0509721927 -0.0343614160 0.260525638 0.0058383964
## 2016-12-30 4.684072e-02 -0.0009330556 0.0180152337 0.146435672 -0.0116432511
## 2017-01-31 4.664156e-02 0.0936394059 0.0318397939 0.022601815 -0.0350402978
## 2017-02-28 1.255557e-01 0.0258446800 0.0326201874 -0.071875004 0.0608894352
## 2017-03-31 4.754108e-02 0.0479423007 0.0076841239 0.070843930 0.0234088442
## 2017-04-28 -6.977478e-05 0.0424566944 0.0880996386 -0.043434291 0.0421087994
## 2017-05-31 6.560766e-02 0.0725778018 0.0629878767 0.326022403 0.0511561772
## 2017-06-30 -5.891584e-02 -0.0271286156 -0.0599350111 0.001453652 -0.0378578449
## 2017-07-31 3.218045e-02 0.0202278808 0.0236740807 0.117044754 0.0553879431
## 2017-08-31 1.016530e-01 -0.0072953953 0.0094447756 0.042639643 -0.0180254918
## 2017-09-29 -6.213515e-02 -0.0198260355 0.0208389738 0.053600873 0.0008960302
## 2017-10-31 9.240402e-02 0.1395154056 0.0582525835 0.145700376 0.1109631735
## 2017-11-30 2.007536e-02 0.0626577318 0.0046809400 -0.029244659 0.1076142271
## 2017-12-29 -1.536389e-02 -0.0062057845 0.0241716390 -0.036583415 0.0207686265
## 2018-01-31 -1.069325e-02 0.2156265497 0.1115967900 0.239240425 0.0764918362
## 2018-02-28 6.596114e-02 0.0415536279 -0.0573515298 -0.014958941 -0.1691627134
## 2018-03-29 -5.980388e-02 -0.0440034760 -0.0683057993 -0.043969299 -0.0056772594
## 2018-04-30 -1.513379e-02 0.0788803060 -0.0141136248 -0.029312706 -0.0057487508
## 2018-05-31 1.267419e-01 0.0397392430 0.0643892525 0.115144994 -0.0629873580
## 2018-06-29 -9.462655e-03 0.0421636787 0.0278664064 -0.062544363 0.0369861571
## 2018-07-31 2.759863e-02 0.0446635734 0.0871652441 0.033048279 0.0409483750
## 2018-08-31 1.826735e-01 0.1243079079 0.0007637297 0.137075562 0.0774626366
## 2018-09-28 -8.337669e-03 -0.0048359814 -0.0205011057 0.001210483 -0.0205518197
## 2018-10-31 -3.095166e-02 -0.2258869989 -0.1028992086 -0.287373770 0.0656292062
## 2018-11-30 -1.999122e-01 0.0560700324 0.0162678540 -0.253667185 -0.0265762865
## 2018-12-31 -1.240889e-01 -0.1180514843 -0.0552431428 -0.202283265 -0.0417365402
## 2019-01-31 5.368670e-02 0.1348080312 0.0750918489 0.073974193 0.0283646139
## 2019-02-28 4.380306e-02 -0.0469930640 0.0031747966 0.071593830 0.0324429588
## 2019-03-29 9.260240e-02 0.0824420184 0.0465715591 0.151869806 -0.0094924230
## 2019-04-30 5.490125e-02 0.0786806224 0.0128464230 0.007987920 0.0530144580
## 2019-05-31 -1.326323e-01 -0.0818753491 -0.0740704753 -0.288680103 -0.0084087282
## 2019-06-28 1.226771e-01 0.0646557767 -0.0208013947 0.192591572 0.0854574889
## 2019-07-31 7.361706e-02 -0.0142806686 0.1183224942 0.026972518 -0.0009964164
## 2019-08-30 -1.659825e-02 -0.0496880810 -0.0237704414 -0.006208037 0.0394583480
## 2019-09-30 7.042265e-02 -0.0229951159 0.0256755038 0.038414564 0.0379542679
## 2019-10-31 1.049764e-01 0.0232034080 0.0331681707 0.143946905 -0.0120372427
## 2019-11-29 7.469385e-02 0.0134958216 0.0349733820 0.076031451 0.0154856317
## 2019-12-31 9.420378e-02 0.0257863501 0.0242707879 0.082162920 0.0023741933
## 2020-01-31 5.260187e-02 0.0834803026 0.0701848929 0.004791025 -0.0372904658
## 2020-02-28 -1.218305e-01 -0.0642332026 -0.0684586298 0.133626792 -0.0613239258
## 2020-03-31 -7.231396e-02 0.0344213022 -0.1413300093 -0.024248274 0.0581107980
## 2020-04-30 1.444238e-01 0.2381504762 0.1482719939 0.103279417 0.0674663177
## 2020-05-29 8.166666e-02 -0.0128673719 0.0578074784 0.194461744 0.0248289872
## 2020-06-30 1.374867e-01 0.1218341331 -0.0107722179 0.068216635 -0.0351088209
## 2020-07-31 1.528341e-01 0.1372488933 0.0478934005 0.111189768 0.0772515271
## 2020-08-31 1.960348e-01 0.0866005735 0.0971010982 0.231105347 0.0745886119
## 2020-09-30 -1.081715e-01 -0.0916533253 -0.1061509749 0.011895570 0.0076051284
## 2020-10-30 -6.188818e-02 -0.0364089187 0.0980591875 -0.076501388 -0.0083255549
## 2020-11-30 9.120458e-02 0.0425228214 0.0826847480 0.066921655 0.0963905535
## 2020-12-31 1.084721e-01 0.0276719582 -0.0050447089 -0.025900001 -0.0545612688
## 2021-01-29 -5.516635e-03 -0.0156985929 0.0467582140 -0.005010758 -0.0257179769
## 2021-02-26 -8.306887e-02 -0.0359675607 0.1039617314 0.054293167 -0.0782177280
## 2021-03-31 7.312910e-03 0.0003717151 0.0154771604 -0.026723279 0.0486519211
## 2021-04-30 7.345286e-02 0.1139202399 0.1527899045 0.117297942 0.0295951900
## 2021-05-28 -5.181684e-02 -0.0730764715 0.0005973616 0.079070949 0.0189585343
## 2021-06-30 9.449999e-02 0.0651836137 0.0385416543 0.208332102 -0.0071365607
## 2021-07-30 6.295842e-02 -0.0332696301 0.0760718956 -0.025493877 0.0107911374
## 2021-08-31 4.161158e-02 0.0421339363 0.0730045198 0.138204106 0.0418677795
## 2021-09-30 -7.046171e-02 -0.0550034409 -0.0875715395 -0.077484743 -0.0606836171
## 2021-10-29 5.700122e-02 0.0262547651 0.1066949681 0.210396015 0.0695571816
## 2021-11-30 9.991933e-02 0.0391473463 -0.0400333073 0.245338505 -0.0606288156
## 2021-12-31 7.160282e-02 -0.0505062029 0.0155159766 -0.105149624 0.0324795417
## 2022-01-31 -1.583690e-02 -0.1085098142 -0.0640854435 -0.183267241 -0.0343094247
## 2022-02-28 -5.558233e-02 0.0263230079 -0.0059685045 -0.004133273 -0.0338249542
## 2022-03-31 5.588247e-02 0.0596239190 0.0346686578 0.112575897 0.1008102547
## 2022-04-29 -1.021775e-01 -0.2711856801 -0.1944949638 -0.386065775 0.0269631560
## 2022-05-31 -5.603732e-02 -0.0333130879 -0.0081002558 0.006717245 -0.1698039395
## 2022-06-30 -8.493673e-02 -0.1238178226 -0.0417810023 -0.208219376 -0.0563675846
## 2022-07-29 1.728045e-01 0.2394860591 0.0643327037 0.180791929 0.0826081279
## 2022-08-31 -3.170543e-02 -0.0625299224 -0.0663691027 -0.185089160 0.0081251861
## 2022-09-30 -1.289444e-01 -0.1149865758 -0.1268136323 -0.217576886 -0.0217359545
## 2022-10-31 1.039559e-01 -0.0981105335 -0.0156178797 0.106044018 0.0929241833
## 2022-11-30 -3.358532e-02 -0.0593198454 0.0692744160 0.226462028 0.0684914841
## 2022-12-30 -1.304191e-01 -0.1391406409 -0.1339678993 -0.146693561 -0.0685298754
## 2023-01-31 1.048292e-01 0.2051735029 0.1182712047 0.290330125 0.0145630113
## 2023-02-28 2.291852e-02 -0.0902516639 -0.1007318734 0.172531559 -0.0121680333
## 2023-03-31 1.121214e-01 0.0918019370 0.1412534910 0.179536548 0.0408372088
## 2023-04-28 2.857495e-02 0.0206963031 0.0397752355 -0.001008544 0.0235919310
## 2023-05-31 4.502928e-02 0.1340765703 0.1310218349 0.310008260 -0.0237415484
## 2023-06-30 9.014221e-02 0.0779864104 -0.0196454416 0.111729726 0.0678437059
## 2023-07-31 1.270449e-02 0.0251489708 0.0956332795 0.099530518 0.0169068382
## 2023-08-31 -4.330819e-02 0.0318772770 0.0313565693 0.054674262 0.0206048836
## 2023-09-29 -9.285932e-02 -0.0821945627 -0.0408675029 -0.126218876 -0.0166184904
## 2023-10-31 -2.573206e-03 0.0458940197 -0.0509540273 -0.064546100 0.0215261056
## 2023-11-30 1.077597e-01 0.0931972815 0.0665317006 0.137050237 -0.0483955454
## 2023-12-29 1.349114e-02 0.0392628771 0.0510207183 0.057262949 0.0162177594
## 2024-01-31 -4.314466e-02 0.0212288659 0.0061543397 0.217059054 0.0470820679
## 2024-02-29 -1.871727e-02 0.1300782611 -0.0143479204 0.251388463 0.0620581657
## 2024-03-28 -5.264818e-02 0.0202729146 0.0855198700 0.132939782 0.0296685688
## 2024-04-30 -6.728849e-03 -0.0302797899 0.0781716797 -0.044746618 -0.0137217860
## 2024-05-31 1.224142e-01 0.0081949152 0.0550640990 0.238127666 0.1060150534
## 2024-06-28 9.125897e-02 0.0910037984 0.0540905131 0.119508665 0.0292221364
## 2024-07-31 5.298220e-02 -0.0329830511 -0.0576203452 -0.054220172 0.0136415209
## 2024-08-30 3.184114e-02 -0.0464130352 -0.0475462855 0.019883127 0.1207589765
## 2024-09-30 1.731646e-02 0.0429307038 0.0138344637 0.017277918 0.0445699361
## 2024-10-31 -3.090179e-02 0.0003755644 0.0323671889 0.089122612 0.0147513058
## 2024-11-19 1.153584e-02 0.0932108617 0.0391227076 0.101957629 0.0551905300
# Covariance of asset returns
covariance_matrix <- cov(asset_returns_wide_tbl)
covariance_matrix
## AAPL AMZN GOOG NVDA WMT
## AAPL 0.006084879 0.0032624087 0.0020724227 0.005064270 0.0011758124
## AMZN 0.003262409 0.0071603669 0.0034772759 0.005623296 0.0008307755
## GOOG 0.002072423 0.0034772759 0.0042259003 0.003930480 0.0005041197
## NVDA 0.005064270 0.0056232960 0.0039304802 0.014924338 0.0013831181
## WMT 0.001175812 0.0008307755 0.0005041197 0.001383118 0.0026338258
# 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.06435807
# Component contribution
# Similar to the formula for sd_portfolio
# Mathematical trick to summarize the same, sd_portfolio, by asset instead of a single number
component_contribution <- (t(w) %*% covariance_matrix * w) / sd_portfolio[1,1]
component_contribution
## AAPL AMZN GOOG NVDA WMT
## [1,] 0.01507869 0.01751484 0.009537616 0.02045172 0.001775189
rowSums(component_contribution)
## [1] 0.06435807
# Component contribution in percentage
component_percentages <- (component_contribution / sd_portfolio[1,1]) %>%
round(3) %>%
as_tibble()
component_percentages
## # A tibble: 1 × 5
## AAPL AMZN GOOG NVDA WMT
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.234 0.272 0.148 0.318 0.028
component_percentages %>%
as_tibble() %>%
gather(key = "asset", value = "contribution")
## # A tibble: 5 × 2
## asset contribution
## <chr> <dbl>
## 1 AAPL 0.234
## 2 AMZN 0.272
## 3 GOOG 0.148
## 4 NVDA 0.318
## 5 WMT 0.028
# Transform data into wide form
asset_returns_wide_tbl <- asset_returns_tbl %>%
pivot_wider(names_from = asset, values_from = returns) %>%
column_to_rownames(var = "date")
asset_returns_wide_tbl
## AAPL AMZN GOOG NVDA WMT
## 2013-01-31 -1.555893e-01 0.0566799395 0.0660632586 0.000000000 0.0248962168
## 2013-02-28 -2.561140e-02 -0.0046435024 0.0584794367 0.038222120 0.0117956058
## 2013-03-28 2.850694e-03 0.0083654162 -0.0087879622 0.013338504 0.0620735396
## 2013-04-30 2.712089e-04 -0.0487507497 0.0375394155 0.070705912 0.0378937598
## 2013-05-31 2.217140e-02 0.0588686246 0.0550324684 0.054652070 -0.0317798579
## 2013-06-28 -1.258957e-01 0.0310507506 0.0104477177 -0.030166835 -0.0046881535
## 2013-07-31 1.321023e-01 0.0813355350 0.0083479130 0.028091422 0.0452743948
## 2013-08-30 8.044301e-02 -0.0695574090 -0.0471075578 0.026270861 -0.0596998497
## 2013-09-30 -2.172366e-02 0.1067688897 0.0336806414 0.053460153 0.0133394429
## 2013-10-31 9.201546e-02 0.1521839116 0.1626137511 -0.024066004 0.0370285962
## 2013-11-29 6.770824e-02 0.0781496860 0.0277602965 0.032034482 0.0540191949
## 2013-12-31 8.861882e-03 0.0130490386 0.0560803550 0.026566918 -0.0232519252
## 2014-01-31 -1.139489e-01 -0.1059765119 0.0523737443 -0.020177211 -0.0523039124
## 2014-02-28 5.591787e-02 0.0094619003 0.0289427889 0.162107756 0.0002678933
## 2014-03-31 1.975654e-02 -0.0737086161 -0.0863761431 -0.025904064 0.0293256967
## 2014-04-30 9.476142e-02 -0.1007565303 -0.0559561430 0.030788586 0.0420197899
## 2014-05-30 7.576503e-02 0.0273091844 0.0611852061 0.032886358 -0.0314089103
## 2014-06-30 2.728629e-02 0.0383836202 0.0271165165 -0.024508257 -0.0223932503
## 2014-07-31 2.832645e-02 -0.0369768154 -0.0064175546 -0.057729900 -0.0200474185
## 2014-08-29 7.465131e-02 0.0799468404 0.0000000000 0.110060179 0.0323257367
## 2014-09-30 -1.722053e-02 -0.0502010184 0.0100265681 -0.052782835 0.0127660411
## 2014-10-31 6.948925e-02 -0.0540982347 -0.0321733827 0.057399308 -0.0026185588
## 2014-11-28 1.007303e-01 0.1031187277 -0.0313402397 0.074852208 0.1378157726
## 2014-12-31 -7.460594e-02 -0.0872368614 -0.0288909542 -0.044863451 -0.0135738377
## 2015-01-30 5.961145e-02 0.1330922557 0.0153077624 -0.043319070 -0.0105348532
## 2015-02-27 9.601619e-02 0.0697992426 0.0437064372 0.142698940 -0.0124329003
## 2015-03-31 -3.187470e-02 -0.0214295755 -0.0188003170 -0.052582503 -0.0142311748
## 2015-04-30 5.769910e-03 0.1253212736 -0.0169024509 0.058908761 -0.0524138927
## 2015-05-29 4.434146e-02 0.0175090293 -0.0097808463 0.001460428 -0.0433516287
## 2015-06-30 -3.793841e-02 0.0112589814 -0.0220411287 -0.095717445 -0.0460132900
## 2015-07-31 -3.348072e-02 0.2111621090 0.1839180810 -0.007988114 0.0146946154
## 2015-08-31 -6.848906e-02 -0.0443525782 -0.0118342473 0.123595579 -0.0993579597
## 2015-09-30 -2.205771e-02 -0.0019516837 -0.0160275192 0.092151037 0.0016976104
## 2015-10-30 8.011234e-02 0.2010808743 0.1555397941 0.140555370 -0.1246695070
## 2015-11-30 -5.821401e-03 0.0602956777 0.0437523642 0.115404974 0.0275686631
## 2015-12-31 -1.167902e-01 0.0165440008 0.0216861739 0.038347250 0.0492992595
## 2016-01-29 -7.822342e-02 -0.1410054620 -0.0212149969 -0.118048437 0.0793147120
## 2016-02-29 -1.288435e-03 -0.0605352209 -0.0627391508 0.071923701 -0.0003016804
## 2016-03-31 1.197463e-01 0.0717834363 0.0654275894 0.127654654 0.0392708212
## 2016-04-29 -1.507311e-01 0.1053453760 -0.0722726482 -0.002810493 -0.0239374458
## 2016-05-31 6.931398e-02 0.0915002899 0.0598050631 0.276388669 0.0641207582
## 2016-06-30 -4.359626e-02 -0.0099694639 -0.0611192226 0.006187796 0.0311572078
## 2016-07-29 8.623532e-02 0.0586021229 0.1050874397 0.194443523 -0.0006849941
## 2016-08-31 2.337661e-02 0.0135476418 -0.0022657966 0.073469238 -0.0143680021
## 2016-09-30 6.344805e-02 0.0848953908 0.0132614319 0.110693590 0.0094735830
## 2016-10-31 4.325076e-03 -0.0583893058 0.0092841065 0.037805166 -0.0295506806
## 2016-11-30 -2.183764e-02 -0.0509721927 -0.0343614160 0.260525638 0.0058383964
## 2016-12-30 4.684072e-02 -0.0009330556 0.0180152337 0.146435672 -0.0116432511
## 2017-01-31 4.664156e-02 0.0936394059 0.0318397939 0.022601815 -0.0350402978
## 2017-02-28 1.255557e-01 0.0258446800 0.0326201874 -0.071875004 0.0608894352
## 2017-03-31 4.754108e-02 0.0479423007 0.0076841239 0.070843930 0.0234088442
## 2017-04-28 -6.977478e-05 0.0424566944 0.0880996386 -0.043434291 0.0421087994
## 2017-05-31 6.560766e-02 0.0725778018 0.0629878767 0.326022403 0.0511561772
## 2017-06-30 -5.891584e-02 -0.0271286156 -0.0599350111 0.001453652 -0.0378578449
## 2017-07-31 3.218045e-02 0.0202278808 0.0236740807 0.117044754 0.0553879431
## 2017-08-31 1.016530e-01 -0.0072953953 0.0094447756 0.042639643 -0.0180254918
## 2017-09-29 -6.213515e-02 -0.0198260355 0.0208389738 0.053600873 0.0008960302
## 2017-10-31 9.240402e-02 0.1395154056 0.0582525835 0.145700376 0.1109631735
## 2017-11-30 2.007536e-02 0.0626577318 0.0046809400 -0.029244659 0.1076142271
## 2017-12-29 -1.536389e-02 -0.0062057845 0.0241716390 -0.036583415 0.0207686265
## 2018-01-31 -1.069325e-02 0.2156265497 0.1115967900 0.239240425 0.0764918362
## 2018-02-28 6.596114e-02 0.0415536279 -0.0573515298 -0.014958941 -0.1691627134
## 2018-03-29 -5.980388e-02 -0.0440034760 -0.0683057993 -0.043969299 -0.0056772594
## 2018-04-30 -1.513379e-02 0.0788803060 -0.0141136248 -0.029312706 -0.0057487508
## 2018-05-31 1.267419e-01 0.0397392430 0.0643892525 0.115144994 -0.0629873580
## 2018-06-29 -9.462655e-03 0.0421636787 0.0278664064 -0.062544363 0.0369861571
## 2018-07-31 2.759863e-02 0.0446635734 0.0871652441 0.033048279 0.0409483750
## 2018-08-31 1.826735e-01 0.1243079079 0.0007637297 0.137075562 0.0774626366
## 2018-09-28 -8.337669e-03 -0.0048359814 -0.0205011057 0.001210483 -0.0205518197
## 2018-10-31 -3.095166e-02 -0.2258869989 -0.1028992086 -0.287373770 0.0656292062
## 2018-11-30 -1.999122e-01 0.0560700324 0.0162678540 -0.253667185 -0.0265762865
## 2018-12-31 -1.240889e-01 -0.1180514843 -0.0552431428 -0.202283265 -0.0417365402
## 2019-01-31 5.368670e-02 0.1348080312 0.0750918489 0.073974193 0.0283646139
## 2019-02-28 4.380306e-02 -0.0469930640 0.0031747966 0.071593830 0.0324429588
## 2019-03-29 9.260240e-02 0.0824420184 0.0465715591 0.151869806 -0.0094924230
## 2019-04-30 5.490125e-02 0.0786806224 0.0128464230 0.007987920 0.0530144580
## 2019-05-31 -1.326323e-01 -0.0818753491 -0.0740704753 -0.288680103 -0.0084087282
## 2019-06-28 1.226771e-01 0.0646557767 -0.0208013947 0.192591572 0.0854574889
## 2019-07-31 7.361706e-02 -0.0142806686 0.1183224942 0.026972518 -0.0009964164
## 2019-08-30 -1.659825e-02 -0.0496880810 -0.0237704414 -0.006208037 0.0394583480
## 2019-09-30 7.042265e-02 -0.0229951159 0.0256755038 0.038414564 0.0379542679
## 2019-10-31 1.049764e-01 0.0232034080 0.0331681707 0.143946905 -0.0120372427
## 2019-11-29 7.469385e-02 0.0134958216 0.0349733820 0.076031451 0.0154856317
## 2019-12-31 9.420378e-02 0.0257863501 0.0242707879 0.082162920 0.0023741933
## 2020-01-31 5.260187e-02 0.0834803026 0.0701848929 0.004791025 -0.0372904658
## 2020-02-28 -1.218305e-01 -0.0642332026 -0.0684586298 0.133626792 -0.0613239258
## 2020-03-31 -7.231396e-02 0.0344213022 -0.1413300093 -0.024248274 0.0581107980
## 2020-04-30 1.444238e-01 0.2381504762 0.1482719939 0.103279417 0.0674663177
## 2020-05-29 8.166666e-02 -0.0128673719 0.0578074784 0.194461744 0.0248289872
## 2020-06-30 1.374867e-01 0.1218341331 -0.0107722179 0.068216635 -0.0351088209
## 2020-07-31 1.528341e-01 0.1372488933 0.0478934005 0.111189768 0.0772515271
## 2020-08-31 1.960348e-01 0.0866005735 0.0971010982 0.231105347 0.0745886119
## 2020-09-30 -1.081715e-01 -0.0916533253 -0.1061509749 0.011895570 0.0076051284
## 2020-10-30 -6.188818e-02 -0.0364089187 0.0980591875 -0.076501388 -0.0083255549
## 2020-11-30 9.120458e-02 0.0425228214 0.0826847480 0.066921655 0.0963905535
## 2020-12-31 1.084721e-01 0.0276719582 -0.0050447089 -0.025900001 -0.0545612688
## 2021-01-29 -5.516635e-03 -0.0156985929 0.0467582140 -0.005010758 -0.0257179769
## 2021-02-26 -8.306887e-02 -0.0359675607 0.1039617314 0.054293167 -0.0782177280
## 2021-03-31 7.312910e-03 0.0003717151 0.0154771604 -0.026723279 0.0486519211
## 2021-04-30 7.345286e-02 0.1139202399 0.1527899045 0.117297942 0.0295951900
## 2021-05-28 -5.181684e-02 -0.0730764715 0.0005973616 0.079070949 0.0189585343
## 2021-06-30 9.449999e-02 0.0651836137 0.0385416543 0.208332102 -0.0071365607
## 2021-07-30 6.295842e-02 -0.0332696301 0.0760718956 -0.025493877 0.0107911374
## 2021-08-31 4.161158e-02 0.0421339363 0.0730045198 0.138204106 0.0418677795
## 2021-09-30 -7.046171e-02 -0.0550034409 -0.0875715395 -0.077484743 -0.0606836171
## 2021-10-29 5.700122e-02 0.0262547651 0.1066949681 0.210396015 0.0695571816
## 2021-11-30 9.991933e-02 0.0391473463 -0.0400333073 0.245338505 -0.0606288156
## 2021-12-31 7.160282e-02 -0.0505062029 0.0155159766 -0.105149624 0.0324795417
## 2022-01-31 -1.583690e-02 -0.1085098142 -0.0640854435 -0.183267241 -0.0343094247
## 2022-02-28 -5.558233e-02 0.0263230079 -0.0059685045 -0.004133273 -0.0338249542
## 2022-03-31 5.588247e-02 0.0596239190 0.0346686578 0.112575897 0.1008102547
## 2022-04-29 -1.021775e-01 -0.2711856801 -0.1944949638 -0.386065775 0.0269631560
## 2022-05-31 -5.603732e-02 -0.0333130879 -0.0081002558 0.006717245 -0.1698039395
## 2022-06-30 -8.493673e-02 -0.1238178226 -0.0417810023 -0.208219376 -0.0563675846
## 2022-07-29 1.728045e-01 0.2394860591 0.0643327037 0.180791929 0.0826081279
## 2022-08-31 -3.170543e-02 -0.0625299224 -0.0663691027 -0.185089160 0.0081251861
## 2022-09-30 -1.289444e-01 -0.1149865758 -0.1268136323 -0.217576886 -0.0217359545
## 2022-10-31 1.039559e-01 -0.0981105335 -0.0156178797 0.106044018 0.0929241833
## 2022-11-30 -3.358532e-02 -0.0593198454 0.0692744160 0.226462028 0.0684914841
## 2022-12-30 -1.304191e-01 -0.1391406409 -0.1339678993 -0.146693561 -0.0685298754
## 2023-01-31 1.048292e-01 0.2051735029 0.1182712047 0.290330125 0.0145630113
## 2023-02-28 2.291852e-02 -0.0902516639 -0.1007318734 0.172531559 -0.0121680333
## 2023-03-31 1.121214e-01 0.0918019370 0.1412534910 0.179536548 0.0408372088
## 2023-04-28 2.857495e-02 0.0206963031 0.0397752355 -0.001008544 0.0235919310
## 2023-05-31 4.502928e-02 0.1340765703 0.1310218349 0.310008260 -0.0237415484
## 2023-06-30 9.014221e-02 0.0779864104 -0.0196454416 0.111729726 0.0678437059
## 2023-07-31 1.270449e-02 0.0251489708 0.0956332795 0.099530518 0.0169068382
## 2023-08-31 -4.330819e-02 0.0318772770 0.0313565693 0.054674262 0.0206048836
## 2023-09-29 -9.285932e-02 -0.0821945627 -0.0408675029 -0.126218876 -0.0166184904
## 2023-10-31 -2.573206e-03 0.0458940197 -0.0509540273 -0.064546100 0.0215261056
## 2023-11-30 1.077597e-01 0.0931972815 0.0665317006 0.137050237 -0.0483955454
## 2023-12-29 1.349114e-02 0.0392628771 0.0510207183 0.057262949 0.0162177594
## 2024-01-31 -4.314466e-02 0.0212288659 0.0061543397 0.217059054 0.0470820679
## 2024-02-29 -1.871727e-02 0.1300782611 -0.0143479204 0.251388463 0.0620581657
## 2024-03-28 -5.264818e-02 0.0202729146 0.0855198700 0.132939782 0.0296685688
## 2024-04-30 -6.728849e-03 -0.0302797899 0.0781716797 -0.044746618 -0.0137217860
## 2024-05-31 1.224142e-01 0.0081949152 0.0550640990 0.238127666 0.1060150534
## 2024-06-28 9.125897e-02 0.0910037984 0.0540905131 0.119508665 0.0292221364
## 2024-07-31 5.298220e-02 -0.0329830511 -0.0576203452 -0.054220172 0.0136415209
## 2024-08-30 3.184114e-02 -0.0464130352 -0.0475462855 0.019883127 0.1207589765
## 2024-09-30 1.731646e-02 0.0429307038 0.0138344637 0.017277918 0.0445699361
## 2024-10-31 -3.090179e-02 0.0003755644 0.0323671889 0.089122612 0.0147513058
## 2024-11-19 1.153584e-02 0.0932108617 0.0391227076 0.101957629 0.0551905300
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()
component_percentages
return(component_percentages)
}
asset_returns_wide_tbl %>% calculate_component_contribution(w = c(.25, .25, .2, .2, .1 ))
## # A tibble: 1 × 5
## AAPL AMZN GOOG NVDA WMT
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.234 0.272 0.148 0.318 0.028
plot_data <- asset_returns_wide_tbl %>%
calculate_component_contribution(w = c(.1, .2, .2, .2, .3)) %>%
# Tranform to long form
pivot_longer(cols = everything() ,names_to = "Asset", values_to = "Contribution") %>%
# Add weights
add_column(weight = c(.1, .2, .2, .3, .3)) %>%
# 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 = .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?
NVDA is the largest contributior to colatility, this makes since since its had very large losses and returns. Most of my risk is in NVDA but it shares smaller ammounts with AMZN and GOOG.