#BT02_MVP.R is the backtesting reference # Load libraries
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
##
## 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
## ══ Need to Learn tidyquant? ════════════════════════════════════════════════════
## Business Science offers a 1-hour course - Learning Lab #9: Performance Analysis & Portfolio Optimization with tidyquant!
## </> Learn more at: https://university.business-science.io/p/learning-labs-pro </>
library(lubridate)
library(timetk)
library(purrr)
library(pacman)
p_load(quantmod, quadprog, lpSolve)
library(SIT)
## Loading required package: SIT.date
##
## Attaching package: 'SIT'
## The following object is masked from 'package:purrr':
##
## cross
## The following object is masked from 'package:TTR':
##
## DVI
## The following object is masked from 'package:base':
##
## close
library(readr)
library(xts)
library(PerformanceAnalytics)
library(magrittr)
##
## Attaching package: 'magrittr'
## The following object is masked from 'package:SIT':
##
## add
## The following object is masked from 'package:purrr':
##
## set_names
library(tidyr)
##
## Attaching package: 'tidyr'
## The following object is masked from 'package:magrittr':
##
## extract
library(magrittr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:SIT':
##
## count, lst
## The following objects are masked from 'package:xts':
##
## first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.3 ✓ stringr 1.4.0
## ✓ tibble 3.1.1 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x magrittr::add() masks SIT::add()
## x lubridate::as.difftime() masks base::as.difftime()
## x dplyr::count() masks SIT::count()
## x SIT::cross() masks purrr::cross()
## x lubridate::date() masks base::date()
## x tidyr::extract() masks magrittr::extract()
## x dplyr::filter() masks stats::filter()
## x dplyr::first() masks xts::first()
## x lubridate::intersect() masks base::intersect()
## x dplyr::lag() masks stats::lag()
## x dplyr::last() masks xts::last()
## x tibble::lst() masks dplyr::lst(), SIT::lst()
## x magrittr::set_names() masks purrr::set_names()
## x lubridate::setdiff() masks base::setdiff()
## x lubridate::union() masks base::union()
#Download ETF daily data from yahoo with ticker names of SPY, QQQ, EEM, IWM, EFA, TLT, IYR and GLD from 2010 to current date (See http://etfdb.com/ for ETF information). (Hint: Use library quantmod to help you to download these prices and use adjusted prices for your computation.)
symbols <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
prices <-
getSymbols(symbols, src = 'yahoo', from = "2010-01-01",
auto.assign = TRUE, warnings = FALSE) %>%
map(~Ad(get(.))) %>%
reduce(merge) %>%
`colnames<-`(symbols)
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
head(prices)
## SPY QQQ EEM IWM EFA TLT IYR
## 2010-01-04 90.79006 41.51847 34.10928 54.61730 41.03314 66.13428 30.41554
## 2010-01-05 91.03041 41.51847 34.35684 54.42949 41.06930 66.56142 30.48858
## 2010-01-06 91.09449 41.26806 34.42872 54.37827 41.24289 65.67038 30.47530
## 2010-01-07 91.47905 41.29489 34.22906 54.77949 41.08377 65.78078 30.74751
## 2010-01-08 91.78343 41.63475 34.50059 55.07827 41.40926 65.75137 30.54169
## 2010-01-11 91.91164 41.46482 34.42872 54.85632 41.74921 65.39054 30.68776
## GLD
## 2010-01-04 109.80
## 2010-01-05 109.70
## 2010-01-06 111.51
## 2010-01-07 110.82
## 2010-01-08 111.37
## 2010-01-11 112.85
tail(prices)
## SPY QQQ EEM IWM EFA TLT IYR GLD
## 2021-04-26 417.61 341.63 54.70 228.11 79.13 139.86 98.36 166.84
## 2021-04-27 417.52 340.15 54.67 228.45 78.87 138.64 98.39 166.42
## 2021-04-28 417.40 339.00 55.08 228.84 79.07 138.73 97.98 166.91
## 2021-04-29 420.06 340.22 54.95 227.99 79.10 138.32 98.78 166.22
## 2021-04-30 417.30 337.99 53.98 224.89 78.11 138.64 99.19 165.66
## 2021-05-03 418.20 336.19 53.98 225.99 78.97 138.52 99.03 167.81
monthlyReturn(prices)
## monthly.returns
## 2010-01-29 -0.0524132917
## 2010-02-26 0.0447512492
## 2010-03-31 0.0823067676
## 2010-04-30 0.0567843904
## 2010-05-28 -0.0753663437
## 2010-06-30 -0.0774338459
## 2010-07-30 0.0673090738
## 2010-08-31 -0.0744384416
## 2010-09-30 0.1244528243
## 2010-10-29 0.0414818460
## 2010-11-30 0.0348504384
## 2010-12-31 0.0803336160
## 2011-01-31 -0.0037067212
## 2011-02-28 0.0554206490
## 2011-03-31 0.0252307252
## 2011-04-29 0.0263747203
## 2011-05-31 -0.0179414792
## 2011-06-30 -0.0240459710
## 2011-07-29 -0.0340614820
## 2011-08-31 -0.0889140326
## 2011-09-30 -0.1115029947
## 2011-10-31 0.1510108213
## 2011-11-30 -0.0037834497
## 2011-12-30 0.0051507644
## 2012-01-31 0.0714574484
## 2012-02-29 0.0256898946
## 2012-03-30 0.0248470759
## 2012-04-30 -0.0161814758
## 2012-05-31 -0.0657912300
## 2012-06-29 0.0505211081
## 2012-07-31 -0.0152085341
## 2012-08-31 0.0353539445
## 2012-09-28 0.0326095426
## 2012-10-31 -0.0216924239
## 2012-11-30 0.0055129115
## 2012-12-31 0.0361885782
## 2013-01-31 0.0623813210
## 2013-02-28 0.0100467651
## 2013-03-28 0.0465905319
## 2013-04-30 -0.0034946852
## 2013-05-31 0.0393199470
## 2013-06-28 -0.0081799857
## 2013-07-31 0.0733414138
## 2013-08-30 -0.0316416930
## 2013-09-30 0.0648911375
## 2013-10-31 0.0242002000
## 2013-11-29 0.0395642008
## 2013-12-31 0.0202111391
## 2014-01-31 -0.0277390187
## 2014-02-28 0.0477887177
## 2014-03-31 -0.0074845109
## 2014-04-30 -0.0374763800
## 2014-05-30 0.0078584500
## 2014-06-30 0.0527200084
## 2014-07-31 -0.0605429638
## 2014-08-29 0.0482955046
## 2014-09-30 -0.0592788067
## 2014-10-31 0.0659350405
## 2014-11-28 0.0011152097
## 2014-12-31 0.0289294267
## 2015-01-30 -0.0327706154
## 2015-02-27 0.0594639903
## 2015-03-31 0.0177000106
## 2015-04-30 -0.0256492091
## 2015-05-29 0.0223633155
## 2015-06-30 0.0078295903
## 2015-07-31 -0.0110393695
## 2015-08-31 -0.0631101999
## 2015-09-30 -0.0493628086
## 2015-10-30 0.0562269865
## 2015-11-30 0.0325991141
## 2015-12-31 -0.0503039739
## 2016-01-29 -0.0857753039
## 2016-02-29 -0.0022336808
## 2016-03-31 0.0801344107
## 2016-04-29 0.0167223563
## 2016-05-31 0.0224040061
## 2016-06-30 -0.0001739483
## 2016-07-29 0.0587488019
## 2016-08-31 0.0178408150
## 2016-09-30 0.0107385875
## 2016-10-31 -0.0459706971
## 2016-11-30 0.1106331057
## 2016-12-30 0.0288442862
## 2017-01-31 0.0028180715
## 2017-02-28 0.0193002807
## 2017-03-31 0.0002603814
## 2017-04-28 0.0114924850
## 2017-05-31 -0.0197035783
## 2017-06-30 0.0337439284
## 2017-07-31 0.0085247566
## 2017-08-31 -0.0125784197
## 2017-09-29 0.0630411005
## 2017-10-31 0.0072884359
## 2017-11-30 0.0294119412
## 2017-12-29 -0.0039849392
## 2018-01-31 0.0255803707
## 2018-02-28 -0.0384368815
## 2018-03-29 0.0121749945
## 2018-04-30 0.0098139832
## 2018-05-31 0.0616352933
## 2018-06-29 0.0061438531
## 2018-07-31 0.0164906555
## 2018-08-31 0.0431059385
## 2018-09-28 -0.0232499889
## 2018-10-31 -0.1098783582
## 2018-11-30 0.0172631975
## 2018-12-31 -0.1197215118
## 2019-01-31 0.1132188330
## 2019-02-28 0.0517912487
## 2019-03-29 -0.0209331372
## 2019-04-30 0.0339668717
## 2019-05-31 -0.0785267279
## 2019-06-28 0.0698489643
## 2019-07-31 0.0068167518
## 2019-08-30 -0.0493102771
## 2019-09-30 0.0203706265
## 2019-10-31 0.0271575237
## 2019-11-29 0.0406561044
## 2019-12-31 0.0278652504
## 2020-01-31 -0.0310255378
## 2020-02-28 -0.0884569167
## 2020-03-31 -0.2147708424
## 2020-04-30 0.1384764180
## 2020-05-29 0.0659194910
## 2020-06-30 0.0342994588
## 2020-07-31 0.0291940561
## 2020-08-31 0.0547637963
## 2020-09-30 -0.0326131661
## 2020-10-30 0.0220309097
## 2020-11-30 0.1824417738
## 2020-12-31 0.0864644723
## 2021-01-29 0.0484546056
## 2021-02-26 0.0620256408
## 2021-03-31 0.0139503253
## 2021-04-30 0.0178781432
## 2021-05-03 0.0048913069
weeklyReturn(prices, subset = NULL, type = "log", leading = TRUE)
## weekly.returns
## 2010-01-08 1.088197e-02
## 2010-01-15 -1.310462e-02
## 2010-01-22 -3.110062e-02
## 2010-01-29 -2.659356e-02
## 2010-02-05 -1.407321e-02
## 2010-02-12 2.909861e-02
## 2010-02-19 3.288489e-02
## 2010-02-26 -4.131467e-03
## 2010-03-05 5.904963e-02
## 2010-03-12 1.637655e-02
## 2010-03-19 -4.588075e-03
## 2010-03-26 8.403932e-03
## 2010-04-01 9.101740e-03
## 2010-04-09 2.624877e-02
## 2010-04-16 1.707786e-02
## 2010-04-23 3.668208e-02
## 2010-04-30 -3.402713e-02
## 2010-05-07 -9.188251e-02
## 2010-05-14 6.227923e-02
## 2010-05-21 -6.672631e-02
## 2010-05-28 1.797193e-02
## 2010-06-04 -4.145092e-02
## 2010-06-11 2.147957e-02
## 2010-06-18 2.823924e-02
## 2010-06-25 -3.302450e-02
## 2010-07-02 -7.405379e-02
## 2010-07-09 5.084191e-02
## 2010-07-16 -3.016102e-02
## 2010-07-23 6.205860e-02
## 2010-07-30 6.153102e-04
## 2010-08-06 1.843787e-03
## 2010-08-13 -6.451770e-02
## 2010-08-20 1.308956e-03
## 2010-08-27 8.143500e-03
## 2010-09-03 4.255260e-02
## 2010-09-10 -9.527429e-03
## 2010-09-17 2.311420e-02
## 2010-09-24 2.943962e-02
## 2010-10-01 1.290375e-02
## 2010-10-08 2.070927e-02
## 2010-10-15 1.447366e-02
## 2010-10-22 4.266983e-04
## 2010-10-29 -2.844673e-04
## 2010-11-05 4.817953e-02
## 2010-11-12 -2.386925e-02
## 2010-11-19 5.814266e-03
## 2010-11-26 1.057227e-02
## 2010-12-03 3.291322e-02
## 2010-12-10 2.711618e-02
## 2010-12-17 3.466900e-03
## 2010-12-23 1.344974e-02
## 2010-12-31 -6.116048e-03
## 2011-01-07 3.572220e-03
## 2011-01-14 2.540073e-02
## 2011-01-21 -4.248403e-02
## 2011-01-28 2.845804e-03
## 2011-02-04 3.128446e-02
## 2011-02-11 2.717239e-02
## 2011-02-18 1.547600e-02
## 2011-02-25 -1.413675e-02
## 2011-03-04 3.158747e-03
## 2011-03-11 -2.779670e-02
## 2011-03-18 -9.020210e-03
## 2011-03-25 3.623031e-02
## 2011-04-01 2.782649e-02
## 2011-04-08 -6.645930e-03
## 2011-04-15 -5.612772e-03
## 2011-04-21 1.119316e-02
## 2011-04-29 2.271248e-02
## 2011-05-06 -3.678373e-02
## 2011-05-13 2.878083e-03
## 2011-05-20 -7.813957e-03
## 2011-05-27 9.489138e-03
## 2011-06-03 -3.367468e-02
## 2011-06-10 -3.625807e-02
## 2011-06-17 2.944517e-03
## 2011-06-24 2.162322e-02
## 2011-07-01 5.061109e-02
## 2011-07-08 1.529320e-02
## 2011-07-15 -2.763063e-02
## 2011-07-22 1.486313e-02
## 2011-07-29 -5.264059e-02
## 2011-08-05 -1.114542e-01
## 2011-08-12 -2.182611e-02
## 2011-08-19 -6.680522e-02
## 2011-08-26 5.701369e-02
## 2011-09-02 -9.450085e-03
## 2011-09-09 -1.412189e-02
## 2011-09-16 5.784957e-02
## 2011-09-23 -8.956861e-02
## 2011-09-30 -1.297912e-02
## 2011-10-07 1.849049e-02
## 2011-10-14 8.259985e-02
## 2011-10-21 -1.411840e-04
## 2011-10-28 6.661923e-02
## 2011-11-04 -1.898754e-02
## 2011-11-11 -2.953368e-03
## 2011-11-18 -3.279882e-02
## 2011-11-25 -7.738319e-02
## 2011-12-02 9.828019e-02
## 2011-12-09 1.405047e-02
## 2011-12-16 -3.106530e-02
## 2011-12-23 3.606590e-02
## 2011-12-30 -1.078928e-02
## 2012-01-06 1.400326e-02
## 2012-01-13 2.116717e-02
## 2012-01-20 2.405798e-02
## 2012-01-27 1.861126e-02
## 2012-02-03 3.971769e-02
## 2012-02-10 -2.046130e-02
## 2012-02-17 1.853011e-02
## 2012-02-24 -1.813304e-03
## 2012-03-02 -2.934697e-02
## 2012-03-09 1.668277e-02
## 2012-03-16 1.701102e-02
## 2012-03-23 -8.019919e-04
## 2012-03-30 1.570975e-03
## 2012-04-05 -1.496464e-02
## 2012-04-13 -2.532432e-02
## 2012-04-20 8.388408e-03
## 2012-04-27 2.669459e-02
## 2012-05-04 -4.075637e-02
## 2012-05-11 -2.405124e-03
## 2012-05-18 -5.483513e-02
## 2012-05-25 2.512028e-02
## 2012-06-01 -3.683666e-02
## 2012-06-08 4.178581e-02
## 2012-06-15 3.242590e-03
## 2012-06-22 3.490642e-03
## 2012-06-29 3.131710e-02
## 2012-07-06 1.211816e-02
## 2012-07-13 -9.481825e-03
## 2012-07-20 -1.058598e-02
## 2012-07-27 4.928861e-03
## 2012-08-03 -8.991532e-03
## 2012-08-10 1.652685e-02
## 2012-08-17 2.215056e-02
## 2012-08-24 -1.194231e-02
## 2012-08-31 4.695193e-03
## 2012-09-07 3.797792e-02
## 2012-09-14 2.508028e-02
## 2012-09-21 -1.047097e-02
## 2012-09-28 -2.049810e-02
## 2012-10-05 7.997576e-03
## 2012-10-12 -2.418741e-02
## 2012-10-19 -3.049968e-03
## 2012-10-26 -8.712003e-03
## 2012-11-02 6.158945e-04
## 2012-11-09 -2.254574e-02
## 2012-11-16 -2.422639e-02
## 2012-11-23 3.786461e-02
## 2012-11-30 1.981005e-02
## 2012-12-07 1.217097e-03
## 2012-12-14 2.188496e-03
## 2012-12-21 3.060044e-02
## 2012-12-28 -1.991416e-02
## 2013-01-04 5.550094e-02
## 2013-01-11 1.145673e-03
## 2013-01-18 1.398446e-02
## 2013-01-25 1.534958e-02
## 2013-02-01 4.769836e-03
## 2013-02-08 4.746910e-03
## 2013-02-15 1.029912e-02
## 2013-02-22 -7.769150e-03
## 2013-03-01 -1.539224e-03
## 2013-03-08 3.076828e-02
## 2013-03-15 1.082359e-02
## 2013-03-22 -6.246638e-03
## 2013-03-28 5.671226e-03
## 2013-04-05 -2.900926e-02
## 2013-04-12 2.060812e-02
## 2013-04-19 -3.289319e-02
## 2013-04-26 2.495931e-02
## 2013-05-03 1.982343e-02
## 2013-05-10 2.160956e-02
## 2013-05-17 2.266785e-02
## 2013-05-24 -1.188243e-02
## 2013-05-31 -8.175868e-04
## 2013-06-07 4.081527e-03
## 2013-06-14 -5.002270e-03
## 2013-06-21 -1.796840e-02
## 2013-06-28 1.067552e-02
## 2013-07-05 3.152510e-02
## 2013-07-12 2.975261e-02
## 2013-07-19 1.575005e-02
## 2013-07-26 -1.823368e-03
## 2013-08-02 9.938994e-03
## 2013-08-09 -1.070762e-02
## 2013-08-16 -2.294456e-02
## 2013-08-23 1.454727e-02
## 2013-08-30 -2.741498e-02
## 2013-09-06 1.982577e-02
## 2013-09-13 2.336043e-02
## 2013-09-20 1.684037e-02
## 2013-09-27 2.564451e-03
## 2013-10-04 4.119907e-03
## 2013-10-11 6.148209e-03
## 2013-10-18 2.756943e-02
## 2013-10-25 3.517412e-03
## 2013-11-01 -2.147503e-02
## 2013-11-08 4.680054e-03
## 2013-11-15 1.454175e-02
## 2013-11-22 9.161037e-03
## 2013-11-29 1.473239e-02
## 2013-12-06 -9.115383e-03
## 2013-12-13 -2.047875e-02
## 2013-12-20 3.328725e-02
## 2013-12-27 1.458134e-02
## 2014-01-03 -4.089531e-03
## 2014-01-10 7.210790e-03
## 2014-01-17 3.543047e-03
## 2014-01-24 -2.162429e-02
## 2014-01-31 -1.143588e-02
## 2014-02-07 -1.265101e-02
## 2014-02-14 2.944919e-02
## 2014-02-21 1.393032e-02
## 2014-02-28 1.595346e-02
## 2014-03-07 1.838022e-02
## 2014-03-14 -1.821000e-02
## 2014-03-21 9.062115e-03
## 2014-03-28 -3.452291e-02
## 2014-04-04 1.748391e-03
## 2014-04-11 -3.628670e-02
## 2014-04-17 2.247863e-02
## 2014-04-25 -1.166886e-02
## 2014-05-02 3.755905e-03
## 2014-05-09 -1.801346e-02
## 2014-05-16 -4.189253e-03
## 2014-05-23 2.166723e-02
## 2014-05-30 7.917103e-03
## 2014-06-06 2.640699e-02
## 2014-06-13 -2.505462e-03
## 2014-06-20 2.275136e-02
## 2014-06-27 7.608446e-04
## 2014-07-03 1.626049e-02
## 2014-07-11 -4.018939e-02
## 2014-07-18 -7.587192e-03
## 2014-07-25 -5.530629e-03
## 2014-08-01 -2.604023e-02
## 2014-08-08 1.426335e-02
## 2014-08-15 9.926763e-03
## 2014-08-22 1.592316e-02
## 2014-08-29 1.164957e-02
## 2014-09-05 -1.545444e-03
## 2014-09-12 -8.716226e-03
## 2014-09-19 -1.220899e-02
## 2014-09-26 -2.258099e-02
## 2014-10-03 -1.331715e-02
## 2014-10-10 -4.581269e-02
## 2014-10-17 2.582407e-02
## 2014-10-24 3.285558e-02
## 2014-10-31 4.824577e-02
## 2014-11-07 1.285893e-03
## 2014-11-14 -1.713052e-04
## 2014-11-21 -9.430921e-04
## 2014-11-28 9.430921e-04
## 2014-12-05 8.533224e-03
## 2014-12-12 -2.564698e-02
## 2014-12-19 3.587587e-02
## 2014-12-26 1.741830e-02
## 2015-01-02 -1.344675e-02
## 2015-01-09 -1.150127e-02
## 2015-01-16 -7.427272e-03
## 2015-01-23 1.209468e-02
## 2015-01-30 -2.070053e-02
## 2015-02-06 3.490654e-02
## 2015-02-13 1.425407e-02
## 2015-02-20 6.969789e-03
## 2015-02-27 1.632717e-03
## 2015-03-06 -1.156920e-02
## 2015-03-13 1.181408e-02
## 2015-03-20 2.719386e-02
## 2015-03-27 -2.015736e-02
## 2015-04-02 1.251256e-02
## 2015-04-10 7.751929e-03
## 2015-04-17 -9.518376e-03
## 2015-04-24 1.142693e-02
## 2015-05-01 -3.139505e-02
## 2015-05-08 5.478003e-03
## 2015-05-15 8.201845e-03
## 2015-05-22 6.288267e-03
## 2015-05-29 -4.349269e-03
## 2015-06-05 1.211472e-02
## 2015-06-12 4.217351e-03
## 2015-06-19 1.520980e-02
## 2015-06-26 -2.819404e-03
## 2015-07-02 -2.537747e-02
## 2015-07-10 2.823440e-03
## 2015-07-17 1.304599e-02
## 2015-07-24 -3.380280e-02
## 2015-07-31 1.128672e-02
## 2015-08-07 -2.536788e-02
## 2015-08-14 3.995982e-03
## 2015-08-21 -4.529448e-02
## 2015-08-28 5.116071e-03
## 2015-09-04 -2.407218e-02
## 2015-09-11 2.025937e-02
## 2015-09-18 4.677410e-03
## 2015-09-25 -3.500112e-02
## 2015-10-02 -7.115557e-03
## 2015-10-09 4.515502e-02
## 2015-10-16 -2.768572e-03
## 2015-10-23 3.718625e-03
## 2015-10-30 -4.411972e-03
## 2015-11-06 3.308599e-02
## 2015-11-13 -4.415802e-02
## 2015-11-20 2.373650e-02
## 2015-11-27 2.377137e-02
## 2015-12-04 -1.550144e-02
## 2015-12-11 -5.112376e-02
## 2015-12-18 -3.849731e-03
## 2015-12-24 3.106017e-02
## 2015-12-31 -1.655537e-02
## 2016-01-08 -8.107172e-02
## 2016-01-15 -3.657819e-02
## 2016-01-22 1.240764e-02
## 2016-01-29 1.556337e-02
## 2016-02-05 -4.896483e-02
## 2016-02-12 -1.490041e-02
## 2016-02-19 3.918468e-02
## 2016-02-26 2.691215e-02
## 2016-03-04 4.296311e-02
## 2016-03-11 4.446020e-03
## 2016-03-18 1.294739e-02
## 2016-03-24 -1.923398e-02
## 2016-04-01 3.591465e-02
## 2016-04-08 -1.825428e-02
## 2016-04-15 3.015207e-02
## 2016-04-22 1.465425e-02
## 2016-04-29 -1.438744e-02
## 2016-05-06 -1.405635e-02
## 2016-05-13 -1.151671e-02
## 2016-05-20 1.043415e-02
## 2016-05-27 3.381127e-02
## 2016-06-03 1.188377e-02
## 2016-06-10 8.619018e-04
## 2016-06-17 -1.746888e-02
## 2016-06-24 -1.483863e-02
## 2016-07-01 2.643174e-02
## 2016-07-08 1.753698e-02
## 2016-07-15 2.461113e-02
## 2016-07-22 5.830952e-03
## 2016-07-29 5.549283e-03
## 2016-08-05 1.010827e-02
## 2016-08-12 -8.998968e-04
## 2016-08-19 6.119297e-03
## 2016-08-26 9.755013e-04
## 2016-09-02 1.171417e-02
## 2016-09-09 -2.653173e-02
## 2016-09-16 5.018362e-03
## 2016-09-23 2.391985e-02
## 2016-09-30 -2.058946e-03
## 2016-10-07 -1.117238e-02
## 2016-10-14 -1.973247e-02
## 2016-10-21 5.299966e-03
## 2016-10-28 -2.543000e-02
## 2016-11-04 -1.959256e-02
## 2016-11-11 9.567152e-02
## 2016-11-18 2.810324e-02
## 2016-11-25 2.324086e-02
## 2016-12-02 -2.392831e-02
## 2016-12-09 5.506400e-02
## 2016-12-16 -1.750445e-02
## 2016-12-23 5.072036e-03
## 2016-12-30 -8.786011e-03
## 2017-01-06 6.209919e-03
## 2017-01-13 4.191643e-03
## 2017-01-20 -1.344645e-02
## 2017-01-27 1.293275e-02
## 2017-02-03 4.980846e-03
## 2017-02-10 7.787022e-03
## 2017-02-17 8.446328e-03
## 2017-02-24 -3.312293e-03
## 2017-03-03 0.000000e+00
## 2017-03-10 -1.959201e-02
## 2017-03-17 1.822074e-02
## 2017-03-24 -2.621624e-02
## 2017-03-31 2.198860e-02
## 2017-04-07 -1.435920e-02
## 2017-04-13 -1.337107e-02
## 2017-04-21 2.576434e-02
## 2017-04-28 1.339288e-02
## 2017-05-05 -5.032889e-04
## 2017-05-12 -1.070533e-02
## 2017-05-19 -1.082130e-02
## 2017-05-26 1.103911e-02
## 2017-06-02 1.665614e-02
## 2017-06-09 1.250607e-02
## 2017-06-16 -1.007787e-02
## 2017-06-23 5.122798e-03
## 2017-06-30 7.047818e-05
## 2017-07-07 1.254652e-03
## 2017-07-14 8.787415e-03
## 2017-07-21 5.769131e-03
## 2017-07-28 -4.147648e-03
## 2017-08-04 -1.240393e-02
## 2017-08-11 -2.703652e-02
## 2017-08-18 -1.142296e-02
## 2017-08-25 1.442274e-02
## 2017-09-01 2.624541e-02
## 2017-09-08 -9.294555e-03
## 2017-09-15 2.265458e-02
## 2017-09-22 1.318455e-02
## 2017-09-29 2.895133e-02
## 2017-10-06 1.254079e-02
## 2017-10-13 -4.542107e-03
## 2017-10-20 4.075525e-03
## 2017-10-27 -1.267751e-03
## 2017-11-03 -7.908814e-03
## 2017-11-10 -1.382236e-02
## 2017-11-17 1.274509e-02
## 2017-11-24 1.670066e-02
## 2017-12-01 1.361989e-02
## 2017-12-08 -1.057702e-02
## 2017-12-15 5.466603e-03
## 2017-12-22 1.000284e-02
## 2017-12-29 -4.776526e-03
## 2018-01-05 1.516697e-02
## 2018-01-12 2.153760e-02
## 2018-01-19 2.778308e-03
## 2018-01-26 6.285512e-03
## 2018-02-02 -3.682266e-02
## 2018-02-09 -4.698131e-02
## 2018-02-16 4.379063e-02
## 2018-02-23 4.165137e-03
## 2018-03-02 -1.064213e-02
## 2018-03-09 4.222033e-02
## 2018-03-16 -7.072343e-03
## 2018-03-23 -4.805387e-02
## 2018-03-29 1.179289e-02
## 2018-04-06 -9.728862e-03
## 2018-04-13 2.359545e-02
## 2018-04-20 1.033938e-02
## 2018-04-27 -5.544254e-03
## 2018-05-04 6.700625e-03
## 2018-05-11 2.604962e-02
## 2018-05-18 1.262008e-02
## 2018-05-25 -8.032524e-04
## 2018-06-01 1.290037e-02
## 2018-06-08 1.622500e-02
## 2018-06-15 7.716917e-03
## 2018-06-22 5.946808e-05
## 2018-06-29 -2.442890e-02
## 2018-07-06 3.060267e-02
## 2018-07-13 -4.945323e-03
## 2018-07-20 6.311467e-03
## 2018-07-27 -1.929706e-02
## 2018-08-03 6.814378e-03
## 2018-08-10 6.828089e-03
## 2018-08-17 4.882651e-03
## 2018-08-24 1.906275e-02
## 2018-08-31 8.299284e-03
## 2018-09-07 -1.443732e-02
## 2018-09-14 4.913550e-03
## 2018-09-21 -5.734890e-03
## 2018-09-28 -8.265870e-03
## 2018-10-05 -3.864907e-02
## 2018-10-12 -5.423160e-02
## 2018-10-19 -1.563798e-03
## 2018-10-26 -3.909548e-02
## 2018-11-02 4.325982e-02
## 2018-11-09 5.193443e-04
## 2018-11-16 -1.398610e-02
## 2018-11-23 -2.701695e-02
## 2018-11-30 3.148256e-02
## 2018-12-07 -5.799910e-02
## 2018-12-14 -2.396192e-02
## 2018-12-21 -8.773245e-02
## 2018-12-28 3.437905e-02
## 2019-01-04 3.207119e-02
## 2019-01-11 4.622158e-02
## 2019-01-18 2.508643e-02
## 2019-01-25 6.783468e-05
## 2019-02-01 1.241076e-02
## 2019-02-08 4.481102e-03
## 2019-02-15 4.163066e-02
## 2019-02-22 1.227861e-02
## 2019-03-01 5.688742e-04
## 2019-03-08 -4.260357e-02
## 2019-03-15 2.036623e-02
## 2019-03-22 -3.111435e-02
## 2019-03-29 2.292711e-02
## 2019-04-05 2.763722e-02
## 2019-04-12 1.904465e-03
## 2019-04-18 -1.302191e-02
## 2019-04-26 1.675672e-02
## 2019-05-03 1.417824e-02
## 2019-05-10 -2.465819e-02
## 2019-05-17 -2.443090e-02
## 2019-05-24 -1.350358e-02
## 2019-05-31 -3.324082e-02
## 2019-06-07 3.370509e-02
## 2019-06-14 5.750186e-03
## 2019-06-21 1.804433e-02
## 2019-06-28 1.001788e-02
## 2019-07-05 7.559714e-03
## 2019-07-12 -3.644553e-03
## 2019-07-19 -1.477780e-02
## 2019-07-26 2.173572e-02
## 2019-08-02 -2.982990e-02
## 2019-08-09 -1.292882e-02
## 2019-08-16 -1.330009e-02
## 2019-08-23 -2.176503e-02
## 2019-08-30 2.317684e-02
## 2019-09-06 7.096535e-03
## 2019-09-13 4.825010e-02
## 2019-09-20 -1.202305e-02
## 2019-09-27 -2.434770e-02
## 2019-10-04 -1.345343e-02
## 2019-10-11 7.215475e-03
## 2019-10-18 1.578464e-02
## 2019-10-25 1.553955e-02
## 2019-11-01 1.980270e-02
## 2019-11-08 6.179406e-03
## 2019-11-15 -1.006363e-03
## 2019-11-22 -4.414412e-03
## 2019-11-29 2.218917e-02
## 2019-12-06 6.469750e-03
## 2019-12-13 3.127352e-03
## 2019-12-20 1.969625e-02
## 2019-12-27 -6.630555e-04
## 2020-01-03 -4.410897e-03
## 2020-01-10 -1.454411e-03
## 2020-01-17 2.503404e-02
## 2020-01-24 -2.200648e-02
## 2020-01-31 -2.982550e-02
## 2020-02-07 2.673728e-02
## 2020-02-14 1.815048e-02
## 2020-02-21 -4.776049e-03
## 2020-02-28 -1.327281e-01
## 2020-03-06 -1.327727e-02
## 2020-03-13 -1.895218e-01
## 2020-03-20 -1.639921e-01
## 2020-03-27 1.082724e-01
## 2020-04-03 -7.315160e-02
## 2020-04-09 1.676862e-01
## 2020-04-17 -1.350825e-02
## 2020-04-24 2.863400e-03
## 2020-05-01 2.205695e-02
## 2020-05-08 5.609254e-02
## 2020-05-15 -5.657198e-02
## 2020-05-22 7.550605e-02
## 2020-05-29 2.929448e-02
## 2020-06-05 7.808039e-02
## 2020-06-12 -8.262622e-02
## 2020-06-19 2.285662e-02
## 2020-06-26 -3.111977e-02
## 2020-07-02 4.107067e-02
## 2020-07-10 -7.683889e-03
## 2020-07-17 3.668344e-02
## 2020-07-24 -3.485101e-03
## 2020-07-31 8.724239e-03
## 2020-08-07 5.806656e-02
## 2020-08-14 5.873741e-03
## 2020-08-21 -1.591302e-02
## 2020-08-28 1.610399e-02
## 2020-09-04 -2.788003e-02
## 2020-09-11 -2.417738e-02
## 2020-09-18 2.737912e-02
## 2020-09-25 -4.211625e-02
## 2020-10-02 4.304612e-02
## 2020-10-09 6.245091e-02
## 2020-10-16 -2.153489e-03
## 2020-10-23 4.425077e-03
## 2020-10-30 -6.315360e-02
## 2020-11-06 6.652059e-02
## 2020-11-13 5.863104e-02
## 2020-11-20 2.279292e-02
## 2020-11-27 3.797406e-02
## 2020-12-04 2.056059e-02
## 2020-12-11 1.109663e-02
## 2020-12-18 2.925550e-02
## 2020-12-24 1.861339e-02
## 2020-12-31 -1.493432e-02
## 2021-01-08 5.777033e-02
## 2021-01-15 1.448155e-02
## 2021-01-22 1.996542e-02
## 2021-01-29 -4.490002e-02
## 2021-02-05 7.536153e-02
## 2021-02-12 2.499519e-02
## 2021-02-19 -9.150186e-03
## 2021-02-26 -3.102846e-02
## 2021-03-05 -2.752115e-03
## 2021-03-12 7.040352e-02
## 2021-03-19 -2.888175e-02
## 2021-03-26 -2.641048e-02
## 2021-04-01 1.408824e-02
## 2021-04-09 -5.153190e-03
## 2021-04-16 9.212113e-03
## 2021-04-23 4.928857e-03
## 2021-04-30 -3.861077e-03
## 2021-05-03 4.879383e-03
#Calculate weekly and monthly returns using log returns
prices_weekly <- to.weekly(prices, indexAt = "last", OHLC = FALSE)
weekly_Return_xts <- na.omit(Return.calculate(prices_weekly, method = "log"))
head(weekly_Return_xts)
## SPY QQQ EEM IWM EFA
## 2010-01-15 -0.008150165 -0.015151916 -0.02936168 -0.01310462 -0.003499562
## 2010-01-22 -0.039762828 -0.037555380 -0.05739709 -0.03110062 -0.057354555
## 2010-01-29 -0.016805812 -0.031515101 -0.03415421 -0.02659356 -0.026141568
## 2010-02-05 -0.006820546 0.004430648 -0.02861835 -0.01407321 -0.019238635
## 2010-02-12 0.012854811 0.017985357 0.03278946 0.02909861 0.005230847
## 2010-02-19 0.028289444 0.024157168 0.02415967 0.03288489 0.022734954
## TLT IYR GLD
## 2010-01-15 0.0198483225 -0.006324356 -0.004589865
## 2010-01-22 0.0100512027 -0.042683345 -0.033851813
## 2010-01-29 0.0033633583 -0.008483115 -0.011354685
## 2010-02-05 -0.0000540947 0.003218256 -0.012153577
## 2010-02-12 -0.0196525984 -0.007602937 0.022294528
## 2010-02-19 -0.0082390553 0.048966490 0.022447943
prices_monthly <- to.monthly(prices, indexAt = "last", OHLC = FALSE)
monthly_Return_xts <- na.omit(Return.calculate(prices_monthly, method = "log"))
head(monthly_Return_xts)
## SPY QQQ EEM IWM EFA
## 2010-02-26 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268
## 2010-03-31 0.05909865 0.07428087 0.07798729 0.07909466 0.061898269
## 2010-04-30 0.01535150 0.02217754 -0.00166310 0.05523070 -0.028446722
## 2010-05-28 -0.08278878 -0.07679864 -0.09864508 -0.07835767 -0.118702355
## 2010-06-30 -0.05312741 -0.06161677 -0.01408547 -0.08059619 -0.020834896
## 2010-07-30 0.06606917 0.07006933 0.10375152 0.06514060 0.109844203
## TLT IYR GLD
## 2010-02-26 -0.003430817 0.05313334 0.032223420
## 2010-03-31 -0.020787064 0.09302102 -0.004396042
## 2010-04-30 0.032678511 0.06192375 0.057168648
## 2010-05-28 0.049821843 -0.05851441 0.030056874
## 2010-06-30 0.056358956 -0.04782683 0.023280092
## 2010-07-30 -0.009508418 0.08988455 -0.052210719
#Convert monthly returns into tibble format
monthly_Return_tbl<-monthly_Return_xts %>% as_tibble(rownames = 'date') %>%
mutate(date = as.yearmon(date) %>% as.Date(frac = 1))
monthly_Return_tbl
## # A tibble: 136 x 9
## date SPY QQQ EEM IWM EFA TLT IYR
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2010-02-28 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531
## 2 2010-03-31 0.0591 0.0743 0.0780 0.0791 0.0619 -0.0208 0.0930
## 3 2010-04-30 0.0154 0.0222 -0.00166 0.0552 -0.0284 0.0327 0.0619
## 4 2010-05-31 -0.0828 -0.0768 -0.0986 -0.0784 -0.119 0.0498 -0.0585
## 5 2010-06-30 -0.0531 -0.0616 -0.0141 -0.0806 -0.0208 0.0564 -0.0478
## 6 2010-07-31 0.0661 0.0701 0.104 0.0651 0.110 -0.00951 0.0899
## 7 2010-08-31 -0.0460 -0.0527 -0.0329 -0.0774 -0.0387 0.0806 -0.0131
## 8 2010-09-30 0.0858 0.124 0.111 0.117 0.0951 -0.0255 0.0453
## 9 2010-10-31 0.0375 0.0615 0.0297 0.0406 0.0373 -0.0457 0.0386
## 10 2010-11-30 0 -0.00173 -0.0295 0.0343 -0.0494 -0.0170 -0.0160
## # … with 126 more rows, and 1 more variable: GLD <dbl>
#download 3 Fama French 3 factors data and change to digit numbers (not in percentage)
ffdata <- read_csv("F-F_Research_Data_Factors.csv")
## Warning: Missing column names filled in: 'X1' [1]
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## X1 = col_double(),
## `Mkt-RF` = col_double(),
## SMB = col_double(),
## HML = col_double(),
## RF = col_double()
## )
str(ffdata)
## spec_tbl_df[,5] [1,136 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ X1 : num [1:1136] 192607 192608 192609 192610 192611 ...
## $ Mkt-RF: num [1:1136] 2.96 2.64 0.36 -3.24 2.53 2.62 -0.06 4.18 0.13 0.46 ...
## $ SMB : num [1:1136] -2.3 -1.4 -1.32 0.04 -0.2 -0.04 -0.56 -0.1 -1.6 0.43 ...
## $ HML : num [1:1136] -2.87 4.19 0.01 0.51 -0.35 -0.02 4.83 3.17 -2.67 0.6 ...
## $ RF : num [1:1136] 0.22 0.25 0.23 0.32 0.31 0.28 0.25 0.26 0.3 0.25 ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. `Mkt-RF` = col_double(),
## .. SMB = col_double(),
## .. HML = col_double(),
## .. RF = col_double()
## .. )
head(ffdata)
## # A tibble: 6 x 5
## X1 `Mkt-RF` SMB HML RF
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 192607 2.96 -2.3 -2.87 0.22
## 2 192608 2.64 -1.4 4.19 0.25
## 3 192609 0.36 -1.32 0.01 0.23
## 4 192610 -3.24 0.04 0.51 0.32
## 5 192611 2.53 -0.2 -0.35 0.31
## 6 192612 2.62 -0.04 -0.02 0.28
colnames(ffdata) <- paste(c("date","Mkt-RF","SMB","HML","RF"))
ffdata.digit <- ffdata %>% mutate(date = as.character(date))%>%
mutate(date=ymd(parse_date(date,format="%Y%m"))) %>%
mutate(date=rollback(date))
ffdata.digit.1 <- ffdata.digit %>% select(c(2,3,4,5))/100
head(ffdata.digit.1)
## Mkt-RF SMB HML RF
## 1 0.0296 -0.0230 -0.0287 0.0022
## 2 0.0264 -0.0140 0.0419 0.0025
## 3 0.0036 -0.0132 0.0001 0.0023
## 4 -0.0324 0.0004 0.0051 0.0032
## 5 0.0253 -0.0020 -0.0035 0.0031
## 6 0.0262 -0.0004 -0.0002 0.0028
ffdata.digit.xts <- xts(ffdata.digit.1,order.by=as.Date(ffdata.digit$date))
head(ffdata.digit.xts)
## Mkt-RF SMB HML RF
## 1926-06-30 0.0296 -0.0230 -0.0287 0.0022
## 1926-07-31 0.0264 -0.0140 0.0419 0.0025
## 1926-08-31 0.0036 -0.0132 0.0001 0.0023
## 1926-09-30 -0.0324 0.0004 0.0051 0.0032
## 1926-10-31 0.0253 -0.0020 -0.0035 0.0031
## 1926-11-30 0.0262 -0.0004 -0.0002 0.0028
ffdata.digit_tbl<-ffdata.digit.xts %>% as_tibble(rownames = 'date') %>%
mutate(date = as.yearmon(date) %>% as.Date(frac = 1))
ffdata.digit_tbl
## # A tibble: 1,136 x 5
## date `Mkt-RF` SMB HML RF
## <date> <dbl> <dbl> <dbl> <dbl>
## 1 1926-06-30 0.0296 -0.023 -0.0287 0.0022
## 2 1926-07-31 0.0264 -0.014 0.0419 0.0025
## 3 1926-08-31 0.0036 -0.0132 0.0001 0.0023
## 4 1926-09-30 -0.0324 0.0004 0.0051 0.0032
## 5 1926-10-31 0.0253 -0.002 -0.0035 0.0031
## 6 1926-11-30 0.0262 -0.0004 -0.0002 0.0028
## 7 1926-12-31 -0.0006 -0.0056 0.0483 0.0025
## 8 1927-01-31 0.0418 -0.001 0.0317 0.0026
## 9 1927-02-28 0.0013 -0.016 -0.0267 0.003
## 10 1927-03-31 0.0046 0.0043 0.006 0.0025
## # … with 1,126 more rows
#Merge monthly return data in question 3 and 4 into tibble format.
all.ret.merge <- monthly_Return_tbl %>% left_join(ffdata.digit_tbl)
## Joining, by = "date"
glimpse(all.ret.merge)
## Rows: 136
## Columns: 13
## $ date <date> 2010-02-28, 2010-03-31, 2010-04-30, 2010-05-31, 2010-06-30, …
## $ SPY <dbl> 0.0307179263, 0.0590986496, 0.0153514997, -0.0827887765, -0.0…
## $ QQQ <dbl> 0.045010440, 0.074280867, 0.022177539, -0.076798640, -0.06161…
## $ EEM <dbl> 0.0176080160, 0.0779872921, -0.0016631002, -0.0986450835, -0.…
## $ IWM <dbl> 0.043778818, 0.079094659, 0.055230704, -0.078357667, -0.08059…
## $ EFA <dbl> 0.002664268, 0.061898269, -0.028446722, -0.118702355, -0.0208…
## $ TLT <dbl> -0.0034308174, -0.0207870639, 0.0326785109, 0.0498218431, 0.0…
## $ IYR <dbl> 0.053133344, 0.093021018, 0.061923748, -0.058514411, -0.04782…
## $ GLD <dbl> 0.032223420, -0.004396042, 0.057168648, 0.030056874, 0.023280…
## $ `Mkt-RF` <dbl> 0.0631, 0.0200, -0.0789, -0.0557, 0.0693, -0.0477, 0.0954, 0.…
## $ SMB <dbl> 0.0144, 0.0486, 0.0014, -0.0184, 0.0018, -0.0302, 0.0393, 0.0…
## $ HML <dbl> 0.0211, 0.0291, -0.0239, -0.0452, -0.0036, -0.0190, -0.0323, …
## $ RF <dbl> 1e-04, 1e-04, 1e-04, 1e-04, 1e-04, 1e-04, 1e-04, 1e-04, 1e-04…
n <- 60
ones = rep(1,n)
Y <- all.ret.merge %>% select(2:9) %>% slice (1:60) %>% as.matrix
X <- all.ret.merge %>% select(`Mkt-RF`) %>% slice (1:60) %>% cbind(ones, .) %>% as.matrix
b_hat.1 = solve(t(X)%*%X)%*%t(X)%*%Y
E_hat = Y - X%*%b_hat.1
res_var.1 = diag(t(E_hat)%*%E_hat)/(n-2)
diagD_hat.1 = diag(res_var.1)
cov_factor.1 = var(X[,2])*t(b_hat.1)%*%b_hat.1 + diagD_hat.1
cov_factor.1
## SPY QQQ EEM IWM EFA
## SPY 1.402632e-03 1.860517e-05 2.702352e-05 3.980220e-05 9.068661e-06
## QQQ 1.860517e-05 1.793847e-03 2.164992e-05 3.196972e-05 7.305086e-06
## EEM 2.702352e-05 2.164992e-05 3.448101e-03 4.670743e-05 1.059675e-05
## IWM 3.980220e-05 3.196972e-05 4.670743e-05 2.708017e-03 1.561394e-05
## EFA 9.068661e-06 7.305086e-06 1.059675e-05 1.561394e-05 2.467212e-03
## TLT -1.855051e-05 -1.476642e-05 -2.205654e-05 -3.220752e-05 -7.266941e-06
## IYR 2.572364e-05 2.071248e-05 3.007689e-05 4.430283e-05 1.009497e-05
## GLD 7.943893e-05 6.361483e-05 9.363341e-05 1.373443e-04 3.114832e-05
## TLT IYR GLD
## SPY -1.855051e-05 2.572364e-05 7.943893e-05
## QQQ -1.476642e-05 2.071248e-05 6.361483e-05
## EEM -2.205654e-05 3.007689e-05 9.363341e-05
## IWM -3.220752e-05 4.430283e-05 1.373443e-04
## EFA -7.266941e-06 1.009497e-05 3.114832e-05
## TLT 1.572948e-03 -2.064257e-05 -6.493212e-05
## IYR -2.064257e-05 2.028834e-03 8.841353e-05
## GLD -6.493212e-05 8.841353e-05 2.947990e-03
one.vec2 <- rep(1,8)
top <- solve(cov_factor.1)%*%one.vec2
bot <- t(one.vec2)%*%top
capm.mvp <- top/as.numeric(bot)
capm.mvp
## [,1]
## SPY 0.18597710
## QQQ 0.14638573
## EEM 0.07412321
## IWM 0.09182335
## EFA 0.10898674
## TLT 0.18748897
## IYR 0.12715485
## GLD 0.07806005
w.gmin.si = solve(cov_factor.1)%*%rep(1,nrow(cov_factor.1))
w.gmin.si = w.gmin.si/sum(w.gmin.si)
colnames(w.gmin.si) = "CAPM.MVP"
w.gmin.si
## CAPM.MVP
## SPY 0.18597710
## QQQ 0.14638573
## EEM 0.07412321
## IWM 0.09182335
## EFA 0.10898674
## TLT 0.18748897
## IYR 0.12715485
## GLD 0.07806005
X.3 <- all.ret.merge %>% select(`Mkt-RF`, SMB, HML) %>% slice(1:60) %>% cbind(ones, .) %>% as.matrix
sigF3 <- X.3[,-1] %>% var()
b_hat.3 = solve(t(X.3)%*%X.3)%*%t(X.3)%*%Y
E_hat = Y - X.3%*%b_hat.3
res_var.3 = diag(t(E_hat)%*%E_hat)/(n-4)
diagD_hat.3 = diag(res_var.3)
b_hat.3 <- b_hat.3[-1,]
cov_factor.3 = t(b_hat.3)%*%sigF3%*%b_hat.3 + diagD_hat.3
cov_factor.3
## SPY QQQ EEM IWM EFA
## SPY 1.445420e-03 1.149788e-04 0.0001666431 0.0001614018 1.548080e-04
## QQQ 1.149788e-04 1.852165e-03 0.0001068636 0.0001233903 1.209652e-04
## EEM 1.666431e-04 1.068636e-04 0.0035546027 0.0002328885 2.183187e-04
## IWM 1.614018e-04 1.233903e-04 0.0002328885 0.0027943672 1.795276e-04
## EFA 1.548080e-04 1.209652e-04 0.0002183187 0.0001795276 2.544845e-03
## TLT -1.289990e-04 -1.191879e-04 -0.0001101008 -0.0001340646 -1.346680e-04
## IYR 8.287286e-05 6.114867e-05 0.0001271028 0.0001135234 8.972864e-05
## GLD 4.878199e-05 1.145580e-05 0.0001572394 0.0001375263 1.889377e-05
## TLT IYR GLD
## SPY -1.289990e-04 8.287286e-05 4.878199e-05
## QQQ -1.191879e-04 6.114867e-05 1.145580e-05
## EEM -1.101008e-04 1.271028e-04 1.572394e-04
## IWM -1.340646e-04 1.135234e-04 1.375263e-04
## EFA -1.346680e-04 8.972864e-05 1.889377e-05
## TLT 1.621917e-03 -6.526025e-05 1.940474e-06
## IYR -6.526025e-05 2.098028e-03 9.617295e-05
## GLD 1.940474e-06 9.617295e-05 3.038401e-03
one <- rep(1,8)
top.mat <- solve(cov_factor.3)%*%one
bot.mat <- t(one)%*%top.mat
FF3F.MVP <- top.mat/as.numeric(bot.mat)
FF3F.MVP
## [,1]
## SPY 0.17982237
## QQQ 0.14540973
## EEM 0.05914220
## IWM 0.08104801
## EFA 0.09609111
## TLT 0.23263834
## IYR 0.12233833
## GLD 0.08350992
one.vec <- rep(1, 8)
a.1 <- solve(cov_factor.1)%*%one.vec
b.1 <- t(one.vec)%*%a.1
mvp.weight.1 <- a.1/as.numeric(b.1)
mvp.weight.1
## [,1]
## SPY 0.18597710
## QQQ 0.14638573
## EEM 0.07412321
## IWM 0.09182335
## EFA 0.10898674
## TLT 0.18748897
## IYR 0.12715485
## GLD 0.07806005