asset.names <- c("MSFT", "NORD", "SBUX")
mu.vec = c (0.0427 , 0.0015 , 0.0285)
names ( mu.vec ) = asset.names
mu.vec
## MSFT NORD SBUX
## 0.0427 0.0015 0.0285
sigma.mat = matrix (c (0.0100 , 0.0018 , 0.0011,
0.0018, 0.0109, 0.0026,
0.0011, 0.0026, 0.0199),
nrow =3 , ncol =3)
sigma.mat
## [,1] [,2] [,3]
## [1,] 0.0100 0.0018 0.0011
## [2,] 0.0018 0.0109 0.0026
## [3,] 0.0011 0.0026 0.0199
dimnames (sigma.mat) = list (asset.names, asset.names)
sigma.mat
## MSFT NORD SBUX
## MSFT 0.0100 0.0018 0.0011
## NORD 0.0018 0.0109 0.0026
## SBUX 0.0011 0.0026 0.0199
x.vec = rep (1 ,3)/3
names(x.vec ) = asset.names
mu.p.x = crossprod ( x.vec , mu.vec )
sig2.p.x = t(x.vec ) %*% sigma.mat %*%x.vec
sig.p.x = sqrt (sig2.p.x)
mu.p.x
## [,1]
## [1,] 0.02423333
sig.p.x
## [,1]
## [1,] 0.07586538
top.mat = cbind (2* sigma.mat , rep (1 , 3 ))
bot.vec = c( rep (1 , 3) , 0)
Am.mat = rbind ( top.mat , bot.vec )
b.vec = c( rep (0 , 3) , 1)
z.m.mat = solve ( Am.mat ) %*%b.vec
m.vec = z.m.mat [1:3 ,1]
m.vec
## MSFT NORD SBUX
## 0.4411093 0.3656263 0.1932644
mu.gmin = as.numeric(crossprod (m.vec , mu.vec ))
mu.gmin
## [1] 0.02489184
sig2.gmin = as.numeric(t(m.vec) %*% sigma.mat%*%m.vec)
sig.gmin = sqrt (sig2.gmin)
sig.gmin
## [1] 0.07267607
one.vec = rep (1, 3)
sigma.inv.mat = solve (sigma.mat)
top.mat = sigma.inv.mat%*% one.vec
bot.val = as.numeric ((t( one.vec )%*% sigma.inv.mat %*% one.vec))
m.mat = top.mat /bot.val
m.mat [ ,1]
## MSFT NORD SBUX
## 0.4411093 0.3656263 0.1932644