#pacman::p_load(tidyverse, lubridate, tidyquant, readxl, writexl)
library(tidyquant)
## Loading required package: lubridate
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
## Loading required package: PerformanceAnalytics
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## ################################### WARNING ###################################
## # We noticed you have dplyr installed. The dplyr lag() function breaks how #
## # base R's lag() function is supposed to work, which breaks lag(my_xts). #
## # #
## # If you call library(dplyr) later in this session, then calls to lag(my_xts) #
## # that you enter or source() into this session won't work correctly. #
## # #
## # All package code is unaffected because it is protected by the R namespace #
## # mechanism. #
## # #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## # You can use stats::lag() to make sure you're not using dplyr::lag(), or you #
## # can add conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
## # dplyr from breaking base R's lag() function. #
## ################################### WARNING ###################################
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
## Loading required package: quantmod
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(lubridate)
library(timetk)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.1 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ purrr 1.0.1 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::first() masks xts::first()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::last() masks xts::last()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(fPortfolio)
## Loading required package: timeDate
##
## Attaching package: 'timeDate'
##
## The following objects are masked from 'package:PerformanceAnalytics':
##
## kurtosis, skewness
##
## Loading required package: timeSeries
##
## Attaching package: 'timeSeries'
##
## The following object is masked from 'package:zoo':
##
## time<-
##
## Loading required package: fBasics
##
## Attaching package: 'fBasics'
##
## The following object is masked from 'package:TTR':
##
## volatility
##
## The following objects are masked from 'package:PerformanceAnalytics':
##
## kurtosis, skewness
##
## Loading required package: fAssets
symbols <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
portfolioPrices <- NULL
# symbol = "SPY"
for (symbol in symbols){
portfolioPrices <- cbind(portfolioPrices,
getSymbols.yahoo(symbol, from = '2018-01-01', to = '2022-12-31', auto.assign = FALSE)[, 6])
}
portfolioPrices
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-02 245.82841 152.88680 43.05478 143.94118 61.24228
## 2018-01-03 247.38338 154.37233 43.46731 144.09079 61.53625
## 2018-01-04 248.42601 154.64243 43.68254 144.47430 62.21067
## 2018-01-05 250.08156 156.19551 44.05919 144.77357 62.55651
## 2018-01-08 250.53885 156.80328 44.05919 144.99805 62.53922
## 2018-01-09 251.10593 156.81288 43.98744 144.80161 62.60839
## 2018-01-10 250.72171 156.44632 43.70944 144.82033 62.48734
## 2018-01-11 252.55103 157.51707 43.97848 147.30824 62.91965
## 2018-01-12 254.19743 158.67468 44.39996 147.92549 63.55086
## 2018-01-16 253.32855 158.22133 44.22957 146.03622 63.49033
## ...
## 2022-12-16 381.81281 273.17209 37.83000 173.72896 65.42000
## 2022-12-19 378.57516 269.33304 37.86000 171.37764 65.26000
## 2022-12-20 379.09320 269.12338 37.85000 172.28429 65.52000
## 2022-12-21 384.76157 273.02734 38.19000 175.25333 66.20000
## 2022-12-22 379.27249 266.34769 37.85000 172.96181 65.66000
## 2022-12-23 381.45419 266.94672 37.80000 173.74889 65.89000
## 2022-12-27 379.94992 263.17258 38.36000 172.58319 65.99000
## 2022-12-28 375.22794 259.69797 37.80000 169.90308 65.29000
## 2022-12-29 381.98218 266.02817 38.43000 174.20720 66.32000
## 2022-12-30 380.97598 265.86841 37.90000 173.71899 65.64000
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-02 112.31091 69.33669 125.15000
## 2018-01-03 112.84786 69.22485 124.82000
## 2018-01-04 112.82999 68.14093 125.46000
## 2018-01-05 112.50779 68.20976 125.33000
## 2018-01-08 112.43617 68.59686 125.31000
## 2018-01-09 110.93264 67.80542 124.73000
## 2018-01-10 110.79839 66.97959 125.03000
## 2018-01-11 111.25481 66.74732 125.44000
## 2018-01-12 111.44277 66.20536 126.96000
## 2018-01-16 111.90816 66.38602 127.17000
## ...
## 2022-12-16 106.30305 84.04142 166.78999
## 2022-12-19 104.51660 83.04708 166.32001
## 2022-12-20 102.66070 82.81839 169.08000
## 2022-12-21 102.91873 83.67352 168.80000
## 2022-12-22 102.89888 83.33544 166.75999
## 2022-12-23 101.39034 84.05137 167.25999
## 2022-12-27 99.38555 83.99171 168.67000
## 2022-12-28 98.80000 82.56981 167.91000
## 2022-12-29 99.92149 84.40933 168.85001
## 2022-12-30 98.80993 83.71329 169.64000
# 2. Calculate weekly and monthly returns using log returns
prices_weekly <- to.weekly(portfolioPrices, indexAt = "last", OHLC = FALSE)
prices_monthly <- to.monthly(portfolioPrices, indexAt = "last", OHLC = FALSE)
#
asset_returns_day_xts <- na.omit(Return.calculate(portfolioPrices))
asset_returns_wk_xts <- na.omit(Return.calculate(prices_weekly))
asset_returns_mon_xts <- na.omit(Return.calculate(prices_monthly))
head(asset_returns_day_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-03 0.006325396 9.716566e-03 0.009581402 0.0010393998 0.0048002731
## 2018-01-04 0.004214645 1.749639e-03 0.004951603 0.0026616164 0.0109595843
## 2018-01-05 0.006664150 1.004307e-02 0.008622304 0.0020714454 0.0055593052
## 2018-01-08 0.001828566 3.891103e-03 0.000000000 0.0015505043 -0.0002764224
## 2018-01-09 0.002263432 6.120904e-05 -0.001628419 -0.0013547883 0.0011060564
## 2018-01-10 -0.001530097 -2.337575e-03 -0.006319897 0.0001292978 -0.0019334754
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-03 0.0047809853 -0.001612989 -0.0026368504
## 2018-01-04 -0.0001583374 -0.015658008 0.0051273786
## 2018-01-05 -0.0028556643 0.001010148 -0.0010361649
## 2018-01-08 -0.0006365526 0.005675144 -0.0001596128
## 2018-01-09 -0.0133723194 -0.011537596 -0.0046284751
## 2018-01-10 -0.0012102340 -0.012179389 0.0024051585
head(asset_returns_wk_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-12 0.016458132 0.01587223 0.007734559 0.021771352 0.015895112
## 2018-01-19 0.008959737 0.01124667 0.018784049 0.002782212 0.008571338
## 2018-01-26 0.022003000 0.02759404 0.032514000 0.006304945 0.015108554
## 2018-02-02 -0.038837181 -0.03697398 -0.058179862 -0.036152968 -0.035880418
## 2018-02-09 -0.050644460 -0.05169803 -0.053618914 -0.045894723 -0.054583008
## 2018-02-16 0.044397536 0.05675850 0.067212780 0.044763771 0.041259632
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-12 -0.009466169 -0.029385855 0.013005643
## 2018-01-19 -0.011725179 0.006496676 -0.004253315
## 2018-01-26 0.004306944 0.016911981 0.013051805
## 2018-02-02 -0.030431515 -0.029325736 -0.013117887
## 2018-02-09 -0.013714491 -0.041590291 -0.012817492
## 2018-02-16 0.006528512 0.024290159 0.025567064
head(asset_returns_mon_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-02-28 -0.036360436 -0.012927913 -0.058984949 -0.038436942 -0.04834776
## 2018-03-29 -0.027410567 -0.040788171 0.005414432 0.012175380 -0.00839618
## 2018-04-30 0.005168305 0.005058043 -0.028168920 0.009813641 0.01521233
## 2018-05-31 0.024308987 0.056729480 -0.026214950 0.061636025 -0.01894244
## 2018-06-29 0.005750922 0.011450529 -0.045456771 0.006143667 -0.01584096
## 2018-07-31 0.037046423 0.027963664 0.035310232 0.016490299 0.02851995
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-02-28 -0.030414499 -0.066573351 -0.020759902
## 2018-03-29 0.028596760 0.037719056 0.006320007
## 2018-04-30 -0.020881569 0.002252501 -0.009539745
## 2018-05-31 0.020044199 0.033712155 -0.011959209
## 2018-06-29 0.006457735 0.040594955 -0.036149448
## 2018-07-31 -0.014368670 0.008314499 -0.022418910
install.packages("tseries")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(tseries)
gmvp_wk <- portfolio.optim(asset_returns_wk_xts, portfolio_method = "gmvp")
gmvp_mon <- portfolio.optim(asset_returns_mon_xts, portfolio_method = "gmvp")
head(gmvp_wk)
## $pw
## [1] 2.257075e-01 5.315535e-02 0.000000e+00 1.984894e-17 9.639827e-18
## [6] 2.790228e-01 -2.454753e-17 4.421143e-01
##
## $px
## [1] 7.667122e-03 -2.531943e-03 1.340514e-02 -2.502190e-02 -2.367232e-02
## [6] 2.616304e-02 -5.294836e-03 -6.860150e-03 9.999680e-03 -2.362102e-03
## [11] -5.583550e-03 2.715506e-03 -3.233785e-03 9.574635e-03 -6.926623e-03
## [16] -3.043441e-03 -2.077156e-03 9.470588e-03 -1.577264e-02 1.002615e-02
## [21] 1.802982e-03 4.400533e-03 -3.094363e-03 -5.628273e-03 -7.409317e-03
## [26] 8.451637e-03 -8.964856e-05 -8.514423e-03 -4.775190e-03 -9.268803e-04
## [31] 2.265151e-03 -7.808453e-03 1.373966e-02 -2.047757e-03 -8.468617e-03
## [36] 1.240820e-03 2.320126e-04 -2.721789e-03 -9.252026e-03 -1.943305e-03
## [41] 9.891382e-04 -4.838801e-03 -6.019133e-04 6.830518e-04 3.205218e-03
## [46] -9.628322e-03 1.360583e-02 5.475085e-03 -6.444840e-03 -8.152555e-03
## [51] 1.819053e-02 9.191121e-03 6.025041e-03 2.035109e-03 8.377622e-03
## [56] 1.190474e-02 2.871505e-03 8.080248e-03 3.275945e-03 -1.736004e-02
## [61] 4.546428e-03 9.762906e-03 9.229276e-03 -5.209140e-04 1.521426e-03
## [66] -2.022768e-03 -4.437783e-03 9.302065e-03 -1.770616e-03 -9.339281e-04
## [71] -2.400078e-03 2.512708e-03 8.992200e-03 2.438569e-02 1.035226e-03
## [76] 2.541022e-02 5.849389e-03 1.662048e-03 2.340452e-03 2.957480e-03
## [81] 1.672012e-03 9.538042e-03 2.369135e-02 1.443870e-02 -1.232433e-04
## [86] 8.833976e-03 -2.472520e-03 -2.065160e-02 1.821145e-02 -7.317933e-03
## [91] 9.208886e-03 -1.430638e-02 1.097793e-03 6.132775e-03 1.105996e-02
## [96] -2.455409e-02 1.105922e-02 1.947043e-03 4.715112e-03 -4.034146e-03
## [101] 8.309616e-03 1.843899e-03 1.236459e-02 1.444991e-02 5.183802e-03
## [106] 3.689058e-03 1.010635e-02 5.835721e-03 2.891295e-03 8.782234e-03
## [111] 1.990519e-02 -3.519943e-02 4.984155e-02 -8.686903e-02 -3.864193e-02
## [116] 8.173761e-02 -2.314024e-03 4.470501e-02 1.441465e-02 1.313786e-02
## [121] -1.255568e-02 5.905621e-03 9.188607e-03 4.859915e-03 3.524351e-03
## [126] -1.313191e-02 1.242376e-02 1.016664e-02 4.613482e-03 1.049998e-02
## [131] 1.688249e-02 5.203955e-03 2.586990e-02 2.481666e-02 1.800864e-02
## [136] -2.850003e-02 7.594258e-03 6.593737e-03 -1.025328e-02 -3.113091e-03
## [141] -1.839699e-03 -1.766617e-02 9.424965e-03 1.273447e-02 -3.714384e-03
## [146] -6.676600e-03 -2.224184e-02 4.240513e-02 -1.228680e-02 3.951891e-04
## [151] -1.523116e-02 8.462259e-03 4.049437e-03 1.031296e-02 1.388373e-03
## [156] 9.522294e-03 -1.843112e-02 -9.200914e-03 1.389128e-02 -1.238456e-02
## [161] -5.467326e-04 4.243543e-03 -1.917336e-02 -2.236437e-02 -1.416037e-02
## [166] 8.107889e-03 -1.789876e-04 5.566693e-03 5.491502e-03 1.170462e-02
## [171] 1.582876e-02 1.051995e-03 -4.715703e-03 1.943523e-02 -5.678910e-03
## [176] 8.989944e-03 1.133642e-02 1.966179e-03 3.069371e-03 -2.454574e-02
## [181] 4.808788e-03 1.334076e-02 9.228695e-03 1.053254e-03 4.403483e-03
## [186] 3.963574e-03 -1.384076e-02 8.013942e-03 3.127535e-03 1.194464e-02
## [191] 2.422547e-03 -1.411360e-02 -9.290192e-03 -4.224786e-03 -5.909015e-03
## [196] -5.602027e-03 1.443013e-02 9.206845e-03 8.700352e-03 1.814444e-02
## [201] 7.191640e-03 -6.788447e-04 -1.713029e-02 3.019679e-03 6.290652e-04
## [206] 1.062307e-03 5.804319e-03 6.802695e-03 -2.608560e-02 4.104068e-03
## [211] -1.024418e-02 -9.219361e-03 1.387837e-03 5.664039e-03 4.336677e-03
## [216] -1.675272e-03 2.092432e-02 -1.556313e-02 1.447670e-03 3.003790e-03
## [221] 2.010223e-03 -1.498177e-02 -1.004807e-02 -1.886911e-02 -1.896711e-02
## [226] -1.781350e-02 -1.757446e-02 5.446036e-03 2.205651e-02 -1.041771e-02
## [231] -1.482976e-02 -2.797871e-02 1.705510e-02 -3.317828e-03 -1.692100e-02
## [236] -2.616268e-03 1.808562e-02 1.882788e-02 3.298534e-03 1.356473e-02
## [241] -2.345700e-02 -1.271401e-02 -2.401013e-02 7.129281e-03 -2.808064e-02
## [246] -2.435404e-02 -1.198099e-02 9.766918e-03 -2.526934e-02 1.602686e-03
## [251] 1.803363e-02 -7.690935e-03 5.169227e-02 -1.751450e-03 1.427930e-02
## [256] 2.660847e-02 -1.197884e-02 -4.190759e-03 -1.307234e-02 -1.307859e-03
##
## $pm
## [1] 0.001113509
##
## $ps
## [1] 0.01522424
head(gmvp_mon)
## $pw
## [1] 2.269612e-01 1.078079e-16 -1.594795e-17 4.867144e-02 -6.938894e-18
## [6] 2.969484e-01 -9.942240e-18 4.274190e-01
##
## $px
## [1] -0.028027902 0.005564509 -0.008627567 0.009357611 -0.011929088
## [6] -0.004638312 0.004100084 -0.011111840 -0.020674762 0.011804797
## [11] 0.012694430 0.037144309 0.003186706 0.012808901 0.002174918
## [16] 0.009525188 0.056220293 0.004557302 0.060428680 -0.017060273
## [21] 0.013990188 -0.004728639 0.014081656 0.040469472 -0.005314764
## [26] -0.020809474 0.070215169 0.019852354 0.018395487 0.074077741
## [31] 0.002137910 -0.025618344 -0.016858996 0.015391182 0.038949920
## [36] -0.024521091 -0.034437466 -0.009479497 0.035518573 0.034447582
## [41] -0.011428288 0.025624264 0.006489311 -0.034389788 0.031638116
## [46] 0.001348127 0.019723160 -0.035408548 0.015120028 -0.001632886
## [51] -0.061571105 -0.020024585 -0.033265399 0.022198268 -0.036335892
## [56] -0.062482167 -0.001458714 0.071220489 -0.011503900
##
## $pm
## [1] 0.004188431
##
## $ps
## [1] 0.02981274
target_return <- 0.045
minvar_wk <- portfolio.optim(asset_returns_wk_xts, portfolio_method = "minvar", target_return = target_return)
minvar_mon <- portfolio.optim(asset_returns_mon_xts, portfolio_method = "minvar", target_return = target_return)
head(minvar_wk)
## $pw
## [1] 2.257075e-01 5.315535e-02 0.000000e+00 1.984894e-17 9.639827e-18
## [6] 2.790228e-01 -2.454753e-17 4.421143e-01
##
## $px
## [1] 7.667122e-03 -2.531943e-03 1.340514e-02 -2.502190e-02 -2.367232e-02
## [6] 2.616304e-02 -5.294836e-03 -6.860150e-03 9.999680e-03 -2.362102e-03
## [11] -5.583550e-03 2.715506e-03 -3.233785e-03 9.574635e-03 -6.926623e-03
## [16] -3.043441e-03 -2.077156e-03 9.470588e-03 -1.577264e-02 1.002615e-02
## [21] 1.802982e-03 4.400533e-03 -3.094363e-03 -5.628273e-03 -7.409317e-03
## [26] 8.451637e-03 -8.964856e-05 -8.514423e-03 -4.775190e-03 -9.268803e-04
## [31] 2.265151e-03 -7.808453e-03 1.373966e-02 -2.047757e-03 -8.468617e-03
## [36] 1.240820e-03 2.320126e-04 -2.721789e-03 -9.252026e-03 -1.943305e-03
## [41] 9.891382e-04 -4.838801e-03 -6.019133e-04 6.830518e-04 3.205218e-03
## [46] -9.628322e-03 1.360583e-02 5.475085e-03 -6.444840e-03 -8.152555e-03
## [51] 1.819053e-02 9.191121e-03 6.025041e-03 2.035109e-03 8.377622e-03
## [56] 1.190474e-02 2.871505e-03 8.080248e-03 3.275945e-03 -1.736004e-02
## [61] 4.546428e-03 9.762906e-03 9.229276e-03 -5.209140e-04 1.521426e-03
## [66] -2.022768e-03 -4.437783e-03 9.302065e-03 -1.770616e-03 -9.339281e-04
## [71] -2.400078e-03 2.512708e-03 8.992200e-03 2.438569e-02 1.035226e-03
## [76] 2.541022e-02 5.849389e-03 1.662048e-03 2.340452e-03 2.957480e-03
## [81] 1.672012e-03 9.538042e-03 2.369135e-02 1.443870e-02 -1.232433e-04
## [86] 8.833976e-03 -2.472520e-03 -2.065160e-02 1.821145e-02 -7.317933e-03
## [91] 9.208886e-03 -1.430638e-02 1.097793e-03 6.132775e-03 1.105996e-02
## [96] -2.455409e-02 1.105922e-02 1.947043e-03 4.715112e-03 -4.034146e-03
## [101] 8.309616e-03 1.843899e-03 1.236459e-02 1.444991e-02 5.183802e-03
## [106] 3.689058e-03 1.010635e-02 5.835721e-03 2.891295e-03 8.782234e-03
## [111] 1.990519e-02 -3.519943e-02 4.984155e-02 -8.686903e-02 -3.864193e-02
## [116] 8.173761e-02 -2.314024e-03 4.470501e-02 1.441465e-02 1.313786e-02
## [121] -1.255568e-02 5.905621e-03 9.188607e-03 4.859915e-03 3.524351e-03
## [126] -1.313191e-02 1.242376e-02 1.016664e-02 4.613482e-03 1.049998e-02
## [131] 1.688249e-02 5.203955e-03 2.586990e-02 2.481666e-02 1.800864e-02
## [136] -2.850003e-02 7.594258e-03 6.593737e-03 -1.025328e-02 -3.113091e-03
## [141] -1.839699e-03 -1.766617e-02 9.424965e-03 1.273447e-02 -3.714384e-03
## [146] -6.676600e-03 -2.224184e-02 4.240513e-02 -1.228680e-02 3.951891e-04
## [151] -1.523116e-02 8.462259e-03 4.049437e-03 1.031296e-02 1.388373e-03
## [156] 9.522294e-03 -1.843112e-02 -9.200914e-03 1.389128e-02 -1.238456e-02
## [161] -5.467326e-04 4.243543e-03 -1.917336e-02 -2.236437e-02 -1.416037e-02
## [166] 8.107889e-03 -1.789876e-04 5.566693e-03 5.491502e-03 1.170462e-02
## [171] 1.582876e-02 1.051995e-03 -4.715703e-03 1.943523e-02 -5.678910e-03
## [176] 8.989944e-03 1.133642e-02 1.966179e-03 3.069371e-03 -2.454574e-02
## [181] 4.808788e-03 1.334076e-02 9.228695e-03 1.053254e-03 4.403483e-03
## [186] 3.963574e-03 -1.384076e-02 8.013942e-03 3.127535e-03 1.194464e-02
## [191] 2.422547e-03 -1.411360e-02 -9.290192e-03 -4.224786e-03 -5.909015e-03
## [196] -5.602027e-03 1.443013e-02 9.206845e-03 8.700352e-03 1.814444e-02
## [201] 7.191640e-03 -6.788447e-04 -1.713029e-02 3.019679e-03 6.290652e-04
## [206] 1.062307e-03 5.804319e-03 6.802695e-03 -2.608560e-02 4.104068e-03
## [211] -1.024418e-02 -9.219361e-03 1.387837e-03 5.664039e-03 4.336677e-03
## [216] -1.675272e-03 2.092432e-02 -1.556313e-02 1.447670e-03 3.003790e-03
## [221] 2.010223e-03 -1.498177e-02 -1.004807e-02 -1.886911e-02 -1.896711e-02
## [226] -1.781350e-02 -1.757446e-02 5.446036e-03 2.205651e-02 -1.041771e-02
## [231] -1.482976e-02 -2.797871e-02 1.705510e-02 -3.317828e-03 -1.692100e-02
## [236] -2.616268e-03 1.808562e-02 1.882788e-02 3.298534e-03 1.356473e-02
## [241] -2.345700e-02 -1.271401e-02 -2.401013e-02 7.129281e-03 -2.808064e-02
## [246] -2.435404e-02 -1.198099e-02 9.766918e-03 -2.526934e-02 1.602686e-03
## [251] 1.803363e-02 -7.690935e-03 5.169227e-02 -1.751450e-03 1.427930e-02
## [256] 2.660847e-02 -1.197884e-02 -4.190759e-03 -1.307234e-02 -1.307859e-03
##
## $pm
## [1] 0.001113509
##
## $ps
## [1] 0.01522424
head(minvar_mon)
## $pw
## [1] 2.269612e-01 1.078079e-16 -1.594795e-17 4.867144e-02 -6.938894e-18
## [6] 2.969484e-01 -9.942240e-18 4.274190e-01
##
## $px
## [1] -0.028027902 0.005564509 -0.008627567 0.009357611 -0.011929088
## [6] -0.004638312 0.004100084 -0.011111840 -0.020674762 0.011804797
## [11] 0.012694430 0.037144309 0.003186706 0.012808901 0.002174918
## [16] 0.009525188 0.056220293 0.004557302 0.060428680 -0.017060273
## [21] 0.013990188 -0.004728639 0.014081656 0.040469472 -0.005314764
## [26] -0.020809474 0.070215169 0.019852354 0.018395487 0.074077741
## [31] 0.002137910 -0.025618344 -0.016858996 0.015391182 0.038949920
## [36] -0.024521091 -0.034437466 -0.009479497 0.035518573 0.034447582
## [41] -0.011428288 0.025624264 0.006489311 -0.034389788 0.031638116
## [46] 0.001348127 0.019723160 -0.035408548 0.015120028 -0.001632886
## [51] -0.061571105 -0.020024585 -0.033265399 0.022198268 -0.036335892
## [56] -0.062482167 -0.001458714 0.071220489 -0.011503900
##
## $pm
## [1] 0.004188431
##
## $ps
## [1] 0.02981274
rf <- 0
tangency_wk <- portfolio.optim(asset_returns_wk_xts, portfolio_method = "tangency", risk_free_rate = rf)
tangency_mon <- portfolio.optim(asset_returns_mon_xts, portfolio_method = "tangency", risk_free_rate = rf)
head(tangency_wk)
## $pw
## [1] 2.257075e-01 5.315535e-02 0.000000e+00 1.984894e-17 9.639827e-18
## [6] 2.790228e-01 -2.454753e-17 4.421143e-01
##
## $px
## [1] 7.667122e-03 -2.531943e-03 1.340514e-02 -2.502190e-02 -2.367232e-02
## [6] 2.616304e-02 -5.294836e-03 -6.860150e-03 9.999680e-03 -2.362102e-03
## [11] -5.583550e-03 2.715506e-03 -3.233785e-03 9.574635e-03 -6.926623e-03
## [16] -3.043441e-03 -2.077156e-03 9.470588e-03 -1.577264e-02 1.002615e-02
## [21] 1.802982e-03 4.400533e-03 -3.094363e-03 -5.628273e-03 -7.409317e-03
## [26] 8.451637e-03 -8.964856e-05 -8.514423e-03 -4.775190e-03 -9.268803e-04
## [31] 2.265151e-03 -7.808453e-03 1.373966e-02 -2.047757e-03 -8.468617e-03
## [36] 1.240820e-03 2.320126e-04 -2.721789e-03 -9.252026e-03 -1.943305e-03
## [41] 9.891382e-04 -4.838801e-03 -6.019133e-04 6.830518e-04 3.205218e-03
## [46] -9.628322e-03 1.360583e-02 5.475085e-03 -6.444840e-03 -8.152555e-03
## [51] 1.819053e-02 9.191121e-03 6.025041e-03 2.035109e-03 8.377622e-03
## [56] 1.190474e-02 2.871505e-03 8.080248e-03 3.275945e-03 -1.736004e-02
## [61] 4.546428e-03 9.762906e-03 9.229276e-03 -5.209140e-04 1.521426e-03
## [66] -2.022768e-03 -4.437783e-03 9.302065e-03 -1.770616e-03 -9.339281e-04
## [71] -2.400078e-03 2.512708e-03 8.992200e-03 2.438569e-02 1.035226e-03
## [76] 2.541022e-02 5.849389e-03 1.662048e-03 2.340452e-03 2.957480e-03
## [81] 1.672012e-03 9.538042e-03 2.369135e-02 1.443870e-02 -1.232433e-04
## [86] 8.833976e-03 -2.472520e-03 -2.065160e-02 1.821145e-02 -7.317933e-03
## [91] 9.208886e-03 -1.430638e-02 1.097793e-03 6.132775e-03 1.105996e-02
## [96] -2.455409e-02 1.105922e-02 1.947043e-03 4.715112e-03 -4.034146e-03
## [101] 8.309616e-03 1.843899e-03 1.236459e-02 1.444991e-02 5.183802e-03
## [106] 3.689058e-03 1.010635e-02 5.835721e-03 2.891295e-03 8.782234e-03
## [111] 1.990519e-02 -3.519943e-02 4.984155e-02 -8.686903e-02 -3.864193e-02
## [116] 8.173761e-02 -2.314024e-03 4.470501e-02 1.441465e-02 1.313786e-02
## [121] -1.255568e-02 5.905621e-03 9.188607e-03 4.859915e-03 3.524351e-03
## [126] -1.313191e-02 1.242376e-02 1.016664e-02 4.613482e-03 1.049998e-02
## [131] 1.688249e-02 5.203955e-03 2.586990e-02 2.481666e-02 1.800864e-02
## [136] -2.850003e-02 7.594258e-03 6.593737e-03 -1.025328e-02 -3.113091e-03
## [141] -1.839699e-03 -1.766617e-02 9.424965e-03 1.273447e-02 -3.714384e-03
## [146] -6.676600e-03 -2.224184e-02 4.240513e-02 -1.228680e-02 3.951891e-04
## [151] -1.523116e-02 8.462259e-03 4.049437e-03 1.031296e-02 1.388373e-03
## [156] 9.522294e-03 -1.843112e-02 -9.200914e-03 1.389128e-02 -1.238456e-02
## [161] -5.467326e-04 4.243543e-03 -1.917336e-02 -2.236437e-02 -1.416037e-02
## [166] 8.107889e-03 -1.789876e-04 5.566693e-03 5.491502e-03 1.170462e-02
## [171] 1.582876e-02 1.051995e-03 -4.715703e-03 1.943523e-02 -5.678910e-03
## [176] 8.989944e-03 1.133642e-02 1.966179e-03 3.069371e-03 -2.454574e-02
## [181] 4.808788e-03 1.334076e-02 9.228695e-03 1.053254e-03 4.403483e-03
## [186] 3.963574e-03 -1.384076e-02 8.013942e-03 3.127535e-03 1.194464e-02
## [191] 2.422547e-03 -1.411360e-02 -9.290192e-03 -4.224786e-03 -5.909015e-03
## [196] -5.602027e-03 1.443013e-02 9.206845e-03 8.700352e-03 1.814444e-02
## [201] 7.191640e-03 -6.788447e-04 -1.713029e-02 3.019679e-03 6.290652e-04
## [206] 1.062307e-03 5.804319e-03 6.802695e-03 -2.608560e-02 4.104068e-03
## [211] -1.024418e-02 -9.219361e-03 1.387837e-03 5.664039e-03 4.336677e-03
## [216] -1.675272e-03 2.092432e-02 -1.556313e-02 1.447670e-03 3.003790e-03
## [221] 2.010223e-03 -1.498177e-02 -1.004807e-02 -1.886911e-02 -1.896711e-02
## [226] -1.781350e-02 -1.757446e-02 5.446036e-03 2.205651e-02 -1.041771e-02
## [231] -1.482976e-02 -2.797871e-02 1.705510e-02 -3.317828e-03 -1.692100e-02
## [236] -2.616268e-03 1.808562e-02 1.882788e-02 3.298534e-03 1.356473e-02
## [241] -2.345700e-02 -1.271401e-02 -2.401013e-02 7.129281e-03 -2.808064e-02
## [246] -2.435404e-02 -1.198099e-02 9.766918e-03 -2.526934e-02 1.602686e-03
## [251] 1.803363e-02 -7.690935e-03 5.169227e-02 -1.751450e-03 1.427930e-02
## [256] 2.660847e-02 -1.197884e-02 -4.190759e-03 -1.307234e-02 -1.307859e-03
##
## $pm
## [1] 0.001113509
##
## $ps
## [1] 0.01522424
head(tangency_mon)
## $pw
## [1] 2.269612e-01 1.078079e-16 -1.594795e-17 4.867144e-02 -6.938894e-18
## [6] 2.969484e-01 -9.942240e-18 4.274190e-01
##
## $px
## [1] -0.028027902 0.005564509 -0.008627567 0.009357611 -0.011929088
## [6] -0.004638312 0.004100084 -0.011111840 -0.020674762 0.011804797
## [11] 0.012694430 0.037144309 0.003186706 0.012808901 0.002174918
## [16] 0.009525188 0.056220293 0.004557302 0.060428680 -0.017060273
## [21] 0.013990188 -0.004728639 0.014081656 0.040469472 -0.005314764
## [26] -0.020809474 0.070215169 0.019852354 0.018395487 0.074077741
## [31] 0.002137910 -0.025618344 -0.016858996 0.015391182 0.038949920
## [36] -0.024521091 -0.034437466 -0.009479497 0.035518573 0.034447582
## [41] -0.011428288 0.025624264 0.006489311 -0.034389788 0.031638116
## [46] 0.001348127 0.019723160 -0.035408548 0.015120028 -0.001632886
## [51] -0.061571105 -0.020024585 -0.033265399 0.022198268 -0.036335892
## [56] -0.062482167 -0.001458714 0.071220489 -0.011503900
##
## $pm
## [1] 0.004188431
##
## $ps
## [1] 0.02981274
library(readxl)
data <- read_excel("berndt.xlsx")
library(readxl)
excess_returns <- data[, 1:15] - data$RKFREE
model <- lm(as.matrix(excess_returns) ~ data$MARKET)
residuals <- resid(model)
covariance <- cov(residuals)
n <- ncol(excess_returns)
w_gmvp <- solve(covariance) %*% rep(1, n) / sum(solve(covariance))
r_gmvp <- t(w_gmvp) %*% colMeans(excess_returns)
cat("GMVP weights:\n")
## GMVP weights:
print(w_gmvp)
## [,1]
## CITCRP 1.500605e-03
## CONED 4.074508e-03
## CONTIL 1.810647e-03
## DATGEN -1.411549e-03
## DEC -3.620964e-03
## DELTA 2.080718e-03
## GENMIL -2.152935e-03
## GERBER -1.103299e-03
## IBM -2.412291e-03
## MARKET 9.967443e-01
## MOBIL -7.223432e-06
## PANAM -1.798826e-03
## PSNH 1.304628e-03
## TANDY 3.110081e-03
## TEXACO 1.881560e-03
cat("\nGMVP return:\n")
##
## GMVP return:
print(r_gmvp)
## [,1]
## [1,] 0.007152304