首页 > 解决方案 > R最小方差投资组合:求解不可逆矩阵

问题描述

我想解决有关使用 R 的最小方差投资组合的优化问题,如本网站所述:http ://enricoschumann.net/R/minvar.htm

问题是:我要使用的矩阵的列 (=assets) 比行 (=observations) 多,这就是为什么它不是正定且不可逆的。

您可以通过使用与网站上的变量相反的值来重新创建此问题,这会导致以下结果:

nO <- 10L  ## number of observations
nA <- 100L  ## number of assets
mData <- array(rnorm(nO * nA, sd = 0.05), 
               dim = c(nO, nA)) #Creating sample stock observations

library("quadprog")
aMat <- array(1, dim = c(1,nA))
bVec <- 1
zeros <- array(0, dim = c(nA,1))

solQP <- solve.QP(cov(mData), zeros, t(aMat), bVec, meq = 1) #Minimize optimization
solQP$solution

这导致以下错误

 matrix D in quadratic function is not positive definite! 

有没有人知道其他函数来解决 mData 的优化问题使 mData 可逆而不丢失信息的方法?

期望的结果是最小方差投资组合中每种资产的权重。

标签: roptimizationmathematical-optimizationportfolioquadprog

解决方案


你可以试试:

library(Matrix)
Q = nearPD(cov(mData))$mat

然后使用Q而不是cov(mData).

还有一个基于调整后收益的替代均值方差模型可以直接处理您的案例。见链接不幸的是,使用 QuadProg (链接)实现这一点并不容易。


推荐阅读