title: “HW09” author: “113035131 Baljingarav” output: html_document —
Method 1
# Example: Simulated data for 4 assets
set.seed(123)
returns <- matrix(rnorm(100 * 4, 0.01, 0.05), ncol = 4)
colnames(returns) <- paste0("Asset", 1:4)
# 1. Calculate the covariance matrix
cov_mat <- cov(returns)
# 2. Compute inverse of covariance matrix
inv_cov <- solve(cov_mat)
# 3. Vector of ones
ones <- rep(1, ncol(returns))
# 4. Calculate MVP weights
w_mvp <- inv_cov %*% ones / as.numeric(t(ones) %*% inv_cov %*% ones)
w_mvp <- as.vector(w_mvp)
names(w_mvp) <- colnames(returns)
# Output
w_mvp
## Asset1 Asset2 Asset3 Asset4
## 0.3062252 0.2176182 0.2704764 0.2056803
Method 2
library(quadprog)
# 1. Estimate covariance matrix
cov_mat <- cov(returns)
# 2. Set up quadratic programming inputs
Dmat <- cov_mat
dvec <- rep(0, ncol(returns))
Amat <- cbind(rep(1, ncol(returns))) # constraint: sum(weights) = 1
bvec <- 1
meq <- 1 # number of equality constraints
# 3. Solve the quadratic program
sol <- solve.QP(Dmat, dvec, Amat, bvec, meq)
# 4. Extract weights
w_mvp_qp <- sol$solution
names(w_mvp_qp) <- colnames(returns)
# Output
w_mvp_qp
## Asset1 Asset2 Asset3 Asset4
## 0.3062252 0.2176182 0.2704764 0.2056803