Question#1.
library(plyr)
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
tickers<-c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
data.env<-new.env()
l_ply(tickers, function(sym) try(getSymbols(sym, from="2010-01-01", env=data.env), silent=T))
## '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.
stocks<- tickers[tickers %in% ls(data.env)]
data<- xts()
for(i in seq_along(stocks)){
symbol<-stocks[i]
data <- merge(data, Ad(get(symbol, envir=data.env)))
}
data<- xts(coredata(data), order.by = as.Date(index(data), tz=""))
head(data)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted
## 2010-01-04 94.13087 42.07555 35.67281 56.09659
## 2010-01-05 94.38007 42.07555 35.93174 55.90370
## 2010-01-06 94.44649 41.82175 36.00691 55.85109
## 2010-01-07 94.84521 41.84896 35.79811 56.26318
## 2010-01-08 95.16080 42.19340 36.08208 56.57005
## 2010-01-11 95.29370 42.02117 36.00691 56.34210
## EFA.Adjusted TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2010-01-04 43.40944 68.49980 32.26275 109.80
## 2010-01-05 43.44770 68.94214 32.34021 109.70
## 2010-01-06 43.63134 68.01926 32.32613 111.51
## 2010-01-07 43.46300 68.13365 32.61488 110.82
## 2010-01-08 43.80734 68.10319 32.39655 111.37
## 2010-01-11 44.16698 67.72945 32.55150 112.85
Question#2
library(fBasics)
## Loading required package: timeDate
## Loading required package: timeSeries
##
## Attaching package: 'timeSeries'
## The following object is masked from 'package:zoo':
##
## time<-
##
## Attaching package: 'fBasics'
## The following object is masked from 'package:TTR':
##
## volatility
sigma=cov(data)
std=sqrt(diag(sigma))
ones=rep(1,8)
one.vec=matrix(ones, ncol=1)
a=inv(sigma)%*%one.vec
b=t(one.vec)%*%a
mvp.w=a/as.numeric(b)
mvp.w
## [,1]
## SPY.Adjusted -0.49371905
## QQQ.Adjusted 0.37573497
## EEM.Adjusted 0.13361155
## IWM.Adjusted 0.06340693
## EFA.Adjusted 0.48794386
## TLT.Adjusted 0.07288760
## IYR.Adjusted 0.41012486
## GLD.Adjusted -0.04999072
mvp.ret<-sum((mvp.w)*colMeans(data))
mvp.ret
## [1] 12.65134
print(cov(data))
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted
## SPY.Adjusted 3401.8926 2410.33475 125.942580 1846.05711
## QQQ.Adjusted 2410.3347 1731.70895 93.643142 1302.09670
## EEM.Adjusted 125.9426 93.64314 17.678257 73.43056
## IWM.Adjusted 1846.0571 1302.09670 73.430564 1019.96660
## EFA.Adjusted 473.8619 329.10445 23.997672 265.45829
## TLT.Adjusted 773.1779 537.76152 10.908745 403.03137
## IYR.Adjusted 797.9245 556.76620 24.078669 429.45478
## GLD.Adjusted -551.9669 -370.66045 0.792119 -300.74451
## EFA.Adjusted TLT.Adjusted IYR.Adjusted GLD.Adjusted
## SPY.Adjusted 473.86193 773.17793 797.92447 -551.966916
## QQQ.Adjusted 329.10445 537.76152 556.76620 -370.660454
## EEM.Adjusted 23.99767 10.90874 24.07867 0.792119
## IWM.Adjusted 265.45829 403.03137 429.45478 -300.744511
## EFA.Adjusted 76.31504 93.83577 108.23969 -83.109688
## TLT.Adjusted 93.83577 268.21760 209.17469 -78.081570
## IYR.Adjusted 108.23969 209.17469 201.51089 -119.296035
## GLD.Adjusted -83.10969 -78.08157 -119.29604 335.055396
print(std)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 58.325745 41.613807 4.204552 31.936916 8.735848
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 16.377350 14.195453 18.304518
Question#3
data.weekly<-data[endpoints(data, on="weeks", k=1),]
library(fBasics)
sigma=cov(data.weekly)
std=sqrt(diag(sigma))
ones=rep(1,8)
one.vec=matrix(ones, ncol=1)
a=inv(sigma)%*%one.vec
b=t(one.vec)%*%a
mvp.w=a/as.numeric(b)
mvp.w
## [,1]
## SPY.Adjusted -0.49237335
## QQQ.Adjusted 0.37049779
## EEM.Adjusted 0.14678672
## IWM.Adjusted 0.06909011
## EFA.Adjusted 0.47167656
## TLT.Adjusted 0.07559435
## IYR.Adjusted 0.41061688
## GLD.Adjusted -0.05188906
mvp.ret<-sum((mvp.w)*colMeans(data.weekly))
mvp.ret
## [1] 12.65396
print(cov(data.weekly))
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted
## SPY.Adjusted 3417.0088 2421.70264 127.46711 1852.71568
## QQQ.Adjusted 2421.7026 1740.31457 94.78025 1306.99096
## EEM.Adjusted 127.4671 94.78025 17.97815 74.16916
## IWM.Adjusted 1852.7157 1306.99096 74.16916 1022.84958
## EFA.Adjusted 475.4664 330.34008 24.35280 266.19307
## TLT.Adjusted 775.6326 539.56888 11.16196 404.06460
## IYR.Adjusted 801.7817 559.78527 24.47288 431.23153
## GLD.Adjusted -555.3025 -373.34353 1.00087 -302.70342
## EFA.Adjusted TLT.Adjusted IYR.Adjusted GLD.Adjusted
## SPY.Adjusted 475.46638 775.63261 801.78169 -555.30253
## QQQ.Adjusted 330.34008 539.56888 559.78527 -373.34353
## EEM.Adjusted 24.35280 11.16196 24.47288 1.00087
## IWM.Adjusted 266.19307 404.06460 431.23153 -302.70342
## EFA.Adjusted 76.61208 94.21768 108.67338 -83.14663
## TLT.Adjusted 94.21768 267.84553 209.66999 -79.01053
## IYR.Adjusted 108.67338 209.66999 202.39557 -119.87612
## GLD.Adjusted -83.14663 -79.01053 -119.87612 336.61902
print(std)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 58.455186 41.717078 4.240065 31.982020 8.752833
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 16.365987 14.226580 18.347180
Question#4
data.monthly<- data[endpoints(data, on="months", k=1),]
library(fBasics)
sigma=cov(data.monthly)
std=sqrt(diag(sigma))
ones=rep(1,8)
one.vec=matrix(ones, ncol=1)
a=inv(sigma)%*%one.vec
b=t(one.vec)%*%a
mvp.w=a/as.numeric(b)
mvp.w
## [,1]
## SPY.Adjusted -0.48934914
## QQQ.Adjusted 0.36662497
## EEM.Adjusted 0.17000927
## IWM.Adjusted 0.06653477
## EFA.Adjusted 0.45576386
## TLT.Adjusted 0.07708740
## IYR.Adjusted 0.41304768
## GLD.Adjusted -0.05971881
mvp.ret<-sum((mvp.w)*colMeans(data.monthly))
mvp.ret
## [1] 11.99433
print(cov(data.monthly))
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted
## SPY.Adjusted 3502.2075 2492.08504 133.688104 1883.24318
## QQQ.Adjusted 2492.0850 1797.33514 99.670951 1333.01922
## EEM.Adjusted 133.6881 99.67095 18.309770 76.58382
## IWM.Adjusted 1883.2432 1333.01922 76.583824 1031.44500
## EFA.Adjusted 485.9953 339.04825 25.023709 269.83824
## TLT.Adjusted 781.3176 545.27807 12.056095 404.84961
## IYR.Adjusted 820.5909 575.83181 26.037710 438.22649
## GLD.Adjusted -564.2669 -381.21491 2.713118 -305.69449
## EFA.Adjusted TLT.Adjusted IYR.Adjusted GLD.Adjusted
## SPY.Adjusted 485.99532 781.31764 820.59085 -564.266873
## QQQ.Adjusted 339.04825 545.27807 575.83181 -381.214908
## EEM.Adjusted 25.02371 12.05610 26.03771 2.713118
## IWM.Adjusted 269.83824 404.84961 438.22649 -305.694491
## EFA.Adjusted 77.85999 95.12721 110.91904 -82.608933
## TLT.Adjusted 95.12721 266.66468 210.33454 -82.138261
## IYR.Adjusted 110.91904 210.33454 206.12464 -120.697396
## GLD.Adjusted -82.60893 -82.13826 -120.69740 341.428281
print(std)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 59.179452 42.394990 4.278992 32.116117 8.823831
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 16.329871 14.357042 18.477778
Question#5
options(digits=5)
firm_data1 = read.table('F-F_Research_Data_Factors.txt', header = TRUE, sep = ',')
head(firm_data1)
## Mkt.RF.....SMB.....HML......RF
## 1 192607 2.96 -2.30 -2.87 0.22
## 2 192608 2.64 -1.40 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.20 -0.35 0.31
## 6 192612 2.62 -0.04 -0.02 0.28
names(firm_data1)
## [1] "Mkt.RF.....SMB.....HML......RF"