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