#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

Q1: Try to find the GMVP for these eight assets using the derived asset_returns data.

Note that you have to compute optimal weights and GMVP returns using weekly and monthly asset returns.

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

Q2: Given the portfolio return is specified as 0.045 annual rate.

Try to find the optimal weights for the minimum variance portfolio.

You should use weekly and monthly asset returns to derive the solutions.

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

Q3. Find the tangency portfolio based on Q2. Risk-free rate is assumed to be zero.

You should compute the tangency portfolio weights and its returns based on weekly and monthly returns.

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

Q4 The attached file “berndt.xslx” contains monthly returns of 15 stocks, market index returns (MARKET),

and risk-free monthly rate (RKFREE) for 120 months.

Compute GMVP (global minimum variance portfolio) weights and its return by using the covariance derived

from single index model.

Load the required packages

library(readxl)

Load the data from the Excel file

data <- read_excel("berndt.xlsx")
library(readxl)

Calculate excess returns

excess_returns <- data[, 1:15] - data$RKFREE

Estimate single index model

model <- lm(as.matrix(excess_returns) ~ data$MARKET)

Extract residuals and calculate sample covariance matrix

residuals <- resid(model)
covariance <- cov(residuals)

Calculate GMVP weights

n <- ncol(excess_returns)
w_gmvp <- solve(covariance) %*% rep(1, n) / sum(solve(covariance))

Calculate GMVP return

r_gmvp <- t(w_gmvp) %*% colMeans(excess_returns)