R:投资组合优化求解。QP不是正定

时间:2018-08-03 08:59:38

标签: r optimization covariance portfolio quadratic-programming

我正在尝试在R中执行投资组合优化(均方差)。但是,出现以下错误:

“ solve.QP(Dmat,dvec,Amat,bvec,meq = 2)中的错误:二次函数中的矩阵D不是正定的!”

我有四个约束:

  1. 预期收益为4.8%
  2. 权重加起来为1
  3. 不做空
  4. 单个权重<0.7

下面是我的代码:

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)

1 个答案:

答案 0 :(得分:0)

第一件事是检查您的数据和协方差矩阵的特征值。

这种情况很少见,但有可能协方差矩阵不是正半定的。我仅在资产数量超过观察值(link)的情况下看到这一点。在您的情况下,我可能会稍微扰动协方差矩阵:在对角线上添加少量数字。一些求解器会自动执行此操作。