# 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