【问题标题】:R: Portfolio Optimization solve.QP not positive definiteR:投资组合优化解决。QP 不是正定的
【发布时间】:2019-01-11 03:05:36
【问题描述】:

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

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

我有四个约束:

  1. 预期回报率为 4.8%
  2. 权重加起来为 1
  3. 无短路
  4. 个体重量

下面是我的代码:

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)

【问题讨论】:

  • 你检查过矩阵确实是PSD吗?
  • 不,不是,我发现我无法解决此类问题。我在上面编辑了我的问题

标签: r optimization covariance portfolio quadratic-programming


【解决方案1】:

还是找不到半正定矩阵,我推荐nearest_spd()函数,它可以找到最近的半正定矩阵。

【讨论】:

    【解决方案2】:

    首先是检查您的数据和协方差矩阵的特征值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 2022-11-18
      • 2014-07-28
      • 2021-01-20
      • 2013-08-22
      • 2021-01-16
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多