Итак, у меня есть две матрицы, содержащие избыточные доходы запасов (R) и ожидаемый избыточный доход (ER).Ошибка в решении.QP
R<-matrix(runif(47*78),ncol = 78)
ER<-matrix(runif(47*78),ncol = 78)
я затем объединить их удаление первой строки R и добавление первого ряда ER, чтобы сформировать новую матрицу R1.
Затем я делаю это для R2, то есть удаляя первые два ряда и R и переставляя его с помощью первых двух рядов ER.
Я делаю это, пока у меня нет n-1 новых матриц от R1 до R47.
Затем я нахожу матрицу Var-Cov каждой матрицы Return, используя cov(), то есть Var-Cov1, Var-Cov47.
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))
По какой-то причине при запуске solve.QP с любой матрицей Var-Cov нашел, что я получаю эту ошибку:
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!
Я задаюсь вопросом, что я делаю неправильно или даже почему Это не работает.