library(pacman) p_load(tidyquant, lubridate, timetk, tidyverse, fPortfolio)
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.82848 152.88683 43.05479 143.94116 61.24228
## 2018-01-03 247.38336 154.37231 43.46730 144.09081 61.53624
## 2018-01-04 248.42599 154.64246 43.68254 144.47427 62.21066
## 2018-01-05 250.08150 156.19550 44.05919 144.77353 62.55651
## 2018-01-08 250.53880 156.80322 44.05919 144.99806 62.53922
## 2018-01-09 251.10593 156.81287 43.98744 144.80165 62.60839
## 2018-01-10 250.72177 156.44632 43.70944 144.82033 62.48735
## 2018-01-11 252.55109 157.51709 43.97847 147.30818 62.91968
## 2018-01-12 254.19746 158.67467 44.39996 147.92552 63.55085
## 2018-01-16 253.32855 158.22134 44.22958 146.03621 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.33668 125.15000
## 2018-01-03 112.84788 69.22488 124.82000
## 2018-01-04 112.82996 68.14093 125.46000
## 2018-01-05 112.50778 68.20974 125.33000
## 2018-01-08 112.43620 68.59686 125.31000
## 2018-01-09 110.93260 67.80544 124.73000
## 2018-01-10 110.79839 66.97960 125.03000
## 2018-01-11 111.25482 66.74732 125.44000
## 2018-01-12 111.44276 66.20537 126.96000
## 2018-01-16 111.90817 66.38600 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
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.006325084 0.009716265 0.009581224 0.0010396119 0.0047999613
## 2018-01-04 0.004214645 0.001749936 0.004951603 0.0026612984 0.0109596490
## 2018-01-05 0.006663966 0.010042776 0.008622392 0.0020713402 0.0055594902
## 2018-01-08 0.001828628 0.003890810 0.000000000 0.0015509264 -0.0002764224
## 2018-01-09 0.002263615 0.000061501 -0.001628419 -0.0013545776 0.0011059344
## 2018-01-10 -0.001529853 -0.002337478 -0.006319897 0.0001289817 -0.0019331709
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-03 0.0047811212 -0.001612439 -0.0026368504
## 2018-01-04 -0.0001588107 -0.015658334 0.0051273786
## 2018-01-05 -0.0028553948 0.001009812 -0.0010361649
## 2018-01-08 -0.0006362136 0.005675481 -0.0001596128
## 2018-01-09 -0.0133729265 -0.011537262 -0.0046284751
## 2018-01-10 -0.0012098906 -0.012179609 0.0024051585
head(asset_returns_wk_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-12 0.016458502 0.01587224 0.007734472 0.021771886 0.015894990
## 2018-01-19 0.008959256 0.01124696 0.018784222 0.002782005 0.008571579
## 2018-01-26 0.022003365 0.02759375 0.032513998 0.006304842 0.015108314
## 2018-02-02 -0.038837239 -0.03697389 -0.058179939 -0.036152767 -0.035880070
## 2018-02-09 -0.050644403 -0.05169803 -0.053618740 -0.045894825 -0.054583116
## 2018-02-16 0.044397727 0.05675850 0.067212584 0.044763771 0.041259433
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-12 -0.009466169 -0.029385417 0.013005643
## 2018-01-19 -0.011724974 0.006496675 -0.004253315
## 2018-01-26 0.004306667 0.016911864 0.013051805
## 2018-02-02 -0.030431312 -0.029325623 -0.013117887
## 2018-02-09 -0.013714633 -0.041590692 -0.012817492
## 2018-02-16 0.006528657 0.024290711 0.025567064
head(asset_returns_mon_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-02-28 -0.036360204 -0.012927913 -0.058984954 -0.038437143 -0.048347642
## 2018-03-29 -0.027410809 -0.040788360 0.005414609 0.012175597 -0.008395991
## 2018-04-30 0.005168243 0.005058438 -0.028169270 0.009813318 0.015212392
## 2018-05-31 0.024309243 0.056729273 -0.026214595 0.061635926 -0.018942682
## 2018-06-29 0.005750615 0.011450344 -0.045456953 0.006143668 -0.015841150
## 2018-07-31 0.037046920 0.027963853 0.035310333 0.016490402 0.028520210
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-02-28 -0.030414301 -0.066573140 -0.020759902
## 2018-03-29 0.028596620 0.037718814 0.006320007
## 2018-04-30 -0.020881296 0.002252734 -0.009539745
## 2018-05-31 0.020044057 0.033712271 -0.011959209
## 2018-06-29 0.006457596 0.040594725 -0.036149448
## 2018-07-31 -0.014368328 0.008314716 -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.257066e-01 5.315634e-02 0.000000e+00 -4.716122e-17 5.352838e-18
## [6] 2.790230e-01 1.561851e-17 4.421141e-01
##
## $px
## [1] 7.667202e-03 -2.531977e-03 1.340513e-02 -2.502186e-02 -2.367235e-02
## [6] 2.616314e-02 -5.294956e-03 -6.859930e-03 9.999411e-03 -2.361944e-03
## [11] -5.583567e-03 2.715367e-03 -3.233553e-03 9.574663e-03 -6.926808e-03
## [16] -3.043484e-03 -2.077169e-03 9.470652e-03 -1.577247e-02 1.002594e-02
## [21] 1.802961e-03 4.400814e-03 -3.094457e-03 -5.628395e-03 -7.409373e-03
## [26] 8.451753e-03 -8.958002e-05 -8.514354e-03 -4.775315e-03 -9.267930e-04
## [31] 2.265006e-03 -7.808332e-03 1.373962e-02 -2.047796e-03 -8.468509e-03
## [36] 1.240946e-03 2.317758e-04 -2.721794e-03 -9.251969e-03 -1.943408e-03
## [41] 9.892570e-04 -4.838838e-03 -6.020778e-04 6.833033e-04 3.205104e-03
## [46] -9.628284e-03 1.360583e-02 5.474936e-03 -6.444748e-03 -8.152577e-03
## [51] 1.819063e-02 9.191043e-03 6.025128e-03 2.035059e-03 8.377534e-03
## [56] 1.190485e-02 2.871491e-03 8.080192e-03 3.275971e-03 -1.736006e-02
## [61] 4.546434e-03 9.762962e-03 9.229239e-03 -5.209235e-04 1.521469e-03
## [66] -2.022712e-03 -4.437738e-03 9.301861e-03 -1.770553e-03 -9.337905e-04
## [71] -2.400211e-03 2.512626e-03 8.992180e-03 2.438574e-02 1.035255e-03
## [76] 2.541038e-02 5.849279e-03 1.661960e-03 2.340493e-03 2.957580e-03
## [81] 1.671902e-03 9.538001e-03 2.369149e-02 1.443880e-02 -1.233861e-04
## [86] 8.833910e-03 -2.472511e-03 -2.065140e-02 1.821118e-02 -7.317890e-03
## [91] 9.208790e-03 -1.430627e-02 1.097867e-03 6.132582e-03 1.106010e-02
## [96] -2.455405e-02 1.105912e-02 1.947096e-03 4.715105e-03 -4.034039e-03
## [101] 8.309721e-03 1.843785e-03 1.236468e-02 1.444971e-02 5.183833e-03
## [106] 3.689055e-03 1.010644e-02 5.835666e-03 2.891373e-03 8.782112e-03
## [111] 1.990537e-02 -3.519954e-02 4.984162e-02 -8.686897e-02 -3.864201e-02
## [116] 8.173761e-02 -2.313978e-03 4.470494e-02 1.441471e-02 1.313778e-02
## [121] -1.255570e-02 5.905725e-03 9.188598e-03 4.859937e-03 3.524283e-03
## [126] -1.313180e-02 1.242369e-02 1.016653e-02 4.613646e-03 1.049998e-02
## [131] 1.688249e-02 5.204027e-03 2.586970e-02 2.481672e-02 1.800874e-02
## [136] -2.850001e-02 7.594128e-03 6.593743e-03 -1.025316e-02 -3.113313e-03
## [141] -1.839485e-03 -1.766623e-02 9.425030e-03 1.273440e-02 -3.714418e-03
## [146] -6.676633e-03 -2.224190e-02 4.240529e-02 -1.228682e-02 3.950187e-04
## [151] -1.523103e-02 8.462397e-03 4.049300e-03 1.031298e-02 1.388340e-03
## [156] 9.522331e-03 -1.843109e-02 -9.200930e-03 1.389126e-02 -1.238462e-02
## [161] -5.467025e-04 4.243561e-03 -1.917337e-02 -2.236423e-02 -1.416060e-02
## [166] 8.107967e-03 -1.790471e-04 5.566646e-03 5.491543e-03 1.170462e-02
## [171] 1.582872e-02 1.052015e-03 -4.715629e-03 1.943520e-02 -5.678831e-03
## [176] 8.989855e-03 1.133644e-02 1.966186e-03 3.069507e-03 -2.454592e-02
## [181] 4.808937e-03 1.334079e-02 9.228609e-03 1.053311e-03 4.403437e-03
## [186] 3.963670e-03 -1.384087e-02 8.014002e-03 3.127414e-03 1.194468e-02
## [191] 2.422488e-03 -1.411344e-02 -9.290267e-03 -4.224846e-03 -5.909002e-03
## [196] -5.602016e-03 1.443007e-02 9.207039e-03 8.700220e-03 1.814447e-02
## [201] 7.191538e-03 -6.787806e-04 -1.713018e-02 3.019649e-03 6.290788e-04
## [206] 1.062296e-03 5.804321e-03 6.802602e-03 -2.608550e-02 4.103947e-03
## [211] -1.024411e-02 -9.219370e-03 1.387847e-03 5.663997e-03 4.336599e-03
## [216] -1.675295e-03 2.092441e-02 -1.556314e-02 1.447593e-03 3.003895e-03
## [221] 2.010201e-03 -1.498181e-02 -1.004811e-02 -1.886908e-02 -1.896714e-02
## [226] -1.781346e-02 -1.757453e-02 5.446025e-03 2.205659e-02 -1.041774e-02
## [231] -1.482978e-02 -2.797870e-02 1.705507e-02 -3.317796e-03 -1.692094e-02
## [236] -2.616278e-03 1.808560e-02 1.882791e-02 3.298527e-03 1.356474e-02
## [241] -2.345702e-02 -1.271402e-02 -2.401015e-02 7.129303e-03 -2.808068e-02
## [246] -2.435403e-02 -1.198100e-02 9.766906e-03 -2.526936e-02 1.602672e-03
## [251] 1.803363e-02 -7.690970e-03 5.169229e-02 -1.751452e-03 1.427930e-02
## [256] 2.660848e-02 -1.197884e-02 -4.190766e-03 -1.307237e-02 -1.307866e-03
##
## $pm
## [1] 0.001113509
##
## $ps
## [1] 0.01522424
head(gmvp_mon)
## $pw
## [1] 2.269612e-01 5.021938e-17 8.823015e-18 4.867141e-02 0.000000e+00
## [6] 2.969484e-01 -1.427258e-17 4.274190e-01
##
## $px
## [1] -0.028027799 0.005564424 -0.008627517 0.009357618 -0.011929202
## [6] -0.004638096 0.004099946 -0.011111836 -0.020674748 0.011804904
## [11] 0.012694419 0.037144244 0.003186819 0.012808761 0.002175043
## [16] 0.009524978 0.056220441 0.004557208 0.060428683 -0.017060235
## [21] 0.013990304 -0.004728800 0.014081697 0.040469451 -0.005314728
## [26] -0.020809317 0.070215014 0.019852320 0.018395492 0.074077765
## [31] 0.002137918 -0.025618223 -0.016859193 0.015391268 0.038949936
## [36] -0.024521176 -0.034437272 -0.009479639 0.035518572 0.034447577
## [41] -0.011428219 0.025624314 0.006489217 -0.034389778 0.031638055
## [46] 0.001348141 0.019723131 -0.035408519 0.015120070 -0.001632887
## [51] -0.061571097 -0.020024567 -0.033265378 0.022198236 -0.036335891
## [56] -0.062482179 -0.001458721 0.071220510 -0.011503910
##
## $pm
## [1] 0.004188433
##
## $ps
## [1] 0.02981273
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.257066e-01 5.315634e-02 0.000000e+00 -4.716122e-17 5.352838e-18
## [6] 2.790230e-01 1.561851e-17 4.421141e-01
##
## $px
## [1] 7.667202e-03 -2.531977e-03 1.340513e-02 -2.502186e-02 -2.367235e-02
## [6] 2.616314e-02 -5.294956e-03 -6.859930e-03 9.999411e-03 -2.361944e-03
## [11] -5.583567e-03 2.715367e-03 -3.233553e-03 9.574663e-03 -6.926808e-03
## [16] -3.043484e-03 -2.077169e-03 9.470652e-03 -1.577247e-02 1.002594e-02
## [21] 1.802961e-03 4.400814e-03 -3.094457e-03 -5.628395e-03 -7.409373e-03
## [26] 8.451753e-03 -8.958002e-05 -8.514354e-03 -4.775315e-03 -9.267930e-04
## [31] 2.265006e-03 -7.808332e-03 1.373962e-02 -2.047796e-03 -8.468509e-03
## [36] 1.240946e-03 2.317758e-04 -2.721794e-03 -9.251969e-03 -1.943408e-03
## [41] 9.892570e-04 -4.838838e-03 -6.020778e-04 6.833033e-04 3.205104e-03
## [46] -9.628284e-03 1.360583e-02 5.474936e-03 -6.444748e-03 -8.152577e-03
## [51] 1.819063e-02 9.191043e-03 6.025128e-03 2.035059e-03 8.377534e-03
## [56] 1.190485e-02 2.871491e-03 8.080192e-03 3.275971e-03 -1.736006e-02
## [61] 4.546434e-03 9.762962e-03 9.229239e-03 -5.209235e-04 1.521469e-03
## [66] -2.022712e-03 -4.437738e-03 9.301861e-03 -1.770553e-03 -9.337905e-04
## [71] -2.400211e-03 2.512626e-03 8.992180e-03 2.438574e-02 1.035255e-03
## [76] 2.541038e-02 5.849279e-03 1.661960e-03 2.340493e-03 2.957580e-03
## [81] 1.671902e-03 9.538001e-03 2.369149e-02 1.443880e-02 -1.233861e-04
## [86] 8.833910e-03 -2.472511e-03 -2.065140e-02 1.821118e-02 -7.317890e-03
## [91] 9.208790e-03 -1.430627e-02 1.097867e-03 6.132582e-03 1.106010e-02
## [96] -2.455405e-02 1.105912e-02 1.947096e-03 4.715105e-03 -4.034039e-03
## [101] 8.309721e-03 1.843785e-03 1.236468e-02 1.444971e-02 5.183833e-03
## [106] 3.689055e-03 1.010644e-02 5.835666e-03 2.891373e-03 8.782112e-03
## [111] 1.990537e-02 -3.519954e-02 4.984162e-02 -8.686897e-02 -3.864201e-02
## [116] 8.173761e-02 -2.313978e-03 4.470494e-02 1.441471e-02 1.313778e-02
## [121] -1.255570e-02 5.905725e-03 9.188598e-03 4.859937e-03 3.524283e-03
## [126] -1.313180e-02 1.242369e-02 1.016653e-02 4.613646e-03 1.049998e-02
## [131] 1.688249e-02 5.204027e-03 2.586970e-02 2.481672e-02 1.800874e-02
## [136] -2.850001e-02 7.594128e-03 6.593743e-03 -1.025316e-02 -3.113313e-03
## [141] -1.839485e-03 -1.766623e-02 9.425030e-03 1.273440e-02 -3.714418e-03
## [146] -6.676633e-03 -2.224190e-02 4.240529e-02 -1.228682e-02 3.950187e-04
## [151] -1.523103e-02 8.462397e-03 4.049300e-03 1.031298e-02 1.388340e-03
## [156] 9.522331e-03 -1.843109e-02 -9.200930e-03 1.389126e-02 -1.238462e-02
## [161] -5.467025e-04 4.243561e-03 -1.917337e-02 -2.236423e-02 -1.416060e-02
## [166] 8.107967e-03 -1.790471e-04 5.566646e-03 5.491543e-03 1.170462e-02
## [171] 1.582872e-02 1.052015e-03 -4.715629e-03 1.943520e-02 -5.678831e-03
## [176] 8.989855e-03 1.133644e-02 1.966186e-03 3.069507e-03 -2.454592e-02
## [181] 4.808937e-03 1.334079e-02 9.228609e-03 1.053311e-03 4.403437e-03
## [186] 3.963670e-03 -1.384087e-02 8.014002e-03 3.127414e-03 1.194468e-02
## [191] 2.422488e-03 -1.411344e-02 -9.290267e-03 -4.224846e-03 -5.909002e-03
## [196] -5.602016e-03 1.443007e-02 9.207039e-03 8.700220e-03 1.814447e-02
## [201] 7.191538e-03 -6.787806e-04 -1.713018e-02 3.019649e-03 6.290788e-04
## [206] 1.062296e-03 5.804321e-03 6.802602e-03 -2.608550e-02 4.103947e-03
## [211] -1.024411e-02 -9.219370e-03 1.387847e-03 5.663997e-03 4.336599e-03
## [216] -1.675295e-03 2.092441e-02 -1.556314e-02 1.447593e-03 3.003895e-03
## [221] 2.010201e-03 -1.498181e-02 -1.004811e-02 -1.886908e-02 -1.896714e-02
## [226] -1.781346e-02 -1.757453e-02 5.446025e-03 2.205659e-02 -1.041774e-02
## [231] -1.482978e-02 -2.797870e-02 1.705507e-02 -3.317796e-03 -1.692094e-02
## [236] -2.616278e-03 1.808560e-02 1.882791e-02 3.298527e-03 1.356474e-02
## [241] -2.345702e-02 -1.271402e-02 -2.401015e-02 7.129303e-03 -2.808068e-02
## [246] -2.435403e-02 -1.198100e-02 9.766906e-03 -2.526936e-02 1.602672e-03
## [251] 1.803363e-02 -7.690970e-03 5.169229e-02 -1.751452e-03 1.427930e-02
## [256] 2.660848e-02 -1.197884e-02 -4.190766e-03 -1.307237e-02 -1.307866e-03
##
## $pm
## [1] 0.001113509
##
## $ps
## [1] 0.01522424
head(minvar_mon)
## $pw
## [1] 2.269612e-01 5.021938e-17 8.823015e-18 4.867141e-02 0.000000e+00
## [6] 2.969484e-01 -1.427258e-17 4.274190e-01
##
## $px
## [1] -0.028027799 0.005564424 -0.008627517 0.009357618 -0.011929202
## [6] -0.004638096 0.004099946 -0.011111836 -0.020674748 0.011804904
## [11] 0.012694419 0.037144244 0.003186819 0.012808761 0.002175043
## [16] 0.009524978 0.056220441 0.004557208 0.060428683 -0.017060235
## [21] 0.013990304 -0.004728800 0.014081697 0.040469451 -0.005314728
## [26] -0.020809317 0.070215014 0.019852320 0.018395492 0.074077765
## [31] 0.002137918 -0.025618223 -0.016859193 0.015391268 0.038949936
## [36] -0.024521176 -0.034437272 -0.009479639 0.035518572 0.034447577
## [41] -0.011428219 0.025624314 0.006489217 -0.034389778 0.031638055
## [46] 0.001348141 0.019723131 -0.035408519 0.015120070 -0.001632887
## [51] -0.061571097 -0.020024567 -0.033265378 0.022198236 -0.036335891
## [56] -0.062482179 -0.001458721 0.071220510 -0.011503910
##
## $pm
## [1] 0.004188433
##
## $ps
## [1] 0.02981273
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.257066e-01 5.315634e-02 0.000000e+00 -4.716122e-17 5.352838e-18
## [6] 2.790230e-01 1.561851e-17 4.421141e-01
##
## $px
## [1] 7.667202e-03 -2.531977e-03 1.340513e-02 -2.502186e-02 -2.367235e-02
## [6] 2.616314e-02 -5.294956e-03 -6.859930e-03 9.999411e-03 -2.361944e-03
## [11] -5.583567e-03 2.715367e-03 -3.233553e-03 9.574663e-03 -6.926808e-03
## [16] -3.043484e-03 -2.077169e-03 9.470652e-03 -1.577247e-02 1.002594e-02
## [21] 1.802961e-03 4.400814e-03 -3.094457e-03 -5.628395e-03 -7.409373e-03
## [26] 8.451753e-03 -8.958002e-05 -8.514354e-03 -4.775315e-03 -9.267930e-04
## [31] 2.265006e-03 -7.808332e-03 1.373962e-02 -2.047796e-03 -8.468509e-03
## [36] 1.240946e-03 2.317758e-04 -2.721794e-03 -9.251969e-03 -1.943408e-03
## [41] 9.892570e-04 -4.838838e-03 -6.020778e-04 6.833033e-04 3.205104e-03
## [46] -9.628284e-03 1.360583e-02 5.474936e-03 -6.444748e-03 -8.152577e-03
## [51] 1.819063e-02 9.191043e-03 6.025128e-03 2.035059e-03 8.377534e-03
## [56] 1.190485e-02 2.871491e-03 8.080192e-03 3.275971e-03 -1.736006e-02
## [61] 4.546434e-03 9.762962e-03 9.229239e-03 -5.209235e-04 1.521469e-03
## [66] -2.022712e-03 -4.437738e-03 9.301861e-03 -1.770553e-03 -9.337905e-04
## [71] -2.400211e-03 2.512626e-03 8.992180e-03 2.438574e-02 1.035255e-03
## [76] 2.541038e-02 5.849279e-03 1.661960e-03 2.340493e-03 2.957580e-03
## [81] 1.671902e-03 9.538001e-03 2.369149e-02 1.443880e-02 -1.233861e-04
## [86] 8.833910e-03 -2.472511e-03 -2.065140e-02 1.821118e-02 -7.317890e-03
## [91] 9.208790e-03 -1.430627e-02 1.097867e-03 6.132582e-03 1.106010e-02
## [96] -2.455405e-02 1.105912e-02 1.947096e-03 4.715105e-03 -4.034039e-03
## [101] 8.309721e-03 1.843785e-03 1.236468e-02 1.444971e-02 5.183833e-03
## [106] 3.689055e-03 1.010644e-02 5.835666e-03 2.891373e-03 8.782112e-03
## [111] 1.990537e-02 -3.519954e-02 4.984162e-02 -8.686897e-02 -3.864201e-02
## [116] 8.173761e-02 -2.313978e-03 4.470494e-02 1.441471e-02 1.313778e-02
## [121] -1.255570e-02 5.905725e-03 9.188598e-03 4.859937e-03 3.524283e-03
## [126] -1.313180e-02 1.242369e-02 1.016653e-02 4.613646e-03 1.049998e-02
## [131] 1.688249e-02 5.204027e-03 2.586970e-02 2.481672e-02 1.800874e-02
## [136] -2.850001e-02 7.594128e-03 6.593743e-03 -1.025316e-02 -3.113313e-03
## [141] -1.839485e-03 -1.766623e-02 9.425030e-03 1.273440e-02 -3.714418e-03
## [146] -6.676633e-03 -2.224190e-02 4.240529e-02 -1.228682e-02 3.950187e-04
## [151] -1.523103e-02 8.462397e-03 4.049300e-03 1.031298e-02 1.388340e-03
## [156] 9.522331e-03 -1.843109e-02 -9.200930e-03 1.389126e-02 -1.238462e-02
## [161] -5.467025e-04 4.243561e-03 -1.917337e-02 -2.236423e-02 -1.416060e-02
## [166] 8.107967e-03 -1.790471e-04 5.566646e-03 5.491543e-03 1.170462e-02
## [171] 1.582872e-02 1.052015e-03 -4.715629e-03 1.943520e-02 -5.678831e-03
## [176] 8.989855e-03 1.133644e-02 1.966186e-03 3.069507e-03 -2.454592e-02
## [181] 4.808937e-03 1.334079e-02 9.228609e-03 1.053311e-03 4.403437e-03
## [186] 3.963670e-03 -1.384087e-02 8.014002e-03 3.127414e-03 1.194468e-02
## [191] 2.422488e-03 -1.411344e-02 -9.290267e-03 -4.224846e-03 -5.909002e-03
## [196] -5.602016e-03 1.443007e-02 9.207039e-03 8.700220e-03 1.814447e-02
## [201] 7.191538e-03 -6.787806e-04 -1.713018e-02 3.019649e-03 6.290788e-04
## [206] 1.062296e-03 5.804321e-03 6.802602e-03 -2.608550e-02 4.103947e-03
## [211] -1.024411e-02 -9.219370e-03 1.387847e-03 5.663997e-03 4.336599e-03
## [216] -1.675295e-03 2.092441e-02 -1.556314e-02 1.447593e-03 3.003895e-03
## [221] 2.010201e-03 -1.498181e-02 -1.004811e-02 -1.886908e-02 -1.896714e-02
## [226] -1.781346e-02 -1.757453e-02 5.446025e-03 2.205659e-02 -1.041774e-02
## [231] -1.482978e-02 -2.797870e-02 1.705507e-02 -3.317796e-03 -1.692094e-02
## [236] -2.616278e-03 1.808560e-02 1.882791e-02 3.298527e-03 1.356474e-02
## [241] -2.345702e-02 -1.271402e-02 -2.401015e-02 7.129303e-03 -2.808068e-02
## [246] -2.435403e-02 -1.198100e-02 9.766906e-03 -2.526936e-02 1.602672e-03
## [251] 1.803363e-02 -7.690970e-03 5.169229e-02 -1.751452e-03 1.427930e-02
## [256] 2.660848e-02 -1.197884e-02 -4.190766e-03 -1.307237e-02 -1.307866e-03
##
## $pm
## [1] 0.001113509
##
## $ps
## [1] 0.01522424
head(tangency_mon)
## $pw
## [1] 2.269612e-01 5.021938e-17 8.823015e-18 4.867141e-02 0.000000e+00
## [6] 2.969484e-01 -1.427258e-17 4.274190e-01
##
## $px
## [1] -0.028027799 0.005564424 -0.008627517 0.009357618 -0.011929202
## [6] -0.004638096 0.004099946 -0.011111836 -0.020674748 0.011804904
## [11] 0.012694419 0.037144244 0.003186819 0.012808761 0.002175043
## [16] 0.009524978 0.056220441 0.004557208 0.060428683 -0.017060235
## [21] 0.013990304 -0.004728800 0.014081697 0.040469451 -0.005314728
## [26] -0.020809317 0.070215014 0.019852320 0.018395492 0.074077765
## [31] 0.002137918 -0.025618223 -0.016859193 0.015391268 0.038949936
## [36] -0.024521176 -0.034437272 -0.009479639 0.035518572 0.034447577
## [41] -0.011428219 0.025624314 0.006489217 -0.034389778 0.031638055
## [46] 0.001348141 0.019723131 -0.035408519 0.015120070 -0.001632887
## [51] -0.061571097 -0.020024567 -0.033265378 0.022198236 -0.036335891
## [56] -0.062482179 -0.001458721 0.071220510 -0.011503910
##
## $pm
## [1] 0.004188433
##
## $ps
## [1] 0.02981273
library(readxl)
data <- read_excel("berndt.xlsx")
library(readxl)
data <- read_excel("berndt.xlsx")
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