Restricciones de peso en la optimización de la cartera utilizando el paquete quadprog en R
Soy nuevo en el uso de R y la optimización de cartera. Estoy tratando de optimizar una cartera con 7 activos, de modo que los activos número 3 y 4 tengan un peso mínimo de 0,35 cada uno y la suma de los 7 activos igual a 1. A continuación, se muestra el código que he intentado:
library(quadprog)
dmat <- cov(dr) #dr stores the daily return of the 7 assets and is a timeSeries object
dvec <- colMeans(dr)
c1 <- c(0,0,1,0,0,0,0)
c2 <- c(0,0,0,1,0,0,0)
amat <- t(rbind(matrix(1, ncol = ncol(dmat)), c1, c2)) #used transpose because earlier when I didn't use the transpose I got an error saying amat and dvec are not compatible
bvec <- matrix(c(1,0.35, 0.35), nrow =3)
meq <- 1
sol <- solve.QP(dmat, dvec, amat, bvec, meq)
Aquí está la respuesta que obtengo del código anterior:
$solution
[1] -0.01619018 -2.10640140 0.35000000 0.35000000 -0.82522310 1.27499728 1.97281741
$value
[1] -0.0007364101
$unconstrained.solution
[1] 0.026872891 12.595238193 -0.256430652 0.008918392 0.743618974 2.212816019 3.749097189
$iterations
[1] 4 0
$Lagrangian
[1] 0.0002874682 0.0002846590 0.0003015167
$iact
[1] 1 3 2
Dado que la solución tiene ponderaciones para 2 activos en exceso de 1, debo haber cometido un error en Amat o bvec o meq. Sin embargo, soy incapaz de averiguar cuál es ese error.
¿Podría alguien guiarme sobre cómo construir esas matrices para abordar este problema? Gracias de antemano por cualquier ayuda.