# Loading data
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)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-02 245.8284 152.8868 43.05478 143.9411 61.24226
## 2018-01-03 247.3834 154.3723 43.46730 144.0908 61.53624
## 2018-01-04 248.4260 154.6425 43.68253 144.4743 62.21066
## 2018-01-05 250.0816 156.1955 44.05919 144.7736 62.55652
## 2018-01-08 250.5388 156.8033 44.05919 144.9981 62.53923
## 2018-01-09 251.1059 156.8129 43.98745 144.8017 62.60839
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-02 112.3109 69.33670 125.15
## 2018-01-03 112.8479 69.22486 124.82
## 2018-01-04 112.8300 68.14094 125.46
## 2018-01-05 112.5078 68.20975 125.33
## 2018-01-08 112.4362 68.59688 125.31
## 2018-01-09 110.9326 67.80544 124.73
# Calculating daily returns using log returns
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))
head(asset_returns_day_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-03 0.006325334 9.716367e-03 0.009581225 0.0010397180 0.0048002117
## 2018-01-04 0.004214830 1.750133e-03 0.004951516 0.0026615102 0.0109597110
## 2018-01-05 0.006664087 1.004268e-02 0.008622655 0.0020713398 0.0055594899
## 2018-01-08 0.001828261 3.891103e-03 0.000000000 0.0015507152 -0.0002763004
## 2018-01-09 0.002263554 6.120905e-05 -0.001628333 -0.0013545776 0.0011057512
## 2018-01-10 -0.001529428 -2.337478e-03 -0.006320156 0.0001289817 -0.0019332319
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-03 0.0047818021 -0.001612988 -0.0026368504
## 2018-01-04 -0.0001588106 -0.015658007 0.0051273786
## 2018-01-05 -0.0028557319 0.001009924 -0.0010361649
## 2018-01-08 -0.0006365526 0.005675480 -0.0001596128
## 2018-01-09 -0.0133724560 -0.011537593 -0.0046284751
## 2018-01-10 -0.0012101655 -0.012179723 0.0024051585
# Calculating weekly returns
asset_returns_wk_xts <- na.omit(Return.calculate(prices_weekly))
head(asset_returns_wk_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-01-12 0.01645776 0.01587224 0.007734298 0.021771671 0.015894684
## 2018-01-19 0.00895968 0.01124676 0.018784138 0.002781902 0.008571581
## 2018-01-26 0.02200337 0.02759414 0.032514003 0.006304946 0.015108675
## 2018-02-02 -0.03883718 -0.03697416 -0.058179622 -0.036152665 -0.035880594
## 2018-02-09 -0.05064464 -0.05169765 -0.053618904 -0.045894926 -0.054582835
## 2018-02-16 0.04439774 0.05675798 0.067212401 0.044764105 0.041259503
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-01-12 -0.009466169 -0.029385746 0.013005643
## 2018-01-19 -0.011725042 0.006496791 -0.004253315
## 2018-01-26 0.004307013 0.016912093 0.013051805
## 2018-02-02 -0.030431648 -0.029325954 -0.013117887
## 2018-02-09 -0.013714705 -0.041590233 -0.012817492
## 2018-02-16 0.006528874 0.024290097 0.025567064
# Calculating monthly returns
asset_returns_mon_xts <- na.omit(Return.calculate(prices_monthly))
head(asset_returns_mon_xts)
## SPY.Adjusted QQQ.Adjusted EEM.Adjusted IWM.Adjusted EFA.Adjusted
## 2018-02-28 -0.036360728 -0.012927819 -0.058984870 -0.038436942 -0.048347926
## 2018-03-29 -0.027410449 -0.040788167 0.005414343 0.012175488 -0.008396117
## 2018-04-30 0.005168242 0.005058141 -0.028168922 0.009813748 0.015212267
## 2018-05-31 0.024309053 0.056729371 -0.026214771 0.061635588 -0.018942438
## 2018-06-29 0.005750861 0.011450436 -0.045457046 0.006143768 -0.015841087
## 2018-07-31 0.037046550 0.027963756 0.035310434 0.016490202 0.028520208
## TLT.Adjusted IYR.Adjusted GLD.Adjusted
## 2018-02-28 -0.030414638 -0.066572824 -0.020759902
## 2018-03-29 0.028596764 0.037718935 0.006320007
## 2018-04-30 -0.020881433 0.002252850 -0.009539745
## 2018-05-31 0.020044128 0.033712031 -0.011959209
## 2018-06-29 0.006457665 0.040594725 -0.036149448
## 2018-07-31 -0.014368326 0.008314824 -0.022418910
# Question 1:
# Try to find the GMVP for these eight assets using the derived asset_returns data.
# Using weekly return
cov_wk <- cov(asset_returns_wk_xts)
one <- rep(1,8)
one_matrix1 <- matrix(one, ncol=1)
a1 <- inv(cov_wk)%*%one_matrix1
b1 <- t(one_matrix1)%*%inv(cov_wk)%*%one_matrix1
mvp1 <- a1/as.vector(b1)
head(mvp1)
## [,1]
## SPY.Adjusted 0.99202034
## QQQ.Adjusted -0.45950322
## EEM.Adjusted 0.16684103
## IWM.Adjusted -0.07419073
## EFA.Adjusted -0.12136433
## TLT.Adjusted 0.48556199
# Changing the column and row names
colnames(mvp1)="Weight"
rownames(mvp1)= c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
mvp1
## Weight
## SPY 0.99202034
## QQQ -0.45950322
## EEM 0.16684103
## IWM -0.07419073
## EFA -0.12136433
## TLT 0.48556199
## IYR -0.23268072
## GLD 0.24331564
# Using monthly returns
cov_mon <- cov(asset_returns_mon_xts)
one <- rep(1,8)
one_matrix2 <- matrix(one, ncol=1)
a2 <- inv(cov_mon)%*%one_matrix2
b2 <- t(one_matrix2)%*%inv(cov_mon)%*%one_matrix2
mvp2 <- a2/as.vector(b2)
head(mvp2)
## [,1]
## SPY.Adjusted 1.19244327
## QQQ.Adjusted -0.76732073
## EEM.Adjusted 0.01897639
## IWM.Adjusted 0.19039152
## EFA.Adjusted -0.15103885
## TLT.Adjusted 0.57038200
# Changing column and row names
colnames(mvp2)="Weight"
rownames(mvp2)= c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
mvp2
## Weight
## SPY 1.19244327
## QQQ -0.76732073
## EEM 0.01897639
## IWM 0.19039152
## EFA -0.15103885
## TLT 0.57038200
## IYR -0.30989748
## GLD 0.25606388
# Merging GMVP weights
mvp3 <- cbind(mvp1, mvp2)
colnames(mvp3) <- c("Weight_weekly", "Weight_monthly")
rownames(mvp3) <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
mvp3
## Weight_weekly Weight_monthly
## SPY 0.99202034 1.19244327
## QQQ -0.45950322 -0.76732073
## EEM 0.16684103 0.01897639
## IWM -0.07419073 0.19039152
## EFA -0.12136433 -0.15103885
## TLT 0.48556199 0.57038200
## IYR -0.23268072 -0.30989748
## GLD 0.24331564 0.25606388
# Question 2:
# Given the portfolio return is specified as 0.045 annual rate.
# Using weekly return
cov_matrix3 <- colMeans(asset_returns_wk_xts)
mu <- 0.045/52
Ax <- rbind(2*cov_wk, cov_matrix3, t(one_matrix1))
Ax <- cbind(Ax, rbind(t(tail(Ax, 2)), matrix(0, 2, 2)))
b0 <- c(rep(0, ncol(asset_returns_wk_xts)), mu, 1)
out <- solve(Ax, b0)
wgt1 <- as.matrix(out[1:8])
wgt1
## [,1]
## SPY.Adjusted 1.07590239
## QQQ.Adjusted -0.40159203
## EEM.Adjusted 0.08840153
## IWM.Adjusted -0.09623700
## EFA.Adjusted -0.16682101
## TLT.Adjusted 0.42651502
## IYR.Adjusted -0.24358568
## GLD.Adjusted 0.31741679
# Changing column and row names
colnames(wgt1)="Weight"
rownames(wgt1)= c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
wgt1
## Weight
## SPY 1.07590239
## QQQ -0.40159203
## EEM 0.08840153
## IWM -0.09623700
## EFA -0.16682101
## TLT 0.42651502
## IYR -0.24358568
## GLD 0.31741679
# Using monthly returns
cov_matrix4 <- colMeans(asset_returns_mon_xts)
mu2 <- 0.045/12
Ax2 <- rbind(2*cov_mon, cov_matrix4, t(one_matrix2))
Ax2 <- cbind(Ax2, rbind(t(tail(Ax2, 2)), matrix(0, 2, 2)))
b02 <- c(rep(0, ncol(asset_returns_mon_xts)), mu2, 1)
out2 <- solve(Ax2, b02)
wgt2 <- as.matrix(out2[1:8])
wgt2
## [,1]
## SPY.Adjusted 1.33356042
## QQQ.Adjusted -0.70644694
## EEM.Adjusted -0.04490139
## IWM.Adjusted 0.14954136
## EFA.Adjusted -0.24717998
## TLT.Adjusted 0.48856569
## IYR.Adjusted -0.31559794
## GLD.Adjusted 0.34245878
# Changing column and row names
colnames(wgt2)="Weight"
rownames(wgt2)= c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
wgt2
## Weight
## SPY 1.33356042
## QQQ -0.70644694
## EEM -0.04490139
## IWM 0.14954136
## EFA -0.24717998
## TLT 0.48856569
## IYR -0.31559794
## GLD 0.34245878
# Merging the GMVP weigths
wgt <- cbind(wgt1, wgt2)
colnames(wgt) <- c("Weight_weekly", "Weight_monthly")
wgt
## Weight_weekly Weight_monthly
## SPY 1.07590239 1.33356042
## QQQ -0.40159203 -0.70644694
## EEM 0.08840153 -0.04490139
## IWM -0.09623700 0.14954136
## EFA -0.16682101 -0.24717998
## TLT 0.42651502 0.48856569
## IYR -0.24358568 -0.31559794
## GLD 0.31741679 0.34245878
# Question 3:
# Find the tangency portfolio based on Q2. Risk-free rate is assumed to be zero.
# Using weekly returns
a4 <- inv(cov_wk)%*%cov_matrix3
b4 <- t(one_matrix1)%*%a4
tan_wk <- a4/as.vector(b4)
tan_wk
## [,1]
## SPY.Adjusted 2.8906111
## QQQ.Adjusted 0.8512616
## EEM.Adjusted -1.6085628
## IWM.Adjusted -0.5731872
## EFA.Adjusted -1.1502333
## TLT.Adjusted -0.8509102
## IYR.Adjusted -0.4795043
## GLD.Adjusted 1.9205250
colnames(tan_wk)="Weight"
rownames(tan_wk)= c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
tan_wk
## Weight
## SPY 2.8906111
## QQQ 0.8512616
## EEM -1.6085628
## IWM -0.5731872
## EFA -1.1502333
## TLT -0.8509102
## IYR -0.4795043
## GLD 1.9205250
# Using monthly returns
a5 <- inv(cov_mon)%*%cov_matrix4
b5 <- t(one_matrix2)%*%a5
tan_mon <- a5/as.vector(b5)
tan_mon
## [,1]
## SPY.Adjusted 4.2186457
## QQQ.Adjusted 0.5380940
## EEM.Adjusted -1.3508577
## IWM.Adjusted -0.6856242
## EFA.Adjusted -2.2127480
## TLT.Adjusted -1.1841371
## IYR.Adjusted -0.4321416
## GLD.Adjusted 2.1087690
colnames(tan_mon)="Weight"
rownames(tan_mon)= c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
tan_mon
## Weight
## SPY 4.2186457
## QQQ 0.5380940
## EEM -1.3508577
## IWM -0.6856242
## EFA -2.2127480
## TLT -1.1841371
## IYR -0.4321416
## GLD 2.1087690
# Merge
tan <- cbind(tan_wk, tan_mon)
colnames(tan) <- c("Weight_weekly", "Weight_monthly")
tan
## Weight_weekly Weight_monthly
## SPY 2.8906111 4.2186457
## QQQ 0.8512616 0.5380940
## EEM -1.6085628 -1.3508577
## IWM -0.5731872 -0.6856242
## EFA -1.1502333 -2.2127480
## TLT -0.8509102 -1.1841371
## IYR -0.4795043 -0.4321416
## GLD 1.9205250 2.1087690
# Question 4
# The attached file "berndt.xslx" contains monthly returns of 15 stocks, market index returns (MARKET), and risk-free monthly rate (RKFREE) for 120 months.
# Compute GMVP (global minimum variance portfolio) weights and its return by using the covariance derived from single index model.
library(readxl)
berndt <- read_excel("C:/Users/DELL/Downloads/berndt.xlsx")
head(berndt)
## # A tibble: 6 × 17
## CITCRP CONED CONTIL DATGEN DEC DELTA GENMIL GERBER IBM MARKET MOBIL
## <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.045 -0.046
## 2 -0.019 -0.003 0.037 -0.097 -0.063 -0.033 0.018 0.16 -0.043 0.01 -0.017
## 3 0.059 0.022 0.003 0.063 0.01 0.07 -0.023 -0.036 -0.063 0.05 0.049
## 4 0.127 -0.005 0.18 0.179 0.165 0.15 0.046 0.004 0.13 0.063 0.077
## 5 0.005 -0.014 0.061 0.052 0.038 -0.031 0.063 0.046 -0.018 0.067 -0.011
## 6 0.007 0.034 -0.059 -0.023 -0.021 0.023 0.008 0.028 -0.004 0.007 -0.043
## # … with 6 more variables: PANAM <dbl>, PSNH <dbl>, TANDY <dbl>, TEXACO <dbl>,
## # WEYER <dbl>, RKFREE <dbl>
b1<- berndt[, c("CITCRP","CONED", "CONTIL", "DATGEN", "DEC", "DELTA", "GENMIL", "GERBER", "IBM", "MOBIL", "PANAM", "PSNH", "TANDY", "TEXACO", "WEYER")]
head(b1)
## # A tibble: 6 × 15
## 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 4 more variables: PSNH <dbl>, TANDY <dbl>, TEXACO <dbl>, WEYER <dbl>
# Calculating the market premium (Market return - Risk free rate)
b2 <- berndt[, c ("MARKET")]
b3 <- berndt[, c ("RKFREE")]
b4 <- b2 - b3
head(b4)
## MARKET
## 1 -0.04987
## 2 0.00506
## 3 0.04474
## 4 0.05809
## 5 0.06187
## 6 0.00173
b5 <- rep(1,120)
a <- as.matrix(cbind(b5,b4 ))
b <- as.matrix(b1)
b_hat = solve(t(a)%*%a)%*%t(a)%*%b
d_hat = b - a %*% b_hat
b_hat = as.matrix(b_hat[-1,])
di_hat = diag(t(d_hat) %*% d_hat)/(120-2)
diag(di_hat)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.004526617 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [2,] 0.000000000 0.002511069 0.00000000 0.00000000 0.000000000 0.000000000
## [3,] 0.000000000 0.000000000 0.02039461 0.00000000 0.000000000 0.000000000
## [4,] 0.000000000 0.000000000 0.00000000 0.01140139 0.000000000 0.000000000
## [5,] 0.000000000 0.000000000 0.00000000 0.00000000 0.006537662 0.000000000
## [6,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.008161795
## [7,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [8,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [9,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [10,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [11,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [12,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [13,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [14,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [15,] 0.000000000 0.000000000 0.00000000 0.00000000 0.000000000 0.000000000
## [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [2,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [3,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [4,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [5,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [6,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [7,] 0.00393017 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [8,] 0.00000000 0.005930261 0.000000000 0.000000000 0.00000000 0.00000000
## [9,] 0.00000000 0.000000000 0.002540858 0.000000000 0.00000000 0.00000000
## [10,] 0.00000000 0.000000000 0.000000000 0.004107716 0.00000000 0.00000000
## [11,] 0.00000000 0.000000000 0.000000000 0.000000000 0.01498815 0.00000000
## [12,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.01187757
## [13,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [14,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [15,] 0.00000000 0.000000000 0.000000000 0.000000000 0.00000000 0.00000000
## [,13] [,14] [,15]
## [1,] 0.00000000 0.00000000 0.000000000
## [2,] 0.00000000 0.00000000 0.000000000
## [3,] 0.00000000 0.00000000 0.000000000
## [4,] 0.00000000 0.00000000 0.000000000
## [5,] 0.00000000 0.00000000 0.000000000
## [6,] 0.00000000 0.00000000 0.000000000
## [7,] 0.00000000 0.00000000 0.000000000
## [8,] 0.00000000 0.00000000 0.000000000
## [9,] 0.00000000 0.00000000 0.000000000
## [10,] 0.00000000 0.00000000 0.000000000
## [11,] 0.00000000 0.00000000 0.000000000
## [12,] 0.00000000 0.00000000 0.000000000
## [13,] 0.01121942 0.00000000 0.000000000
## [14,] 0.00000000 0.00464578 0.000000000
## [15,] 0.00000000 0.00000000 0.004133323
cov_sfm<- as.numeric(var(b4))*b_hat%*%t(b_hat) + diag(di_hat)
cov_sfm
## CITCRP CONED CONTIL DATGEN DEC
## CITCRP 0.0065944807 2.776985e-04 0.0022677818 0.0032028699 0.0026307119
## CONED 0.0002776985 2.548362e-03 0.0003045459 0.0004301211 0.0003532846
## CONTIL 0.0022677818 3.045459e-04 0.0228816421 0.0035125180 0.0028850447
## DATGEN 0.0032028699 4.301211e-04 0.0035125180 0.0163622467 0.0040746524
## DEC 0.0026307119 3.532846e-04 0.0028850447 0.0040746524 0.0098844215
## DELTA 0.0015148152 2.034282e-04 0.0016612649 0.0023462643 0.0019271295
## GENMIL 0.0008299454 1.114554e-04 0.0009101831 0.0012854844 0.0010558465
## GERBER 0.0019386515 2.603462e-04 0.0021260771 0.0030027353 0.0024663291
## IBM 0.0014121263 1.896378e-04 0.0015486483 0.0021872117 0.0017964900
## MOBIL 0.0022166316 2.976768e-04 0.0024309318 0.0034332925 0.0028199720
## PANAM 0.0022784444 3.059778e-04 0.0024987205 0.0035290330 0.0028986094
## PSNH 0.0006529775 8.768992e-05 0.0007161062 0.0010113826 0.0008307100
## TANDY 0.0032627053 4.381566e-04 0.0035781382 0.0050535334 0.0041507743
## TEXACO 0.0019000860 2.551671e-04 0.0020837831 0.0029430019 0.0024172665
## WEYER 0.0025472195 3.420723e-04 0.0027934804 0.0039453330 0.0032405419
## DELTA GENMIL GERBER IBM MOBIL
## CITCRP 0.0015148152 0.0008299454 0.0019386515 0.0014121263 0.0022166316
## CONED 0.0002034282 0.0001114554 0.0002603462 0.0001896378 0.0002976768
## CONTIL 0.0016612649 0.0009101831 0.0021260771 0.0015486483 0.0024309318
## DATGEN 0.0023462643 0.0012854844 0.0030027353 0.0021872117 0.0034332925
## DEC 0.0019271295 0.0010558465 0.0024663291 0.0017964900 0.0028199720
## DELTA 0.0092714738 0.0006079770 0.0014201603 0.0010344539 0.0016237948
## GENMIL 0.0006079770 0.0042632717 0.0007780854 0.0005667624 0.0008896538
## GERBER 0.0014201603 0.0007780854 0.0077477736 0.0013238881 0.0020781231
## IBM 0.0010344539 0.0005667624 0.0013238881 0.0035051868 0.0015137182
## MOBIL 0.0016237948 0.0008896538 0.0020781231 0.0015137182 0.0064838177
## PANAM 0.0016690758 0.0009144626 0.0021360734 0.0015559296 0.0024423614
## PSNH 0.0004783390 0.0002620751 0.0006121755 0.0004459126 0.0006999543
## TANDY 0.0023900967 0.0013094996 0.0030588318 0.0022280727 0.0034974326
## TEXACO 0.0013919091 0.0007626070 0.0017813572 0.0012975520 0.0020367830
## WEYER 0.0018659672 0.0010223365 0.0023880538 0.0017394738 0.0027304730
## PANAM PSNH TANDY TEXACO WEYER
## CITCRP 0.0022784444 6.529775e-04 0.0032627053 0.0019000860 0.0025472195
## CONED 0.0003059778 8.768992e-05 0.0004381566 0.0002551671 0.0003420723
## CONTIL 0.0024987205 7.161062e-04 0.0035781382 0.0020837831 0.0027934804
## DATGEN 0.0035290330 1.011383e-03 0.0050535334 0.0029430019 0.0039453330
## DEC 0.0028986094 8.307100e-04 0.0041507743 0.0024172665 0.0032405419
## DELTA 0.0016690758 4.783390e-04 0.0023900967 0.0013919091 0.0018659672
## GENMIL 0.0009144626 2.620751e-04 0.0013094996 0.0007626070 0.0010223365
## GERBER 0.0021360734 6.121755e-04 0.0030588318 0.0017813572 0.0023880538
## IBM 0.0015559296 4.459126e-04 0.0022280727 0.0012975520 0.0017394738
## MOBIL 0.0024423614 6.999543e-04 0.0034974326 0.0020367830 0.0027304730
## PANAM 0.0174986229 7.194732e-04 0.0035949617 0.0020935806 0.0028066146
## PSNH 0.0007194732 1.208376e-02 0.0010302770 0.0005999975 0.0008043453
## TANDY 0.0035949617 1.030277e-03 0.0163673648 0.0029979825 0.0040190389
## TEXACO 0.0020935806 5.999975e-04 0.0029979825 0.0063917006 0.0023405484
## WEYER 0.0028066146 8.043453e-04 0.0040190389 0.0023405484 0.0072710184
# GMVP weight
one <- rep(1,15)
one_m <- matrix(one, ncol=1)
a6 <- inv(cov_sfm)%*%one_m
b6 <- t(one_m)%*%inv(cov_sfm)%*%one_m
mvp6 <- a6/as.vector(b6)
colnames(mvp6)="Weight"
mvp6
## Weight
## CITCRP 0.0443132900
## CONED 0.3755072617
## CONTIL 0.0057705724
## DATGEN -0.0236873049
## DEC -0.0050184744
## DELTA 0.0526752256
## GENMIL 0.1816517286
## GERBER 0.0428599055
## IBM 0.1859634782
## MOBIL 0.0338142360
## PANAM 0.0075571100
## PSNH 0.0662851173
## TANDY -0.0262830298
## TEXACO 0.0581522469
## WEYER 0.0004386369