所以基本上我有两个包含股票超额收益(R)和预期超额收益(ER)的矩阵。
R<-matrix(runif(47*78),ncol = 78)
ER<-matrix(runif(47*78),ncol = 78)
然后我将这些删除 R 的第一行并添加 ER 的第一行以形成一个新的矩阵 R1。
然后我对 R2 执行此操作,即删除和 R 的前两行并将其与 ER 的前两行绑定。
我这样做,直到我有从 R1 到 R47 的 n-1 个新矩阵。
然后我使用 cov() 即 Var-Cov1 到 Var-Cov47 找到每个返回矩阵的 Var-Cov 矩阵。
n<-47
switch_matrices <- function(mat1, mat2, nrows){
rbind(mat1[(1+nrows):nrow(mat1),],mat2[1:nrows,])
}
l<-lapply(1:n-1, function(nrows) switch_matrices(R,ER, nrows))
list2env(setNames(l,paste0("R",seq_along(l))), envir = parent.frame())
b<-lapply(l, cov)
list2env(setNames(b,paste0("VarCov",seq_along(b))), envir = parent.frame())
我现在正在尝试使用 quadprog 查找资产分配。例如:
D_mat <- 2*VarCov1
d_vec <- rep(0,78)
A_mat <- cbind(rep(1,78),diag(78))
b_vec <- c(1,d_vec)
library(quadprog)
output <- solve.QP(Dmat = D_mat, dvec = d_vec,Amat = A_mat, bvec = b_vec,meq =1)
# The asset allocation
(round(output$solution, 4))
由于某种原因,在使用任何 Var-Cov 矩阵运行solve.QP 时发现我收到此错误:
Error in solve.QP(Dmat = D_mat, dvec = d_vec, Amat = A_mat, bvec = b_vec, :
matrix D in quadratic function is not positive definite!
我想知道我做错了什么,甚至为什么这不起作用。