DATA

library(readxl)
data <- read_excel("~/Desktop/SPY.xlsx")
View(data)
# 1. Load libraries
library(pacman)
p_load(tidyquant, lubridate, timetk, tidyverse, fPortfolio)
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])
}
head(portfolioPrices,5)
##            SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-02     245.8284     152.8868     43.05478     143.9412     61.24227
## 2018-01-03     247.3833     154.3723     43.46731     144.0908     61.53624
## 2018-01-04     248.4260     154.6424     43.68253     144.4743     62.21065
## 2018-01-05     250.0815     156.1955     44.05919     144.7736     62.55651
## 2018-01-08     250.5388     156.8033     44.05919     144.9980     62.53921
##            TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-02     112.3109     69.33666       125.15
## 2018-01-03     112.8479     69.22487       124.82
## 2018-01-04     112.8300     68.14094       125.46
## 2018-01-05     112.5078     68.20976       125.33
## 2018-01-08     112.4362     68.59686       125.31

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.006325274  9.716265e-03  0.009581398  0.0010395080  0.0048001486
## 2018-01-04  0.004214706  1.749737e-03  0.004951422  0.0026614051  0.0109594764
## 2018-01-05  0.006664275  1.004297e-02  0.008622577  0.0020714482  0.0055596110
## 2018-01-08  0.001828568  3.891104e-03  0.000000000  0.0015506077 -0.0002765499
## 2018-01-09  0.002263553  6.149744e-05 -0.001628514 -0.0013546872  0.0011062979
## 2018-01-10 -0.001529976 -2.337766e-03 -0.006319895  0.0001291974 -0.0019335264
##             TLT.Adjusted IYR.Adjusted  GLD.Adjusted
## 2018-01-03  0.0047813981 -0.001612322 -0.0026368517
## 2018-01-04 -0.0001587447 -0.015658116  0.0051273754
## 2018-01-05 -0.0028552610  0.001009922 -0.0010361629
## 2018-01-08 -0.0006365514  0.005675259 -0.0001596106
## 2018-01-09 -0.0133724562 -0.011537714 -0.0046284814
## 2018-01-10 -0.0012106446 -0.012179279  0.0024051631
head(asset_returns_wk_xts)
##            SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-12  0.016458256   0.01587213  0.007734459  0.021771455  0.015895115
## 2018-01-19  0.008959437   0.01124677  0.018783980  0.002781907  0.008571088
## 2018-01-26  0.022003123   0.02759413  0.032514081  0.006305251  0.015108801
## 2018-02-02 -0.038837186  -0.03697397 -0.058179868 -0.036152861 -0.035880414
## 2018-02-09 -0.050644283  -0.05169802 -0.053618558 -0.045894613 -0.054583140
## 2018-02-16  0.044397405   0.05675850  0.067212281  0.044763867  0.041259700
##            TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-12 -0.009466232  -0.02938575  0.013005641
## 2018-01-19 -0.011725524   0.00649680 -0.004253316
## 2018-01-26  0.004306737   0.01691186  0.013051804
## 2018-02-02 -0.030431113  -0.02932562 -0.013117888
## 2018-02-09 -0.013714350  -0.04159051 -0.012817486
## 2018-02-16  0.006528368   0.02429016  0.025567060
head(asset_returns_mon_xts)
##            SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-02-28 -0.036360496  -0.01292791 -0.058984883 -0.038437043 -0.048347990
## 2018-03-29 -0.027410508  -0.04078827  0.005414345  0.012175270 -0.008396055
## 2018-04-30  0.005168430   0.00505824 -0.028168821  0.009813749  0.015212523
## 2018-05-31  0.024308797   0.05672948 -0.026215044  0.061635605 -0.018942637
## 2018-06-29  0.005751046   0.01145025 -0.045456789  0.006143864 -0.015841076
## 2018-07-31  0.037046483   0.02796404  0.035310352  0.016490606  0.028520278
##            TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-02-28 -0.030414436 -0.066573247 -0.020759906
## 2018-03-29  0.028596763  0.037719050  0.006320008
## 2018-04-30 -0.020881780  0.002252618 -0.009539749
## 2018-05-31  0.020044707  0.033712505 -0.011959211
## 2018-06-29  0.006457663  0.040594371 -0.036149440
## 2018-07-31 -0.014368669  0.008314712 -0.022418912

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.

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.257047e-01  5.315780e-02  3.500774e-18  1.702310e-17 -1.074244e-17
## [6]  2.790233e-01  1.617934e-17  4.421142e-01
## 
## $px
##   [1]  7.667113e-03 -2.532106e-03  1.340512e-02 -2.502178e-02 -2.367222e-02
##   [6]  2.616299e-02 -5.294750e-03 -6.860165e-03  9.999671e-03 -2.362065e-03
##  [11] -5.583491e-03  2.715374e-03 -3.233648e-03  9.574581e-03 -6.926578e-03
##  [16] -3.043491e-03 -2.077184e-03  9.470694e-03 -1.577264e-02  1.002615e-02
##  [21]  1.802916e-03  4.400710e-03 -3.094492e-03 -5.628409e-03 -7.409153e-03
##  [26]  8.451517e-03 -8.951472e-05 -8.514392e-03 -4.775250e-03 -9.268624e-04
##  [31]  2.264969e-03 -7.808315e-03  1.373961e-02 -2.047770e-03 -8.468549e-03
##  [36]  1.240904e-03  2.318296e-04 -2.721805e-03 -9.252088e-03 -1.943190e-03
##  [41]  9.891793e-04 -4.838964e-03 -6.019548e-04  6.832087e-04  3.205221e-03
##  [46] -9.628357e-03  1.360581e-02  5.475066e-03 -6.444698e-03 -8.152603e-03
##  [51]  1.819061e-02  9.191017e-03  6.025096e-03  2.035149e-03  8.377494e-03
##  [56]  1.190468e-02  2.871630e-03  8.080172e-03  3.276074e-03 -1.736026e-02
##  [61]  4.546602e-03  9.762903e-03  9.229337e-03 -5.209393e-04  1.521505e-03
##  [66] -2.022831e-03 -4.437809e-03  9.301962e-03 -1.770509e-03 -9.339092e-04
##  [71] -2.400079e-03  2.512596e-03  8.992233e-03  2.438570e-02  1.035363e-03
##  [76]  2.541021e-02  5.849432e-03  1.661876e-03  2.340518e-03  2.957471e-03
##  [81]  1.672047e-03  9.537962e-03  2.369151e-02  1.443883e-02 -1.233771e-04
##  [86]  8.833955e-03 -2.472438e-03 -2.065167e-02  1.821133e-02 -7.318082e-03
##  [91]  9.209022e-03 -1.430622e-02  1.097769e-03  6.132645e-03  1.105989e-02
##  [96] -2.455394e-02  1.105887e-02  1.947366e-03  4.715071e-03 -4.034048e-03
## [101]  8.309698e-03  1.843705e-03  1.236467e-02  1.444980e-02  5.183831e-03
## [106]  3.689206e-03  1.010644e-02  5.835611e-03  2.891429e-03  8.782094e-03
## [111]  1.990533e-02 -3.519940e-02  4.984154e-02 -8.686881e-02 -3.864191e-02
## [116]  8.173756e-02 -2.313956e-03  4.470475e-02  1.441483e-02  1.313790e-02
## [121] -1.255574e-02  5.905676e-03  9.188648e-03  4.859963e-03  3.524144e-03
## [126] -1.313190e-02  1.242398e-02  1.016647e-02  4.613610e-03  1.049998e-02
## [131]  1.688258e-02  5.203873e-03  2.587002e-02  2.481654e-02  1.800873e-02
## [136] -2.850007e-02  7.594170e-03  6.593742e-03 -1.025301e-02 -3.113458e-03
## [141] -1.839580e-03 -1.766618e-02  9.425002e-03  1.273447e-02 -3.714391e-03
## [146] -6.676589e-03 -2.224194e-02  4.240530e-02 -1.228687e-02  3.949814e-04
## [151] -1.523102e-02  8.462286e-03  4.049396e-03  1.031298e-02  1.388506e-03
## [156]  9.522231e-03 -1.843120e-02 -9.200855e-03  1.389125e-02 -1.238456e-02
## [161] -5.467553e-04  4.243564e-03 -1.917336e-02 -2.236436e-02 -1.416053e-02
## [166]  8.107816e-03 -1.790289e-04  5.566641e-03  5.491723e-03  1.170461e-02
## [171]  1.582868e-02  1.051933e-03 -4.715638e-03  1.943519e-02 -5.678856e-03
## [176]  8.989796e-03  1.133641e-02  1.966139e-03  3.069607e-03 -2.454585e-02
## [181]  4.808939e-03  1.334079e-02  9.228532e-03  1.053336e-03  4.403493e-03
## [186]  3.963646e-03 -1.384085e-02  8.014025e-03  3.127430e-03  1.194475e-02
## [191]  2.422513e-03 -1.411349e-02 -9.290325e-03 -4.224909e-03 -5.909057e-03
## [196] -5.601958e-03  1.443012e-02  9.206900e-03  8.700409e-03  1.814441e-02
## [201]  7.191576e-03 -6.788073e-04 -1.713016e-02  3.019656e-03  6.290572e-04
## [206]  1.062270e-03  5.804325e-03  6.802589e-03 -2.608558e-02  4.104030e-03
## [211] -1.024418e-02 -9.219370e-03  1.387835e-03  5.664007e-03  4.336626e-03
## [216] -1.675291e-03  2.092441e-02 -1.556326e-02  1.447670e-03  3.003830e-03
## [221]  2.010301e-03 -1.498183e-02 -1.004814e-02 -1.886914e-02 -1.896711e-02
## [226] -1.781350e-02 -1.757448e-02  5.446039e-03  2.205656e-02 -1.041776e-02
## [231] -1.482979e-02 -2.797865e-02  1.705507e-02 -3.317846e-03 -1.692091e-02
## [236] -2.616247e-03  1.808563e-02  1.882782e-02  3.298637e-03  1.356468e-02
## [241] -2.345708e-02 -1.271401e-02 -2.401010e-02  7.129204e-03 -2.808059e-02
## [246] -2.435407e-02 -1.198100e-02  9.766886e-03 -2.526941e-02  1.602661e-03
## [251]  1.803363e-02 -7.691020e-03  5.169235e-02 -1.751475e-03  1.427929e-02
## [256]  2.660850e-02 -1.197881e-02 -4.190803e-03 -1.307239e-02 -1.307900e-03
## 
## $pm
## [1] 0.001113509
## 
## $ps
## [1] 0.01522423
head(gmvp_mon)
## $pw
## [1] 2.269611e-01 3.694656e-18 1.160833e-17 4.867155e-02 1.813956e-18
## [6] 2.969483e-01 2.780289e-17 4.274190e-01
## 
## $px
##  [1] -0.028027904  0.005564522 -0.008627596  0.009357701 -0.011929069
##  [6] -0.004638286  0.004099941 -0.011111851 -0.020674784  0.011804894
## [11]  0.012694465  0.037144204  0.003186889  0.012808794  0.002175007
## [16]  0.009525022  0.056220492  0.004557049  0.060428850 -0.017060199
## [21]  0.013990061 -0.004728668  0.014081632  0.040469506 -0.005314710
## [26] -0.020809356  0.070215005  0.019852274  0.018395663  0.074077663
## [31]  0.002137901 -0.025618242 -0.016859136  0.015391272  0.038949968
## [36] -0.024521164 -0.034437338 -0.009479639  0.035518642  0.034447478
## [41] -0.011428200  0.025624340  0.006489228 -0.034389744  0.031638101
## [46]  0.001348108  0.019723098 -0.035408479  0.015120071 -0.001632955
## [51] -0.061571107 -0.020024584 -0.033265378  0.022198242 -0.036335853
## [56] -0.062482189 -0.001458700  0.071220462 -0.011503906
## 
## $pm
## [1] 0.004188432
## 
## $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.257047e-01  5.315780e-02  3.500774e-18  1.702310e-17 -1.074244e-17
## [6]  2.790233e-01  1.617934e-17  4.421142e-01
## 
## $px
##   [1]  7.667113e-03 -2.532106e-03  1.340512e-02 -2.502178e-02 -2.367222e-02
##   [6]  2.616299e-02 -5.294750e-03 -6.860165e-03  9.999671e-03 -2.362065e-03
##  [11] -5.583491e-03  2.715374e-03 -3.233648e-03  9.574581e-03 -6.926578e-03
##  [16] -3.043491e-03 -2.077184e-03  9.470694e-03 -1.577264e-02  1.002615e-02
##  [21]  1.802916e-03  4.400710e-03 -3.094492e-03 -5.628409e-03 -7.409153e-03
##  [26]  8.451517e-03 -8.951472e-05 -8.514392e-03 -4.775250e-03 -9.268624e-04
##  [31]  2.264969e-03 -7.808315e-03  1.373961e-02 -2.047770e-03 -8.468549e-03
##  [36]  1.240904e-03  2.318296e-04 -2.721805e-03 -9.252088e-03 -1.943190e-03
##  [41]  9.891793e-04 -4.838964e-03 -6.019548e-04  6.832087e-04  3.205221e-03
##  [46] -9.628357e-03  1.360581e-02  5.475066e-03 -6.444698e-03 -8.152603e-03
##  [51]  1.819061e-02  9.191017e-03  6.025096e-03  2.035149e-03  8.377494e-03
##  [56]  1.190468e-02  2.871630e-03  8.080172e-03  3.276074e-03 -1.736026e-02
##  [61]  4.546602e-03  9.762903e-03  9.229337e-03 -5.209393e-04  1.521505e-03
##  [66] -2.022831e-03 -4.437809e-03  9.301962e-03 -1.770509e-03 -9.339092e-04
##  [71] -2.400079e-03  2.512596e-03  8.992233e-03  2.438570e-02  1.035363e-03
##  [76]  2.541021e-02  5.849432e-03  1.661876e-03  2.340518e-03  2.957471e-03
##  [81]  1.672047e-03  9.537962e-03  2.369151e-02  1.443883e-02 -1.233771e-04
##  [86]  8.833955e-03 -2.472438e-03 -2.065167e-02  1.821133e-02 -7.318082e-03
##  [91]  9.209022e-03 -1.430622e-02  1.097769e-03  6.132645e-03  1.105989e-02
##  [96] -2.455394e-02  1.105887e-02  1.947366e-03  4.715071e-03 -4.034048e-03
## [101]  8.309698e-03  1.843705e-03  1.236467e-02  1.444980e-02  5.183831e-03
## [106]  3.689206e-03  1.010644e-02  5.835611e-03  2.891429e-03  8.782094e-03
## [111]  1.990533e-02 -3.519940e-02  4.984154e-02 -8.686881e-02 -3.864191e-02
## [116]  8.173756e-02 -2.313956e-03  4.470475e-02  1.441483e-02  1.313790e-02
## [121] -1.255574e-02  5.905676e-03  9.188648e-03  4.859963e-03  3.524144e-03
## [126] -1.313190e-02  1.242398e-02  1.016647e-02  4.613610e-03  1.049998e-02
## [131]  1.688258e-02  5.203873e-03  2.587002e-02  2.481654e-02  1.800873e-02
## [136] -2.850007e-02  7.594170e-03  6.593742e-03 -1.025301e-02 -3.113458e-03
## [141] -1.839580e-03 -1.766618e-02  9.425002e-03  1.273447e-02 -3.714391e-03
## [146] -6.676589e-03 -2.224194e-02  4.240530e-02 -1.228687e-02  3.949814e-04
## [151] -1.523102e-02  8.462286e-03  4.049396e-03  1.031298e-02  1.388506e-03
## [156]  9.522231e-03 -1.843120e-02 -9.200855e-03  1.389125e-02 -1.238456e-02
## [161] -5.467553e-04  4.243564e-03 -1.917336e-02 -2.236436e-02 -1.416053e-02
## [166]  8.107816e-03 -1.790289e-04  5.566641e-03  5.491723e-03  1.170461e-02
## [171]  1.582868e-02  1.051933e-03 -4.715638e-03  1.943519e-02 -5.678856e-03
## [176]  8.989796e-03  1.133641e-02  1.966139e-03  3.069607e-03 -2.454585e-02
## [181]  4.808939e-03  1.334079e-02  9.228532e-03  1.053336e-03  4.403493e-03
## [186]  3.963646e-03 -1.384085e-02  8.014025e-03  3.127430e-03  1.194475e-02
## [191]  2.422513e-03 -1.411349e-02 -9.290325e-03 -4.224909e-03 -5.909057e-03
## [196] -5.601958e-03  1.443012e-02  9.206900e-03  8.700409e-03  1.814441e-02
## [201]  7.191576e-03 -6.788073e-04 -1.713016e-02  3.019656e-03  6.290572e-04
## [206]  1.062270e-03  5.804325e-03  6.802589e-03 -2.608558e-02  4.104030e-03
## [211] -1.024418e-02 -9.219370e-03  1.387835e-03  5.664007e-03  4.336626e-03
## [216] -1.675291e-03  2.092441e-02 -1.556326e-02  1.447670e-03  3.003830e-03
## [221]  2.010301e-03 -1.498183e-02 -1.004814e-02 -1.886914e-02 -1.896711e-02
## [226] -1.781350e-02 -1.757448e-02  5.446039e-03  2.205656e-02 -1.041776e-02
## [231] -1.482979e-02 -2.797865e-02  1.705507e-02 -3.317846e-03 -1.692091e-02
## [236] -2.616247e-03  1.808563e-02  1.882782e-02  3.298637e-03  1.356468e-02
## [241] -2.345708e-02 -1.271401e-02 -2.401010e-02  7.129204e-03 -2.808059e-02
## [246] -2.435407e-02 -1.198100e-02  9.766886e-03 -2.526941e-02  1.602661e-03
## [251]  1.803363e-02 -7.691020e-03  5.169235e-02 -1.751475e-03  1.427929e-02
## [256]  2.660850e-02 -1.197881e-02 -4.190803e-03 -1.307239e-02 -1.307900e-03
## 
## $pm
## [1] 0.001113509
## 
## $ps
## [1] 0.01522423
head(minvar_mon)
## $pw
## [1] 2.269611e-01 3.694656e-18 1.160833e-17 4.867155e-02 1.813956e-18
## [6] 2.969483e-01 2.780289e-17 4.274190e-01
## 
## $px
##  [1] -0.028027904  0.005564522 -0.008627596  0.009357701 -0.011929069
##  [6] -0.004638286  0.004099941 -0.011111851 -0.020674784  0.011804894
## [11]  0.012694465  0.037144204  0.003186889  0.012808794  0.002175007
## [16]  0.009525022  0.056220492  0.004557049  0.060428850 -0.017060199
## [21]  0.013990061 -0.004728668  0.014081632  0.040469506 -0.005314710
## [26] -0.020809356  0.070215005  0.019852274  0.018395663  0.074077663
## [31]  0.002137901 -0.025618242 -0.016859136  0.015391272  0.038949968
## [36] -0.024521164 -0.034437338 -0.009479639  0.035518642  0.034447478
## [41] -0.011428200  0.025624340  0.006489228 -0.034389744  0.031638101
## [46]  0.001348108  0.019723098 -0.035408479  0.015120071 -0.001632955
## [51] -0.061571107 -0.020024584 -0.033265378  0.022198242 -0.036335853
## [56] -0.062482189 -0.001458700  0.071220462 -0.011503906
## 
## $pm
## [1] 0.004188432
## 
## $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 & 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.257047e-01  5.315780e-02  3.500774e-18  1.702310e-17 -1.074244e-17
## [6]  2.790233e-01  1.617934e-17  4.421142e-01
## 
## $px
##   [1]  7.667113e-03 -2.532106e-03  1.340512e-02 -2.502178e-02 -2.367222e-02
##   [6]  2.616299e-02 -5.294750e-03 -6.860165e-03  9.999671e-03 -2.362065e-03
##  [11] -5.583491e-03  2.715374e-03 -3.233648e-03  9.574581e-03 -6.926578e-03
##  [16] -3.043491e-03 -2.077184e-03  9.470694e-03 -1.577264e-02  1.002615e-02
##  [21]  1.802916e-03  4.400710e-03 -3.094492e-03 -5.628409e-03 -7.409153e-03
##  [26]  8.451517e-03 -8.951472e-05 -8.514392e-03 -4.775250e-03 -9.268624e-04
##  [31]  2.264969e-03 -7.808315e-03  1.373961e-02 -2.047770e-03 -8.468549e-03
##  [36]  1.240904e-03  2.318296e-04 -2.721805e-03 -9.252088e-03 -1.943190e-03
##  [41]  9.891793e-04 -4.838964e-03 -6.019548e-04  6.832087e-04  3.205221e-03
##  [46] -9.628357e-03  1.360581e-02  5.475066e-03 -6.444698e-03 -8.152603e-03
##  [51]  1.819061e-02  9.191017e-03  6.025096e-03  2.035149e-03  8.377494e-03
##  [56]  1.190468e-02  2.871630e-03  8.080172e-03  3.276074e-03 -1.736026e-02
##  [61]  4.546602e-03  9.762903e-03  9.229337e-03 -5.209393e-04  1.521505e-03
##  [66] -2.022831e-03 -4.437809e-03  9.301962e-03 -1.770509e-03 -9.339092e-04
##  [71] -2.400079e-03  2.512596e-03  8.992233e-03  2.438570e-02  1.035363e-03
##  [76]  2.541021e-02  5.849432e-03  1.661876e-03  2.340518e-03  2.957471e-03
##  [81]  1.672047e-03  9.537962e-03  2.369151e-02  1.443883e-02 -1.233771e-04
##  [86]  8.833955e-03 -2.472438e-03 -2.065167e-02  1.821133e-02 -7.318082e-03
##  [91]  9.209022e-03 -1.430622e-02  1.097769e-03  6.132645e-03  1.105989e-02
##  [96] -2.455394e-02  1.105887e-02  1.947366e-03  4.715071e-03 -4.034048e-03
## [101]  8.309698e-03  1.843705e-03  1.236467e-02  1.444980e-02  5.183831e-03
## [106]  3.689206e-03  1.010644e-02  5.835611e-03  2.891429e-03  8.782094e-03
## [111]  1.990533e-02 -3.519940e-02  4.984154e-02 -8.686881e-02 -3.864191e-02
## [116]  8.173756e-02 -2.313956e-03  4.470475e-02  1.441483e-02  1.313790e-02
## [121] -1.255574e-02  5.905676e-03  9.188648e-03  4.859963e-03  3.524144e-03
## [126] -1.313190e-02  1.242398e-02  1.016647e-02  4.613610e-03  1.049998e-02
## [131]  1.688258e-02  5.203873e-03  2.587002e-02  2.481654e-02  1.800873e-02
## [136] -2.850007e-02  7.594170e-03  6.593742e-03 -1.025301e-02 -3.113458e-03
## [141] -1.839580e-03 -1.766618e-02  9.425002e-03  1.273447e-02 -3.714391e-03
## [146] -6.676589e-03 -2.224194e-02  4.240530e-02 -1.228687e-02  3.949814e-04
## [151] -1.523102e-02  8.462286e-03  4.049396e-03  1.031298e-02  1.388506e-03
## [156]  9.522231e-03 -1.843120e-02 -9.200855e-03  1.389125e-02 -1.238456e-02
## [161] -5.467553e-04  4.243564e-03 -1.917336e-02 -2.236436e-02 -1.416053e-02
## [166]  8.107816e-03 -1.790289e-04  5.566641e-03  5.491723e-03  1.170461e-02
## [171]  1.582868e-02  1.051933e-03 -4.715638e-03  1.943519e-02 -5.678856e-03
## [176]  8.989796e-03  1.133641e-02  1.966139e-03  3.069607e-03 -2.454585e-02
## [181]  4.808939e-03  1.334079e-02  9.228532e-03  1.053336e-03  4.403493e-03
## [186]  3.963646e-03 -1.384085e-02  8.014025e-03  3.127430e-03  1.194475e-02
## [191]  2.422513e-03 -1.411349e-02 -9.290325e-03 -4.224909e-03 -5.909057e-03
## [196] -5.601958e-03  1.443012e-02  9.206900e-03  8.700409e-03  1.814441e-02
## [201]  7.191576e-03 -6.788073e-04 -1.713016e-02  3.019656e-03  6.290572e-04
## [206]  1.062270e-03  5.804325e-03  6.802589e-03 -2.608558e-02  4.104030e-03
## [211] -1.024418e-02 -9.219370e-03  1.387835e-03  5.664007e-03  4.336626e-03
## [216] -1.675291e-03  2.092441e-02 -1.556326e-02  1.447670e-03  3.003830e-03
## [221]  2.010301e-03 -1.498183e-02 -1.004814e-02 -1.886914e-02 -1.896711e-02
## [226] -1.781350e-02 -1.757448e-02  5.446039e-03  2.205656e-02 -1.041776e-02
## [231] -1.482979e-02 -2.797865e-02  1.705507e-02 -3.317846e-03 -1.692091e-02
## [236] -2.616247e-03  1.808563e-02  1.882782e-02  3.298637e-03  1.356468e-02
## [241] -2.345708e-02 -1.271401e-02 -2.401010e-02  7.129204e-03 -2.808059e-02
## [246] -2.435407e-02 -1.198100e-02  9.766886e-03 -2.526941e-02  1.602661e-03
## [251]  1.803363e-02 -7.691020e-03  5.169235e-02 -1.751475e-03  1.427929e-02
## [256]  2.660850e-02 -1.197881e-02 -4.190803e-03 -1.307239e-02 -1.307900e-03
## 
## $pm
## [1] 0.001113509
## 
## $ps
## [1] 0.01522423
head(tangency_mon)
## $pw
## [1] 2.269611e-01 3.694656e-18 1.160833e-17 4.867155e-02 1.813956e-18
## [6] 2.969483e-01 2.780289e-17 4.274190e-01
## 
## $px
##  [1] -0.028027904  0.005564522 -0.008627596  0.009357701 -0.011929069
##  [6] -0.004638286  0.004099941 -0.011111851 -0.020674784  0.011804894
## [11]  0.012694465  0.037144204  0.003186889  0.012808794  0.002175007
## [16]  0.009525022  0.056220492  0.004557049  0.060428850 -0.017060199
## [21]  0.013990061 -0.004728668  0.014081632  0.040469506 -0.005314710
## [26] -0.020809356  0.070215005  0.019852274  0.018395663  0.074077663
## [31]  0.002137901 -0.025618242 -0.016859136  0.015391272  0.038949968
## [36] -0.024521164 -0.034437338 -0.009479639  0.035518642  0.034447478
## [41] -0.011428200  0.025624340  0.006489228 -0.034389744  0.031638101
## [46]  0.001348108  0.019723098 -0.035408479  0.015120071 -0.001632955
## [51] -0.061571107 -0.020024584 -0.033265378  0.022198242 -0.036335853
## [56] -0.062482189 -0.001458700  0.071220462 -0.011503906
## 
## $pm
## [1] 0.004188432
## 
## $ps
## [1] 0.02981274

