##Question 1
# 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
library(lubridate)
library(timetk)
library(purrr)
library(quantmod)
library(tibble)
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.73326 31.82712 52.51540 37.52379 61.13189 28.10299
## 2010-01-05 87.08996 40.73326 32.05812 52.33482 37.55686 61.52666 28.17047
## 2010-01-06 87.15128 40.48758 32.12519 52.28558 37.71560 60.70305 28.15820
## 2010-01-07 87.51922 40.51390 31.93890 52.67136 37.57009 60.80517 28.40971
## 2010-01-08 87.81043 40.84734 32.19227 52.95864 37.86774 60.77794 28.21954
## 2010-01-11 87.93307 40.68061 32.12519 52.74523 38.17861 60.44437 28.35449
## 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)
##Question 2
head(ETFList.xts)
## SPY QQQ EEM IWM EFA TLT IYR
## 2010-01-04 86.86007 40.73326 31.82712 52.51540 37.52379 61.13189 28.10299
## 2010-01-05 87.08996 40.73326 32.05812 52.33482 37.55686 61.52666 28.17047
## 2010-01-06 87.15128 40.48758 32.12519 52.28558 37.71560 60.70305 28.15820
## 2010-01-07 87.51922 40.51390 31.93890 52.67136 37.57009 60.80517 28.40971
## 2010-01-08 87.81043 40.84734 32.19227 52.95864 37.86774 60.77794 28.21954
## 2010-01-11 87.93307 40.68061 32.12519 52.74523 38.17861 60.44437 28.35449
## 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.81043 40.84734 32.19227 52.95864 37.86774 60.77794 28.21954
## 2010-01-15 87.09766 40.23310 31.26077 52.26918 37.73544 61.99632 28.04163
## 2010-01-22 83.70234 38.75014 29.51702 50.66857 35.63205 62.62258 26.86990
## 2010-01-29 82.30744 37.54797 28.52592 49.33887 34.71265 62.83352 26.64292
## 2010-02-05 81.74795 37.71469 27.72112 48.64939 34.05120 62.83016 26.72881
## 2010-02-12 82.80561 38.39915 28.64515 50.08582 34.22980 61.60743 26.52637
## 2010-02-19 85.18159 39.33807 29.34563 51.76026 35.01691 61.10190 27.85760
## 2010-02-26 84.87498 39.27663 29.03265 51.54684 34.80526 62.61839 28.09684
## 2010-03-05 87.56518 40.75085 30.51558 54.68234 36.36625 61.85778 29.10293
## 2010-03-12 88.49257 41.55811 30.82856 55.58524 36.81604 62.00167 30.09062
## ...
## 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.16455 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.54797 28.52592 49.33887 34.71265 62.83352 26.64292
## 2010-02-26 84.87498 39.27663 29.03265 51.54684 34.80526 62.61839 28.09684
## 2010-03-31 90.04214 42.30523 31.38744 55.78952 37.02769 61.33011 30.83587
## 2010-04-30 91.43511 43.25394 31.33530 58.95749 35.98923 63.36738 32.80570
## 2010-05-28 84.17020 40.05644 28.39178 54.51409 31.96103 66.60442 30.94116
## 2010-06-30 79.81513 37.66279 27.99468 50.29283 31.30201 70.46603 29.49617
## 2010-07-30 85.26653 40.39645 31.05519 53.67801 34.93631 69.79919 32.27024
## 2010-08-31 81.43123 38.32416 30.05003 49.68230 33.61046 75.65596 31.85163
## 2010-09-30 88.72376 43.37254 33.58312 55.86540 36.96209 73.74915 33.32624
## 2010-10-29 92.11320 46.12143 34.59579 58.18279 38.36868 70.45311 34.63710
## ...
## 2023-07-31 452.93155 381.65598 41.17138 196.56013 73.53755 97.25170 86.00313
## 2023-08-31 445.57050 375.99600 38.44297 186.56941 70.64384 94.19598 83.35612
## 2023-09-29 424.43512 356.89590 37.24562 175.64836 68.06618 86.70633 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.55034 71.52282 90.10395 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.854797e+03 2.952592e+03 5.033887e+03 3.571265e+03
## 2010-02-26 7.154025e+05 1.552583e+05 8.867415e+04 2.645149e+05 1.278701e+05
## 2010-03-31 6.513178e+07 6.723495e+06 2.871929e+06 1.502167e+07 4.862604e+06
## 2010-04-30 6.020463e+09 2.975411e+08 9.286467e+07 9.006616e+08 1.798640e+08
## 2010-05-28 5.127641e+11 1.221598e+10 2.729458e+09 4.999941e+10 5.928501e+09
## 2010-06-30 4.143909e+13 4.723039e+11 7.913977e+10 2.564611e+12 1.915025e+11
## TLT IYR GLD
## 2010-01-29 6.383352e+03 2.764292e+03 1.069600e+04
## 2010-02-26 4.060986e+05 8.043217e+04 1.181159e+06
## 2010-03-31 2.531217e+07 2.560628e+06 1.298685e+08
## 2010-04-30 1.629278e+09 8.656381e+07 1.511149e+10
## 2010-05-28 1.101464e+11 2.764949e+09 1.811566e+12
## 2010-06-30 7.871727e+12 8.432034e+10 2.222429e+14
tail(ETFList.price)
## SPY QQQ EEM IWM EFA TLT IYR GLD
## 2023-11-30 Inf Inf 7.698264e+262 Inf 4.006450e+288 Inf 6.428217e+299 Inf
## 2023-12-29 Inf Inf 3.172455e+264 Inf 3.058925e+290 Inf 5.918014e+301 Inf
## 2024-01-31 Inf Inf 1.249630e+266 Inf 2.325089e+292 Inf 5.173572e+303 Inf
## 2024-02-29 Inf Inf 5.122233e+267 Inf 1.819382e+294 Inf 4.618123e+305 Inf
## 2024-03-28 Inf Inf 2.155436e+269 Inf 1.471152e+296 Inf 4.197874e+307 Inf
## 2024-04-12 Inf Inf 8.951524e+270 Inf 1.151030e+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.854797e+03 2.952592e+03 5.033887e+03
## 2010-02-26 7.154025e+05 1.552583e+05 8.867415e+04 2.645149e+05
## 2010-03-31 6.513178e+07 6.723495e+06 2.871929e+06 1.502167e+07
## 2010-04-30 6.020463e+09 2.975411e+08 9.286467e+07 9.006616e+08
## 2010-05-28 5.127641e+11 1.221598e+10 2.729458e+09 4.999941e+10
## 2010-06-30 4.143909e+13 4.723039e+11 7.913977e+10 2.564611e+12
## 2010-07-30 3.574807e+15 1.955171e+13 2.536841e+12 1.402278e+14
## 2010-08-31 2.946757e+17 7.688543e+14 7.876898e+13 7.107069e+15
## 2010-09-30 2.643942e+19 3.411602e+16 2.724077e+15 4.041463e+17
## 2010-10-29 2.461859e+21 1.607595e+18 9.696569e+16 2.391851e+19
## ...
## 2020-08-31 1.742977e+286 2.982294e+255 1.374230e+199 3.070991e+257
## 2020-09-30 5.559962e+288 8.134179e+257 5.733166e+200 4.431683e+259
## 2020-10-30 1.729501e+291 2.151283e+260 2.424653e+202 6.535188e+261
## 2020-11-30 5.963170e+293 6.325881e+262 1.115446e+204 1.138342e+264
## 2020-12-31 2.132002e+296 1.951017e+265 5.489433e+205 2.153298e+266
## 2021-01-29 7.545051e+298 6.032968e+267 2.785513e+207 4.269522e+268
## 2021-02-26 2.744192e+301 1.863042e+270 1.424375e+209 8.987965e+270
## 2021-03-31 1.043271e+304 5.851714e+272 7.231718e+210 1.918367e+273
## 2021-04-30 4.175550e+306 1.946268e+275 3.714815e+212 4.167372e+275
## 2021-05-28 Inf 6.395721e+277 1.939089e+214 9.077448e+277
## EFA TLT IYR GLD
## 2010-01-29 3.571265e+03 6.383352e+03 2.764292e+03 1.069600e+04
## 2010-02-26 1.278701e+05 4.060986e+05 8.043217e+04 1.181159e+06
## 2010-03-31 4.862604e+06 2.531217e+07 2.560628e+06 1.298685e+08
## 2010-04-30 1.798640e+08 1.629278e+09 8.656381e+07 1.511149e+10
## 2010-05-28 5.928501e+09 1.101464e+11 2.764949e+09 1.811566e+12
## 2010-06-30 1.915025e+11 7.871727e+12 8.432034e+10 2.222429e+14
## 2010-07-30 6.881895e+12 5.573118e+14 2.805358e+12 2.588907e+16
## 2010-08-31 2.381856e+14 4.272127e+16 9.216056e+13 3.186427e+18
## 2010-09-30 9.042020e+15 3.193379e+18 3.163526e+15 4.107624e+20
## 2010-10-29 3.559724e+17 2.281768e+20 1.127389e+17 5.488607e+22
## ...
## 2020-08-31 1.069981e+217 2.825076e+256 8.236410e+223 1.319472e+273
## 2020-09-30 6.275086e+218 4.258056e+258 6.085265e+225 2.350243e+275
## 2020-10-30 3.551690e+220 6.202078e+260 4.366515e+227 4.164631e+277
## 2020-11-30 2.292035e+222 9.182924e+262 3.398285e+229 6.982837e+279
## 2020-12-31 1.552168e+224 1.343064e+265 2.710108e+231 1.252442e+282
## 2021-01-29 1.043039e+226 1.893449e+267 2.152072e+233 2.174364e+284
## 2021-02-26 7.163628e+227 2.517433e+269 1.749900e+235 3.540082e+286
## 2021-03-31 5.041850e+229 3.172808e+271 1.504033e+237 5.698116e+288
## 2021-04-30 3.651795e+231 4.097783e+273 1.393462e+239 9.496480e+290
## 2021-05-28 2.735817e+233 5.292530e+275 1.303895e+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.03071788 0.04501038 0.017608081 0.04377869 0.002664224
## 2010-03-31 0.05909843 0.07428100 0.077986806 0.07909505 0.061897731
## 2010-04-30 0.01535173 0.02217746 -0.001662715 0.05523062 -0.028446380
## 2010-05-28 -0.08278866 -0.07679874 -0.098645453 -0.07835744 -0.118702499
## 2010-06-30 -0.05312779 -0.06161685 -0.014085054 -0.08059668 -0.020834838
## 2010-07-30 0.06606892 0.07006925 0.103751458 0.06514086 0.109844372
## TLT IYR GLD
## 2010-02-26 -0.003429743 0.05313389 0.032223422
## 2010-03-31 -0.020788100 0.09302128 -0.004396045
## 2010-04-30 0.032678359 0.06192371 0.057168645
## 2010-05-28 0.049821744 -0.05851477 0.030056879
## 2010-06-30 0.056359811 -0.04782717 0.023280093
## 2010-07-30 -0.009508448 0.08988505 -0.052210723
tail(ETF.monthly.returns)
## SPY QQQ EEM IWM EFA
## 2023-11-30 0.08740979 0.10272648 0.07504172 0.08803406 0.078984614
## 2023-12-29 0.04464384 0.05436473 0.03503235 0.11445451 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.094617928 0.11593755 0.024998640
## 2023-12-29 0.083290645 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
##Question 3
famafrench <- read.csv("F-F_Research_Data_Factors.CSV", header = FALSE)
colnames(famafrench) <- c("Date", "Mkt_RF", "SMB", "HML", "RF")
str(famafrench)
## 'data.frame': 1275 obs. of 5 variables:
## $ Date : chr "This file was created by CMPT_ME_BEME_RETS using the 202402 CRSP database." "The 1-month TBill return is from Ibbotson and Associates" "" "192607" ...
## $ Mkt_RF: chr "" " Inc." "Mkt-RF" " 2.96" ...
## $ SMB : chr "" "" "SMB" " -2.56" ...
## $ HML : chr "" "" "HML" " -2.43" ...
## $ RF : chr "" "" "RF" " 0.22" ...
# Convert percentage columns to numeric
famafrench$Mkt_RF <- as.numeric(sub("%", "", famafrench$Mkt_RF))
## Warning: NAs introduced by coercion
famafrench$SMB <- as.numeric(sub("%", "", famafrench$SMB))
## Warning: NAs introduced by coercion
famafrench$HML <- as.numeric(sub("%", "", famafrench$HML))
## Warning: NAs introduced by coercion
famafrench$RF <- as.numeric(sub("%", "", famafrench$RF))
## Warning: NAs introduced by coercion
head(famafrench)
## Date
## 1 This file was created by CMPT_ME_BEME_RETS using the 202402 CRSP database.
## 2 The 1-month TBill return is from Ibbotson and Associates
## 3
## 4 192607
## 5 192608
## 6 192609
## Mkt_RF SMB HML RF
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 2.96 -2.56 -2.43 0.22
## 5 2.64 -1.17 3.82 0.25
## 6 0.36 -1.40 0.13 0.23
##Question 4
final.data <- merge(famafrench,ETF.monthly.returns)
tail(final.data)
## Date Mkt_RF SMB HML RF SPY
## 218020 2019 28.28 -6.14 -10.46 2.15 -0.0236393
## 218021 2020 23.66 13.18 -46.67 0.45 -0.0236393
## 218022 2021 23.56 -3.89 25.49 0.04 -0.0236393
## 218023 2022 -21.60 -6.95 25.81 1.43 -0.0236393
## 218024 2023 21.70 -3.23 -13.58 4.95 -0.0236393
## 218025 Copyright 2024 Kenneth R. French NA NA NA NA -0.0236393
## QQQ EEM IWM EFA TLT IYR
## 218020 -0.01301197 -0.01347902 -0.05678926 -0.03335768 -0.04353937 -0.05840238
## 218021 -0.01301197 -0.01347902 -0.05678926 -0.03335768 -0.04353937 -0.05840238
## 218022 -0.01301197 -0.01347902 -0.05678926 -0.03335768 -0.04353937 -0.05840238
## 218023 -0.01301197 -0.01347902 -0.05678926 -0.03335768 -0.04353937 -0.05840238
## 218024 -0.01301197 -0.01347902 -0.05678926 -0.03335768 -0.04353937 -0.05840238
## 218025 -0.01301197 -0.01347902 -0.05678926 -0.03335768 -0.04353937 -0.05840238
## GLD
## 218020 0.05287428
## 218021 0.05287428
## 218022 0.05287428
## 218023 0.05287428
## 218024 0.05287428
## 218025 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 TLT
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 "This f… NA NA NA NA 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343
## 2 "The 1-… NA NA NA NA 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343
## 3 "" NA NA NA NA 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343
## 4 "192607" 2.96 -2.56 -2.43 0.22 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343
## 5 "192608" 2.64 -1.17 3.82 0.25 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343
## 6 "192609" 0.36 -1.4 0.13 0.23 0.0307 0.0450 0.0176 0.0438 0.00266 -0.00343
## # ℹ 2 more variables: IYR <dbl>, GLD <dbl>