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

问题描述

我想使用R来解决关于最小方差投资组合优化问题,如本网站{@ {3}}

所述

问题是:我要使用的矩阵比行(=观测值)具有更多的列(=资产) ,这就是为什么它不是正定且不可逆的原因。

您可以通过使用与网站上相反的变量值来重新创建此问题,从而产生以下结果:

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)

还有另一种基于调整后收益的均值-方差模型,可直接处理您的情况。参见link。不幸的是,使用QuadProg(link)实施起来并不容易。