Q4. Compute GMVP (global minimum variance portfolio) weights and its return by using the covariance derived from single index model.

The attached file “berndt.xslx” contains monthly returns of 15 stocks, market index returns (MARKET), and risk-free monthly rate (RKFREE) for 120 months.

library(readxl)
berndt_2 <- read_excel("~/Desktop/berndt 2.xlsx")
head(berndt_2)
## # A tibble: 6 × 17
##   CITCRP  CONED CONTIL DATGEN    DEC  DELTA GENMIL GERBER    IBM  MOBIL  PANAM
##    <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 -0.115 -0.079 -0.129 -0.084 -0.1   -0.028 -0.099 -0.048 -0.029 -0.046  0.025
## 2 -0.019 -0.003  0.037 -0.097 -0.063 -0.033  0.018  0.16  -0.043 -0.017 -0.073
## 3  0.059  0.022  0.003  0.063  0.01   0.07  -0.023 -0.036 -0.063  0.049  0.184
## 4  0.127 -0.005  0.18   0.179  0.165  0.15   0.046  0.004  0.13   0.077  0.089
## 5  0.005 -0.014  0.061  0.052  0.038 -0.031  0.063  0.046 -0.018 -0.011  0.082
## 6  0.007  0.034 -0.059 -0.023 -0.021  0.023  0.008  0.028 -0.004 -0.043  0.019
## # … with 6 more variables: PSNH <dbl>, TANDY <dbl>, TEXACO <dbl>, WEYER <dbl>,
## #   RKFREE <dbl>, MARKET <dbl>
# Calculate excess returns
excess_returns <- berndt_2[, 1:15] - berndt_2$RKFREE
# Estimate single index model
model <- lm(as.matrix(excess_returns) ~ berndt_2$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)
# Print GMVP weights and return
cat("GMVP weights:\n")
## GMVP weights:
print(w_gmvp)
##                [,1]
## CITCRP -0.035019551
## CONED   0.206305638
## CONTIL  0.004741477
## DATGEN -0.017019946
## DEC     0.050261851
## DELTA  -0.016200504
## GENMIL  0.085444017
## GERBER  0.061954135
## IBM     0.199431480
## MOBIL   0.088580759
## PANAM   0.034576031
## PSNH    0.051524842
## TANDY   0.052886156
## TEXACO  0.173161435
## WEYER   0.059372179
cat("\nGMVP return:\n")
## 
## GMVP return:
print(r_gmvp)
##             [,1]
## [1,] 0.006887038

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this: