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