R最小方差组合:求解不可逆矩阵

R minimum variance portfolio: solve non invertible matrix

我想解决关于最小方差投资组合的优化问题,如本网站简要描述的那样:http://enricoschumann.net/R/minvar.htm

问题是:我要使用的矩阵的列(=资产)多于行(=观察),这就是为什么它不是正定且非可翻转。

您可以通过采用与网站上相反的变量值来重现此问题,结果如下:

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 可逆而不丢失信息?

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

你可以试试:

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

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

还有一个基于调整后的 returns 的替代 Mean-Variance 模型可以直接处理您的案例。参见 link. Unfortunately, this is not so easy to implement using QuadProg (link)。