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
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
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
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
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
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
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: