0
我想嘗試在河的均方差最優化示例我用這個簡單的例子開始:爲什麼solve.QP返回不可行解
> data(edhec)
> col.mean <- colMeans(edhec)
> Dmat <- cov(edhec)
> Amat <- matrix(1,nrow=nrow(Dmat))
> Amat <- cbind(Amat,col.mean)
> Amat <- cbind(Amat,diag(nrow(Dmat)))
> bvec <- c(1,0.005,rep(0,nrow(Dmat)))
> sol <- solve.QP(Dmat = 2*Dmat,dvec = 0.5*col.mean,Amat = Amat,bvec = bvec,meq = 1)
> sol$solution
[1] 8.882101e-17 0.000000e+00 6.661437e-01 1.990021e-17 1.900749e-15 -3.685111e-17 2.419712e-16 3.338563e-01
[9] -3.903081e-16 7.237917e-18 1.093498e-15 0.000000e+00 1.243608e-15
>
但是似乎這個解決方案是不可行的。有兩個砝碼其是負頂撞約束之一:
> Amat
col.mean
Convertible Arbitrage 1 0.006408553 1 0 0 0 0 0 0 0 0 0 0 0 0
CTA Global 1 0.006489474 0 1 0 0 0 0 0 0 0 0 0 0 0
Distressed Securities 1 0.007953289 0 0 1 0 0 0 0 0 0 0 0 0 0
Emerging Markets 1 0.008246053 0 0 0 1 0 0 0 0 0 0 0 0 0
Equity Market Neutral 1 0.006002632 0 0 0 0 1 0 0 0 0 0 0 0 0
Event Driven 1 0.007622368 0 0 0 0 0 1 0 0 0 0 0 0 0
Fixed Income Arbitrage 1 0.004230921 0 0 0 0 0 0 1 0 0 0 0 0 0
Global Macro 1 0.007672368 0 0 0 0 0 0 0 1 0 0 0 0 0
Long/Short Equity 1 0.007759868 0 0 0 0 0 0 0 0 1 0 0 0 0
Merger Arbitrage 1 0.006784868 0 0 0 0 0 0 0 0 0 1 0 0 0
Relative Value 1 0.006701316 0 0 0 0 0 0 0 0 0 0 1 0 0
Short Selling 1 0.004161184 0 0 0 0 0 0 0 0 0 0 0 1 0
Funds of Funds 1 0.005918421 0 0 0 0 0 0 0 0 0 0 0 0 1
的第一列對應於加權和的約束應爲1。第二列是目標返回的約束。其餘的列正好是負數,不包括負值。關於solve.QP
的幫助,約束被稱爲A^T b> = b_0。換位Amat
看起來
> t(Amat)
Convertible Arbitrage CTA Global Distressed Securities Emerging Markets Equity Market Neutral Event Driven
1.000000000 1.000000000 1.000000000 1.000000000 1.000000000 1.000000000
col.mean 0.006408553 0.006489474 0.007953289 0.008246053 0.006002632 0.007622368
1.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 1.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 1.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 1.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 1.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
Fixed Income Arbitrage Global Macro Long/Short Equity Merger Arbitrage Relative Value Short Selling
1.000000000 1.000000000 1.000000000 1.000000000 1.000000000 1.000000000
col.mean 0.004230921 0.007672368 0.007759868 0.006784868 0.006701316 0.004161184
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
1.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 1.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 1.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 1.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 1.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
Funds of Funds
1.000000000
col.mean 0.005918421
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
0.000000000
1.000000000
和矢量B0似乎也是正確的:
> bvec
[1] 1.000 0.005 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
>
的問題是,爲什麼solve.QP
返回一個不可行的解決方案?