Description Usage Arguments Value Examples
View source: R/Garlappi_PF_one.R
Calculate portfolio weights for Garlappi model 1.2.2-1.2.3: Uncertainty about expected returns estimated jointly for all assets and subgroups thereof.
1 |
mu, |
list of vectors of mus for portfolio subsets |
Sigma, |
overall covariance matrix |
gamma |
optional, coefficient of risk aversion |
epsilon, |
list of coefficients of parameter uncertainty for each subset of parameters defined by mu |
rf |
optional, should the case with or without the risk-free rate be calculated (only for one PU parameter) |
output of function: - vector of optimal weights given PU - sturb: by how much is investment in the optimal portfolio reduced (epsilon vs Sharpe ratio of the other portfolio)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | require(xts)
data(X)
mu_in <- list(mu1=colMeans(X[,1:4]),mu2=colMeans(X[,5:7]))
Sigma_in <- cov(X[,1:7])
gamma <- 3
## First calculate the tangency portfolio for the first 4 assets without parameter uncertainty
round(c(1/gamma*.mpinv(Sigma_in[1:4,1:4])%*%mu_in[[1]]),4)
# Then do it using the function
round(glPF(mu=mu_in[[1]],Sigma=Sigma_in[1:4,1:4],gamma=gamma,epsilon=list(eps1=0),rf=TRUE)$w,4)
# Now, we allow for parameter uncertainty for all 4 assets together
round(glPF(mu=mu_in[[1]],Sigma=Sigma_in[1:4,1:4],gamma=gamma,epsilon=list(eps1=0.1),rf=TRUE)$w,4)
round(glPF(mu=mu_in[[1]],Sigma=Sigma_in[1:4,1:4],gamma=gamma,epsilon=list(eps1=0.2),rf=TRUE)$w,4)
# Now we calculate the GMVP
round(c(.mpinv(Sigma_in[1:4,1:4])%*%matrix(1,nrow=4,ncol=1)/drop(matrix(1,nrow=1,ncol=4)%*%.mpinv(Sigma_in[1:4,1:4])%*%matrix(1,nrow=4,ncol=1))),4)
# and observe how the assets shift towards it
round(glPF(mu=mu_in[[1]],Sigma=Sigma_in[1:4,1:4],gamma=gamma,epsilon=list(eps1=0.1),rf=FALSE)$w,4)
round(glPF(mu=mu_in[[1]],Sigma=Sigma_in[1:4,1:4],gamma=gamma,epsilon=list(eps1=0.8),rf=FALSE)$w,4)
round(glPF(mu=mu_in[[1]],Sigma=Sigma_in[1:4,1:4],gamma=gamma,epsilon=list(eps1=10000),rf=FALSE)$w,4)
## Second: We use two groups for the uncertainty example now
# Tangency portfolio for all 7 assets
round(c(1/gamma*.mpinv(Sigma_in)%*%unlist(mu_in)),4)
# The same using the function
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0,eps2=0),rf=TRUE)$w,4)
# Introduce parameter uncertainty for single assets and groups
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0.1,eps2=0),rf=TRUE)$w,4)
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0,eps2=0.1),rf=TRUE)$w,4)
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0.1,eps2=0.05),rf=TRUE)$w,4)
## Third: We do it for single assets (two)
mu_in <- list(mu1=colMeans(X[,1]),mu2=colMeans(X[,2]))
Sigma_in <- cov(X[,1:2])
gamma <- 3
# Tangency portfolio for 2 assets
round(c(1/gamma*.mpinv(Sigma_in)%*%unlist(mu_in)),4)
# The same using the function
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0,eps2=0),rf=TRUE)$w,4)
# Introduce parameter uncertainty for single assets and groups
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0.1,eps2=0),rf=TRUE)$w,4)
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0,eps2=0.1),rf=TRUE)$w,4)
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0.0002,eps2=0.01),rf=TRUE)$w,4)
# Sturb
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0.1,eps2=0),rf=TRUE)$sturb,4)
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0,eps2=0.1),rf=TRUE)$sturb,4)
round(glPF(mu=mu_in,Sigma=Sigma_in,gamma=gamma,epsilon=list(eps1=0.0002,eps2=0.01),rf=TRUE)$sturb,4)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.