Question 1-4
# Load libraries
library(quantmod)
## Warning: package 'quantmod' was built under R version 4.3.3
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Warning: package 'TTR' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tidyquant)
## Warning: package 'tidyquant' was built under R version 4.3.3
## Loading required package: lubridate
## Warning: package 'lubridate' was built under R version 4.3.3
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
## Loading required package: PerformanceAnalytics
## Warning: package 'PerformanceAnalytics' was built under R version 4.3.3
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library(lubridate)
library(timetk)
## Warning: package 'timetk' was built under R version 4.3.3
library(purrr)
## Warning: package 'purrr' was built under R version 4.3.3
library(tibble)
## Warning: package 'tibble' was built under R version 4.3.3
library(PerformanceAnalytics)
library(magrittr)
## Warning: package 'magrittr' was built under R version 4.3.3
##
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
##
## set_names
library(readr)
## Warning: package 'readr' was built under R version 4.3.3
library(xts)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## ######################### Warning from 'xts' package ##########################
## # #
## # The dplyr lag() function breaks how base R's lag() function is supposed to #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
## # source() into this session won't work correctly. #
## # #
## # 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. #
## # #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## ###############################################################################
##
## Attaching package: 'dplyr'
## 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(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
# Define the ticker names and the time frame
tickers <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
data = new.env()
getSymbols(tickers, src = 'yahoo', from = '2010-01-01', to = Sys.Date(), auto.assign = TRUE)
## [1] "SPY" "QQQ" "EEM" "IWM" "EFA" "TLT" "IYR" "GLD"
ETFList <- merge(Ad(SPY), Ad(QQQ),Ad(EEM), Ad(IWM),Ad(EFA),Ad(TLT),Ad(IYR),Ad(GLD))
colnames(ETFList) <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
head(ETFList)
## SPY QQQ EEM IWM EFA TLT IYR
## 2010-01-04 86.86007 40.73328 31.82711 52.51540 37.52378 61.13185 28.10298
## 2010-01-05 87.09000 40.73328 32.05812 52.33484 37.55685 61.52662 28.17046
## 2010-01-06 87.15131 40.48756 32.12519 52.28559 37.71561 60.70299 28.15819
## 2010-01-07 87.51920 40.51390 31.93890 52.67134 37.57009 60.80514 28.40972
## 2010-01-08 87.81041 40.84734 32.19226 52.95864 37.86773 60.77792 28.21954
## 2010-01-11 87.93307 40.68063 32.12519 52.74523 38.17863 60.44437 28.35450
## 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(ETFList)
## SPY QQQ EEM IWM EFA TLT IYR GLD
## 2024-04-05 518.43 440.47 41.25 204.45 78.97 91.39 87.19 215.14
## 2024-04-08 518.72 440.60 41.52 205.57 79.36 91.38 88.17 216.48
## 2024-04-09 519.32 442.23 41.80 206.38 79.35 92.23 89.23 217.67
## 2024-04-10 514.12 438.37 41.23 200.93 78.30 90.22 85.61 215.61
## 2024-04-11 518.00 445.37 41.48 202.29 78.51 89.81 85.71 219.80
## 2024-04-12 510.85 438.27 40.53 198.69 77.24 90.29 84.80 216.89
ETFList.xts <- xts(ETFList)
head(ETFList.xts)
## SPY QQQ EEM IWM EFA TLT IYR
## 2010-01-04 86.86007 40.73328 31.82711 52.51540 37.52378 61.13185 28.10298
## 2010-01-05 87.09000 40.73328 32.05812 52.33484 37.55685 61.52662 28.17046
## 2010-01-06 87.15131 40.48756 32.12519 52.28559 37.71561 60.70299 28.15819
## 2010-01-07 87.51920 40.51390 31.93890 52.67134 37.57009 60.80514 28.40972
## 2010-01-08 87.81041 40.84734 32.19226 52.95864 37.86773 60.77792 28.21954
## 2010-01-11 87.93307 40.68063 32.12519 52.74523 38.17863 60.44437 28.35450
## 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
ETFList.weekly <- to.weekly(ETFList.xts, indexAt = "last", OHLC = FALSE)
ETFList.weekly
## SPY QQQ EEM IWM EFA TLT IYR
## 2010-01-08 87.81041 40.84734 32.19226 52.95864 37.86773 60.77792 28.21954
## 2010-01-15 87.09766 40.23312 31.26077 52.26917 37.73545 61.99635 28.04163
## 2010-01-22 83.70236 38.75016 29.51702 50.66857 35.63206 62.62255 26.86991
## 2010-01-29 82.30744 37.54796 28.52592 49.33887 34.71264 62.83350 26.64293
## 2010-02-05 81.74796 37.71469 27.72112 48.64941 34.05120 62.83013 26.72881
## 2010-02-12 82.80562 38.39915 28.64514 50.08582 34.22978 61.60743 26.52637
## 2010-02-19 85.18158 39.33805 29.34563 51.76025 35.01691 61.10194 27.85759
## 2010-02-26 84.87502 39.27664 29.03264 51.54684 34.80524 62.61837 28.09685
## 2010-03-05 87.56519 40.75082 30.51558 54.68235 36.36626 61.85777 29.10293
## 2010-03-12 88.49256 41.55812 30.82856 55.58524 36.81604 62.00163 30.09061
## ...
## 2024-02-09 499.64758 436.47284 39.58000 198.83511 75.30000 93.24754 86.81923
## 2024-02-16 497.96283 430.00143 40.08000 201.14925 76.07000 92.16454 86.76942
## 2024-02-23 506.27698 436.20322 40.60000 199.38373 77.40000 93.26742 87.43687
## 2024-03-01 511.26147 445.02155 40.48000 205.36853 78.00000 94.15850 89.22008
## 2024-03-08 510.13498 438.44025 40.82000 206.30615 79.25000 95.41434 90.50518
## 2024-03-15 509.82999 433.34702 40.77000 201.89734 78.89000 92.63354 87.90509
## 2024-03-22 521.21002 446.38000 40.86000 205.07001 79.64000 93.67011 87.89000
## 2024-03-28 523.07001 444.01001 41.08000 210.30000 79.86000 94.30801 89.90000
## 2024-04-05 518.42999 440.47000 41.25000 204.45000 78.97000 91.39000 87.19000
## 2024-04-12 510.85001 438.26999 40.53000 198.69000 77.24000 90.29000 84.80000
## GLD
## 2010-01-08 111.37
## 2010-01-15 110.86
## 2010-01-22 107.17
## 2010-01-29 105.96
## 2010-02-05 104.68
## 2010-02-12 107.04
## 2010-02-19 109.47
## 2010-02-26 109.43
## 2010-03-05 110.81
## 2010-03-12 107.95
## ...
## 2024-02-09 187.60
## 2024-02-16 186.34
## 2024-02-23 188.62
## 2024-03-01 192.89
## 2024-03-08 201.63
## 2024-03-15 199.71
## 2024-03-22 200.35
## 2024-03-28 205.72
## 2024-04-05 215.14
## 2024-04-12 216.89
ETFList.monthly <- to.monthly(ETFList.xts, indexAt = "last", OHLC = FALSE)
ETFList.monthly
## SPY QQQ EEM IWM EFA TLT IYR
## 2010-01-29 82.30744 37.54796 28.52592 49.33887 34.71264 62.83350 26.64293
## 2010-02-26 84.87502 39.27664 29.03264 51.54684 34.80524 62.61837 28.09685
## 2010-03-31 90.04217 42.30521 31.38745 55.78952 37.02769 61.33014 30.83585
## 2010-04-30 91.43511 43.25393 31.33529 58.95749 35.98923 63.36737 32.80570
## 2010-05-28 84.17018 40.05643 28.39178 54.51409 31.96103 66.60445 30.94116
## 2010-06-30 79.81516 37.66280 27.99468 50.29284 31.30201 70.46602 29.49617
## 2010-07-30 85.26658 40.39646 31.05520 53.67801 34.93630 69.79914 32.27023
## 2010-08-31 81.43123 38.32417 30.05004 49.68229 33.61047 75.65596 31.85163
## 2010-09-30 88.72376 43.37254 33.58312 55.86542 36.96209 73.74915 33.32625
## 2010-10-29 92.11318 46.12144 34.59579 58.18279 38.36869 70.45305 34.63710
## ...
## 2023-07-31 452.93155 381.65601 41.17138 196.56013 73.53755 97.25170 86.00314
## 2023-08-31 445.57053 375.99597 38.44297 186.56940 70.64384 94.19599 83.35612
## 2023-09-29 424.43509 356.89594 37.24562 175.64836 68.06618 86.70634 77.19147
## 2023-10-31 415.22119 349.52429 36.01882 163.50385 66.09096 81.96941 74.41558
## 2023-11-30 453.14908 387.33871 38.82574 178.55032 71.52282 90.10396 83.56317
## 2023-12-29 473.83777 408.97919 40.21000 200.20164 75.35000 97.93017 91.06306
## 2024-01-31 481.38434 416.41937 38.39000 192.39148 75.01000 95.73149 86.42075
## 2024-02-29 506.50626 438.42029 39.99000 203.21399 77.25000 93.57542 88.26373
## 2024-03-28 523.07001 444.01001 41.08000 210.30000 79.86000 94.30801 89.90000
## 2024-04-12 510.85001 438.26999 40.53000 198.69000 77.24000 90.29000 84.80000
## GLD
## 2010-01-29 105.96
## 2010-02-26 109.43
## 2010-03-31 108.95
## 2010-04-30 115.36
## 2010-05-28 118.88
## 2010-06-30 121.68
## 2010-07-30 115.49
## 2010-08-31 122.08
## 2010-09-30 127.91
## 2010-10-29 132.62
## ...
## 2023-07-31 182.35
## 2023-08-31 180.02
## 2023-09-29 171.45
## 2023-10-31 184.09
## 2023-11-30 188.75
## 2023-12-29 191.17
## 2024-01-31 188.45
## 2024-02-29 189.31
## 2024-03-28 205.72
## 2024-04-12 216.89
ETFList.price <- cumprod(ETFList.monthly+1)*100
head(ETFList.price)
## SPY QQQ EEM IWM EFA
## 2010-01-29 8.330744e+03 3.854796e+03 2.952592e+03 5.033887e+03 3.571264e+03
## 2010-02-26 7.154028e+05 1.552582e+05 8.867414e+04 2.645149e+05 1.278700e+05
## 2010-03-31 6.513182e+07 6.723490e+06 2.871929e+06 1.502167e+07 4.862600e+06
## 2010-04-30 6.020467e+09 2.975409e+08 9.286466e+07 9.006618e+08 1.798638e+08
## 2010-05-28 5.127643e+11 1.221597e+10 2.729458e+09 4.999942e+10 5.928496e+09
## 2010-06-30 4.143912e+13 4.723034e+11 7.913976e+10 2.564612e+12 1.915024e+11
## TLT IYR GLD
## 2010-01-29 6.383350e+03 2.764293e+03 1.069600e+04
## 2010-02-26 4.060983e+05 8.043223e+04 1.181159e+06
## 2010-03-31 2.531216e+07 2.560628e+06 1.298685e+08
## 2010-04-30 1.629277e+09 8.656383e+07 1.511149e+10
## 2010-05-28 1.101464e+11 2.764949e+09 1.811566e+12
## 2010-06-30 7.871725e+12 8.432037e+10 2.222429e+14
tail(ETFList.price)
## SPY QQQ EEM IWM EFA TLT IYR GLD
## 2023-11-30 Inf Inf 7.698281e+262 Inf 4.006449e+288 Inf 6.428236e+299 Inf
## 2023-12-29 Inf Inf 3.172462e+264 Inf 3.058924e+290 Inf 5.918031e+301 Inf
## 2024-01-31 Inf Inf 1.249633e+266 Inf 2.325088e+292 Inf 5.173587e+303 Inf
## 2024-02-29 Inf Inf 5.122244e+267 Inf 1.819381e+294 Inf 4.618136e+305 Inf
## 2024-03-28 Inf Inf 2.155440e+269 Inf 1.471152e+296 Inf 4.197886e+307 Inf
## 2024-04-12 Inf Inf 8.951544e+270 Inf 1.151029e+298 Inf Inf Inf
ETFList.price.sample <- ETFList.price['201001/202105']
ETFList.price.sample
## SPY QQQ EEM IWM
## 2010-01-29 8.330744e+03 3.854796e+03 2.952592e+03 5.033887e+03
## 2010-02-26 7.154028e+05 1.552582e+05 8.867414e+04 2.645149e+05
## 2010-03-31 6.513182e+07 6.723490e+06 2.871929e+06 1.502167e+07
## 2010-04-30 6.020467e+09 2.975409e+08 9.286466e+07 9.006618e+08
## 2010-05-28 5.127643e+11 1.221597e+10 2.729458e+09 4.999942e+10
## 2010-06-30 4.143912e+13 4.723034e+11 7.913976e+10 2.564612e+12
## 2010-07-30 3.574811e+15 1.955169e+13 2.536841e+12 1.402279e+14
## 2010-08-31 2.946761e+17 7.688541e+14 7.876900e+13 7.107072e+15
## 2010-09-30 2.643945e+19 3.411601e+16 2.724078e+15 4.041466e+17
## 2010-10-29 2.461861e+21 1.607596e+18 9.696570e+16 2.391852e+19
## ...
## 2020-08-31 1.742973e+286 2.982290e+255 1.374234e+199 3.070979e+257
## 2020-09-30 5.559950e+288 8.134166e+257 5.733180e+200 4.431667e+259
## 2020-10-30 1.729498e+291 2.151280e+260 2.424659e+202 6.535164e+261
## 2020-11-30 5.963161e+293 6.325870e+262 1.115448e+204 1.138337e+264
## 2020-12-31 2.131998e+296 1.951014e+265 5.489447e+205 2.153290e+266
## 2021-01-29 7.545036e+298 6.032958e+267 2.785520e+207 4.269507e+268
## 2021-02-26 2.744186e+301 1.863039e+270 1.424378e+209 8.987934e+270
## 2021-03-31 1.043269e+304 5.851705e+272 7.231735e+210 1.918361e+273
## 2021-04-30 4.175542e+306 1.946264e+275 3.714823e+212 4.167358e+275
## 2021-05-28 Inf 6.395710e+277 1.939093e+214 9.077417e+277
## EFA TLT IYR GLD
## 2010-01-29 3.571264e+03 6.383350e+03 2.764293e+03 1.069600e+04
## 2010-02-26 1.278700e+05 4.060983e+05 8.043223e+04 1.181159e+06
## 2010-03-31 4.862600e+06 2.531216e+07 2.560628e+06 1.298685e+08
## 2010-04-30 1.798638e+08 1.629277e+09 8.656383e+07 1.511149e+10
## 2010-05-28 5.928496e+09 1.101464e+11 2.764949e+09 1.811566e+12
## 2010-06-30 1.915024e+11 7.871725e+12 8.432037e+10 2.222429e+14
## 2010-07-30 6.881887e+12 5.573114e+14 2.805358e+12 2.588907e+16
## 2010-08-31 2.381853e+14 4.272124e+16 9.216056e+13 3.186427e+18
## 2010-09-30 9.042012e+15 3.193376e+18 3.163527e+15 4.107624e+20
## 2010-10-29 3.559722e+17 2.281765e+20 1.127389e+17 5.488607e+22
## ...
## 2020-08-31 1.069981e+217 2.825092e+256 8.236429e+223 1.319472e+273
## 2020-09-30 6.275087e+218 4.258082e+258 6.085279e+225 2.350243e+275
## 2020-10-30 3.551690e+220 6.202117e+260 4.366526e+227 4.164631e+277
## 2020-11-30 2.292035e+222 9.182986e+262 3.398295e+229 6.982837e+279
## 2020-12-31 1.552169e+224 1.343073e+265 2.710117e+231 1.252442e+282
## 2021-01-29 1.043040e+226 1.893463e+267 2.152080e+233 2.174364e+284
## 2021-02-26 7.163631e+227 2.517451e+269 1.749906e+235 3.540082e+286
## 2021-03-31 5.041852e+229 3.172832e+271 1.504037e+237 5.698116e+288
## 2021-04-30 3.651796e+231 4.097813e+273 1.393466e+239 9.496480e+290
## 2021-05-28 2.735817e+233 5.292570e+275 1.303899e+241 1.703479e+293
ETF.monthly.returns <- na.omit(Return.calculate(ETFList.monthly, method = "log"))
head(ETF.monthly.returns)
## SPY QQQ EEM IWM EFA
## 2010-02-26 0.03071824 0.04501088 0.017607685 0.04377884 0.002664116
## 2010-03-31 0.05909832 0.07428045 0.077987373 0.07909505 0.061898170
## 2010-04-30 0.01535147 0.02217783 -0.001663323 0.05523068 -0.028446486
## 2010-05-28 -0.08278885 -0.07679893 -0.098645082 -0.07835750 -0.118702393
## 2010-06-30 -0.05312732 -0.06161647 -0.014085189 -0.08059645 -0.020834838
## 2010-07-30 0.06606917 0.07006943 0.103751649 0.06514070 0.109844045
## TLT IYR GLD
## 2010-02-26 -0.003429683 0.05313338 0.032223422
## 2010-03-31 -0.020787237 0.09302058 -0.004396045
## 2010-04-30 0.032677681 0.06192427 0.057168645
## 2010-05-28 0.049822383 -0.05851483 0.030056879
## 2010-06-30 0.056359136 -0.04782691 0.023280093
## 2010-07-30 -0.009508887 0.08988450 -0.052210723
tail(ETF.monthly.returns)
## SPY QQQ EEM IWM EFA
## 2023-11-30 0.08740979 0.10272648 0.07504172 0.08803398 0.078984614
## 2023-12-29 0.04464384 0.05436473 0.03503235 0.11445460 0.052127352
## 2024-01-31 0.01580099 0.01802859 -0.04631871 -0.03979283 -0.004522438
## 2024-02-29 0.05087068 0.05148515 0.04083247 0.05472731 0.029425449
## 2024-03-28 0.03217864 0.01266909 0.02689196 0.03427554 0.033228193
## 2024-04-12 -0.02363930 -0.01301197 -0.01347902 -0.05678926 -0.033357679
## TLT IYR GLD
## 2023-11-30 0.094617919 0.11593755 0.024998640
## 2023-12-29 0.083290561 0.08594939 0.012739687
## 2024-01-31 -0.022707350 -0.05232452 -0.014330371
## 2024-02-29 -0.022779518 0.02110145 0.004553167
## 2024-03-28 0.007798301 0.01836875 0.083130157
## 2024-04-12 -0.043539366 -0.05840238 0.052874283
ETF.monthly.returns.tibble <- as_tibble(ETF.monthly.returns)
ETF.monthly.returns.tibble
## # A tibble: 171 × 8
## SPY QQQ EEM IWM EFA TLT IYR GLD
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
## 2 0.0591 0.0743 0.0780 0.0791 0.0619 -0.0208 0.0930 -0.00440
## 3 0.0154 0.0222 -0.00166 0.0552 -0.0284 0.0327 0.0619 0.0572
## 4 -0.0828 -0.0768 -0.0986 -0.0784 -0.119 0.0498 -0.0585 0.0301
## 5 -0.0531 -0.0616 -0.0141 -0.0806 -0.0208 0.0564 -0.0478 0.0233
## 6 0.0661 0.0701 0.104 0.0651 0.110 -0.00951 0.0899 -0.0522
## 7 -0.0460 -0.0527 -0.0329 -0.0774 -0.0387 0.0806 -0.0131 0.0555
## 8 0.0858 0.124 0.111 0.117 0.0951 -0.0255 0.0453 0.0467
## 9 0.0375 0.0615 0.0297 0.0406 0.0373 -0.0457 0.0386 0.0362
## 10 0 -0.00173 -0.0295 0.0343 -0.0494 -0.0170 -0.0160 0.0209
## # ℹ 161 more rows
setwd("D:/School Folder/HW/Investment")
famafrench <- read.csv("F-F_Research_Data_Factors.csv", header = TRUE)
str(famafrench)
## 'data.frame': 1172 obs. of 5 variables:
## $ date : int 192607 192608 192609 192610 192611 192612 192701 192702 192703 192704 ...
## $ Mkt.RF: num 2.96 2.64 0.36 -3.24 2.53 2.62 -0.06 4.18 0.13 0.46 ...
## $ SMB : num -2.56 -1.17 -1.4 -0.09 -0.1 -0.03 -0.37 0.04 -1.65 0.3 ...
## $ HML : num -2.43 3.82 0.13 0.7 -0.51 -0.05 4.54 2.94 -2.61 0.81 ...
## $ RF : num 0.22 0.25 0.23 0.32 0.31 0.28 0.25 0.26 0.3 0.25 ...
head(famafrench)
## date Mkt.RF SMB HML RF
## 1 192607 2.96 -2.56 -2.43 0.22
## 2 192608 2.64 -1.17 3.82 0.25
## 3 192609 0.36 -1.40 0.13 0.23
## 4 192610 -3.24 -0.09 0.70 0.32
## 5 192611 2.53 -0.10 -0.51 0.31
## 6 192612 2.62 -0.03 -0.05 0.28
colnames(famafrench) <- paste(c("date","Mkt-RF","SMB","HML","RF"))
famafrench.digit <- famafrench %>% mutate(date = as.character(date))%>%
mutate(date=ymd(parse_date(date,format="%Y%m"))) %>%
mutate(date=rollback(date))
head(famafrench.digit)
## date Mkt-RF SMB HML RF
## 1 1926-06-30 2.96 -2.56 -2.43 0.22
## 2 1926-07-31 2.64 -1.17 3.82 0.25
## 3 1926-08-31 0.36 -1.40 0.13 0.23
## 4 1926-09-30 -3.24 -0.09 0.70 0.32
## 5 1926-10-31 2.53 -0.10 -0.51 0.31
## 6 1926-11-30 2.62 -0.03 -0.05 0.28
famafrench.digit.xts <- xts(famafrench.digit[,-1],order.by=as.Date(famafrench.digit$date))
head(famafrench.digit.xts)
## Mkt-RF SMB HML RF
## 1926-06-30 2.96 -2.56 -2.43 0.22
## 1926-07-31 2.64 -1.17 3.82 0.25
## 1926-08-31 0.36 -1.40 0.13 0.23
## 1926-09-30 -3.24 -0.09 0.70 0.32
## 1926-10-31 2.53 -0.10 -0.51 0.31
## 1926-11-30 2.62 -0.03 -0.05 0.28
#MERGING
final.data <- merge(famafrench.digit,ETF.monthly.returns)
tail(final.data)
## date Mkt-RF SMB HML RF SPY QQQ EEM
## 200407 2023-08-31 -5.24 -2.51 1.52 0.43 -0.0236393 -0.01301197 -0.01347902
## 200408 2023-09-30 -3.19 -3.87 0.19 0.47 -0.0236393 -0.01301197 -0.01347902
## 200409 2023-10-31 8.84 -0.02 1.64 0.44 -0.0236393 -0.01301197 -0.01347902
## 200410 2023-11-30 4.87 6.34 4.93 0.43 -0.0236393 -0.01301197 -0.01347902
## 200411 2023-12-31 0.71 -5.09 -2.38 0.47 -0.0236393 -0.01301197 -0.01347902
## 200412 2024-01-31 5.06 -0.24 -3.48 0.42 -0.0236393 -0.01301197 -0.01347902
## IWM EFA TLT IYR GLD
## 200407 -0.05678926 -0.03335768 -0.04353937 -0.05840238 0.05287428
## 200408 -0.05678926 -0.03335768 -0.04353937 -0.05840238 0.05287428
## 200409 -0.05678926 -0.03335768 -0.04353937 -0.05840238 0.05287428
## 200410 -0.05678926 -0.03335768 -0.04353937 -0.05840238 0.05287428
## 200411 -0.05678926 -0.03335768 -0.04353937 -0.05840238 0.05287428
## 200412 -0.05678926 -0.03335768 -0.04353937 -0.05840238 0.05287428
final.data.tibble <- as_tibble(final.data)
head(final.data.tibble)
## # A tibble: 6 × 13
## date `Mkt-RF` SMB HML RF SPY QQQ EEM IWM EFA
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1926-06-30 2.96 -2.56 -2.43 0.22 0.0307 0.0450 0.0176 0.0438 0.00266
## 2 1926-07-31 2.64 -1.17 3.82 0.25 0.0307 0.0450 0.0176 0.0438 0.00266
## 3 1926-08-31 0.36 -1.4 0.13 0.23 0.0307 0.0450 0.0176 0.0438 0.00266
## 4 1926-09-30 -3.24 -0.09 0.7 0.32 0.0307 0.0450 0.0176 0.0438 0.00266
## 5 1926-10-31 2.53 -0.1 -0.51 0.31 0.0307 0.0450 0.0176 0.0438 0.00266
## 6 1926-11-30 2.62 -0.03 -0.05 0.28 0.0307 0.0450 0.0176 0.0438 0.00266
## # ℹ 3 more variables: TLT <dbl>, IYR <dbl>, GLD <dbl>
Question 5
final.data2 <- final.data.tibble[final.data.tibble$date>="2019-03-01"&final.data.tibble$date<="2024-02-29",]
head(final.data2)
## # A tibble: 6 × 13
## date `Mkt-RF` SMB HML RF SPY QQQ EEM IWM EFA
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2019-03-31 3.97 -1.74 2.15 0.21 0.0307 0.0450 0.0176 0.0438 0.00266
## 2 2019-04-30 -6.94 -1.32 -2.37 0.21 0.0307 0.0450 0.0176 0.0438 0.00266
## 3 2019-05-31 6.93 0.29 -0.71 0.18 0.0307 0.0450 0.0176 0.0438 0.00266
## 4 2019-06-30 1.19 -1.93 0.48 0.19 0.0307 0.0450 0.0176 0.0438 0.00266
## 5 2019-07-31 -2.58 -2.38 -4.78 0.16 0.0307 0.0450 0.0176 0.0438 0.00266
## 6 2019-08-31 1.43 -0.96 6.75 0.18 0.0307 0.0450 0.0176 0.0438 0.00266
## # ℹ 3 more variables: TLT <dbl>, IYR <dbl>, GLD <dbl>
#BETA
spy_rf <- final.data.tibble$SPY-final.data.tibble$RF
qqq_rf <- final.data.tibble$QQQ-final.data.tibble$RF
eem_rf <- final.data.tibble$EEM-final.data.tibble$RF
iwm_rf <- final.data.tibble$IWM-final.data.tibble$RF
efa_rf <- final.data.tibble$EFA-final.data.tibble$RF
tlt_rf <- final.data.tibble$TLT-final.data.tibble$RF
iyr_rf <- final.data.tibble$IYR-final.data.tibble$RF
gld_rf <- final.data.tibble$GLD-final.data.tibble$RF
y <- cbind(spy_rf,qqq_rf,eem_rf,iwm_rf,efa_rf,tlt_rf,iyr_rf,gld_rf)
n <- nrow(y)
one.vec <- rep(1,n)
x <- cbind(one.vec,final.data.tibble$`Mkt-RF`)
x.mat <- as.matrix(x)
beta <- solve(t(x)%*%x)%*%t(x)%*%y
beta
## spy_rf qqq_rf eem_rf iwm_rf efa_rf
## one.vec -0.259386424 -0.255692847 -0.268008560 -0.261916137 -0.265385260
## 0.003069948 0.003069948 0.003069948 0.003069948 0.003069948
## tlt_rf iyr_rf gld_rf
## one.vec -0.267942425 -0.263291938 -0.265873476
## 0.003069948 0.003069948 0.003069948
#RESIDUAL
e.hat <- y - x%*%beta
res.var <- diag(t(e.hat)%*%e.hat)/(n-2)
d <- diag(res.var);d
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.06426389 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000
## [2,] 0.00000000 0.06499292 0.00000000 0.00000000 0.0000000 0.00000000
## [3,] 0.00000000 0.00000000 0.06532816 0.00000000 0.0000000 0.00000000
## [4,] 0.00000000 0.00000000 0.00000000 0.06573423 0.0000000 0.00000000
## [5,] 0.00000000 0.00000000 0.00000000 0.00000000 0.0646135 0.00000000
## [6,] 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.06405192
## [7,] 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000
## [8,] 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000
## [,7] [,8]
## [1,] 0.00000000 0.00000000
## [2,] 0.00000000 0.00000000
## [3,] 0.00000000 0.00000000
## [4,] 0.00000000 0.00000000
## [5,] 0.00000000 0.00000000
## [6,] 0.00000000 0.00000000
## [7,] 0.06491261 0.00000000
## [8,] 0.00000000 0.06453739
#COVARIANCE MATRIX_Single Factor Model
cov.mat <- var(final.data.tibble$`Mkt-RF`)*t(beta)%*%beta + d
cov.mat
## spy_rf qqq_rf eem_rf iwm_rf efa_rf tlt_rf iyr_rf gld_rf
## spy_rf 1.982596 1.891019 1.982089 1.937038 1.962691 1.981600 1.947212 1.966301
## qqq_rf 1.891019 1.929089 1.953869 1.909459 1.934747 1.953387 1.919488 1.938306
## eem_rf 1.982089 1.953869 2.113294 2.001417 2.027923 2.047461 2.011929 2.031653
## iwm_rf 1.937038 1.909459 2.001417 2.021661 1.981830 2.000924 1.966200 1.985475
## efa_rf 1.962691 1.934747 2.027923 1.981830 2.072690 2.027423 1.992239 2.011770
## tlt_rf 1.981600 1.953387 2.047461 2.000924 2.027423 2.111008 2.011433 2.031152
## iyr_rf 1.947212 1.919488 2.011929 1.966200 1.992239 2.011433 2.041439 1.995903
## gld_rf 1.966301 1.938306 2.031653 1.985475 2.011770 2.031152 1.995903 2.080008
#MVP MONTHLY RETURNS OF 8 ASSET_CAPM
one.vec2 <- rep(1,8)
top <- solve(cov.mat)%*%one.vec2
bot <- t(one.vec2)%*%top
mvp_capm <- top/as.numeric(bot)
mvp_capm
## [,1]
## spy_rf 0.57446784
## qqq_rf 0.97179999
## eem_rf -0.37261239
## iwm_rf 0.28819265
## efa_rf -0.08827469
## tlt_rf -0.37270073
## iyr_rf 0.14125384
## gld_rf -0.14212650
Question 6
t <- dim(final.data2)[1]
markets <- final.data2[,c(2,3,4)]
final.data3 <- final.data2[,c(-1,-2,-3,-4,-5)]
head(final.data3)
## # A tibble: 6 × 8
## SPY QQQ EEM IWM EFA TLT IYR GLD
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
## 2 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
## 3 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
## 4 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
## 5 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
## 6 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343 0.0531 0.0322
final.data3 <- as.matrix(final.data3)
n <- dim(final.data3)[2]
one_vec <- rep(1,t)
p <- cbind(one_vec,markets)
p <- as.matrix(p)
b.hat <- solve(t(p)%*%p)%*%t(p)%*%final.data3
res <- final.data3-p%*%b.hat
diag.d <- diag(t(res)%*%res)/(t-6)
diag.d
## SPY QQQ EEM IWM EFA TLT
## 0.001785743 0.002515203 0.002850641 0.003256948 0.002135560 0.001573651
## IYR GLD
## 0.002434840 0.002059405
#R-SQUARE
retvar <- apply(final.data3,2,var)
rsq <- 1-diag(t(res)%*%res)/((t-1)/retvar)
res.stdev <- sqrt(diag.d)
factor.cov <- var(final.data3)*t(b.hat)%*%b.hat+diag(diag.d)
stdev <- sqrt(diag(factor.cov))
factor.cor <- factor.cov/(stdev%*%t(stdev))
factor.cor
## SPY QQQ EEM IWM EFA
## SPY 1.000000e+00 1.410862e-04 1.596317e-05 7.714674e-05 4.371073e-05
## QQQ 1.410862e-04 1.000000e+00 1.945526e-05 9.073677e-05 5.249569e-05
## EEM 1.596317e-05 1.945526e-05 1.000000e+00 1.163057e-05 8.107627e-06
## IWM 7.714674e-05 9.073677e-05 1.163057e-05 1.000000e+00 2.998374e-05
## EFA 4.371073e-05 5.249569e-05 8.107627e-06 2.998374e-05 1.000000e+00
## TLT -2.705240e-06 -3.872729e-07 -4.404614e-07 -3.400379e-06 -1.303920e-06
## IYR 5.583792e-05 6.459816e-05 8.618905e-06 4.010433e-05 2.263226e-05
## GLD 4.451258e-06 7.390218e-06 2.575482e-06 1.293593e-06 3.027566e-06
## TLT IYR GLD
## SPY -2.705240e-06 5.583792e-05 4.451258e-06
## QQQ -3.872729e-07 6.459816e-05 7.390218e-06
## EEM -4.404614e-07 8.618905e-06 2.575482e-06
## IWM -3.400379e-06 4.010433e-05 1.293593e-06
## EFA -1.303920e-06 2.263226e-05 3.027566e-06
## TLT 1.000000e+00 2.773788e-06 2.335800e-06
## IYR 2.773788e-06 1.000000e+00 5.337380e-06
## GLD 2.335800e-06 5.337380e-06 1.000000e+00
#SAMPLE VARIANCE & CORRELATION
sample.cov <- cov(final.data3)
sample.cor <- cor(final.data3)
sample.cov
## SPY QQQ EEM IWM EFA
## SPY 0.0017848578 1.949350e-03 0.0016425477 2.139406e-03 0.0017095320
## QQQ 0.0019493497 2.513956e-03 0.0017652194 2.218818e-03 0.0018104046
## EEM 0.0016425477 1.765219e-03 0.0028492277 2.118034e-03 0.0020822805
## IWM 0.0021394056 2.218818e-03 0.0021180341 3.255334e-03 0.0020754297
## EFA 0.0017095320 1.810405e-03 0.0020822805 2.075430e-03 0.0021345014
## TLT -0.0002003662 -2.529289e-05 -0.0002142312 -4.457372e-04 -0.0002410550
## IYR 0.0016109011 1.643322e-03 0.0016328566 2.047689e-03 0.0016297248
## GLD 0.0001908809 2.794472e-04 0.0007252614 9.817717e-05 0.0003240559
## TLT IYR GLD
## SPY -2.003662e-04 0.0016109011 1.908809e-04
## QQQ -2.529289e-05 0.0016433220 2.794472e-04
## EEM -2.142312e-04 0.0016328566 7.252614e-04
## IWM -4.457372e-04 0.0020476891 9.817717e-05
## EFA -2.410550e-04 0.0016297248 3.240559e-04
## TLT 1.572871e-03 0.0003782588 4.734690e-04
## IYR 3.782588e-04 0.0024336337 4.214102e-04
## GLD 4.734690e-04 0.0004214102 2.058384e-03
#MVP MONTHLY RETURNS OF 8 ASSET_FF 3 FACTOR
one <- rep(1,8)
top.mat <- solve(factor.cov)%*%one
bot.mat <- t(one)%*%top.mat
MVP_FF3 <- top.mat/as.numeric(bot.mat)
MVP_FF3
## [,1]
## SPY 0.15486361
## QQQ 0.10992687
## EEM 0.09704260
## IWM 0.08491187
## EFA 0.12952449
## TLT 0.17580407
## IYR 0.11359495
## GLD 0.13433155