我正在尝试在R中执行投资组合优化(均方差)。但是,出现以下错误:
“ solve.QP(Dmat,dvec,Amat,bvec,meq = 2)中的错误:二次函数中的矩阵D不是正定的!”
我有四个约束:
下面是我的代码:
library(quadprog)
library(readxl)
#Input data
rnd_m <- read_excel("AssetData.xlsx", sheet = "Tabelle3")
ast_nr <- ncol(rnd_m) #number of assets
#Covariance Matrix
Dmat <- cov(rnd_m)
#Expected Returns Vector used for optimization
dvec <- matrix(colMeans(rnd_m), nrow=ast_nr, ncol=1)
#Constraints of optimization
A.Equality <- matrix(rep(1,ast_nr), ncol=1)
Amat <- cbind(A.Equality, dvec, diag(ast_nr), -diag(ast_nr))
bvec <- c(1, 4.8, rep(0, ast_nr), rep(-0.7, ast_nr))
qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=2)
输入数据是一个data.frame
,具有10,000行(返回数据)和10列(资产)。
非常感谢您的帮助!
编辑:由于我无法使用Solve.QP,因此我尝试使用ipop(kernlab),但在正确设置参数方面遇到困难。我仍然需要l,u和r。
#Input data
rnd_m <- read_excel("AssetData.xlsx", sheet = "Tabelle3")
ast_nr <- ncol(rnd_m)
#Covariance Matrix
H <- cov(rnd_m)
#Expected Returns Vector
c <- colMeans(rnd_m)
#Constraints
A.Equality <- matrix(rep(1,ast_nr), ncol=1)
A <- cbind(A.Equality, c, diag(ast_nr), -diag(ast_nr))
b <- c(1, 1, rep(0, ast_nr), rep(-0.7, ast_nr))
qp <- ipop(c, H, A, b)
答案 0 :(得分:0)
第一件事是检查您的数据和协方差矩阵的特征值。
这种情况很少见,但有可能协方差矩阵不是正半定的。我仅在资产数量超过观察值(link)的情况下看到这一点。在您的情况下,我可能会稍微扰动协方差矩阵:在对角线上添加少量数字。一些求解器会自动执行此操作。