2014-09-20 25 views
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返回一个不可行的解决方案?

回答

相关问题