1

この Web サイトで簡単に説明されているように、R を使用して最小分散ポートフォリオに関する最適化問題を解決したいと考えています: http://enricoschumann.net/R/minvar.htm

問題は、使用したい行列が行 (=観察) よりも多くの列 (= 資産)を持っていることです。これが正定値ではなく、可逆でない理由です。

この問題は、Web サイトとは逆の値の変数を使用することで再現できます。これにより、次の結果が得られます。

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 を可逆にする方法を知っている人はいますか?

望ましい結果は、最小分散ポートフォリオの各資産の重みです。

4

1 に答える 1

2

あなたが試すことができます:

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

Qの代わりに使用しcov(mData)ます。

ケースを直接処理する調整済みリターンに基づく代替の平均分散モデルもあります。リンクを参照してください。残念ながら、QuadProg (リンク)を使用してこれを実装するのはそれほど簡単ではありません。

于 2020-09-25T16:20:35.460 に答える