[R] how to use solve.QP

Achim Zeileis Achim.Zeileis at wu-wien.ac.at
Thu Jan 13 20:19:35 CET 2005


On Thu, 13 Jan 2005 14:07:29 -0500 roger bos wrote:

> Zeileis,
> 
> Thanks, I didn't know about "portfolio.optim".  I wanted to see how it
> works, but when I try showMethods, it doesn't show it to me.  Does
> that mean I am not allowed to see the inner workings?

1. All of this is open source, so you are *always* allowed to look
   at the sources. (If you haven't got a version of the source package,
   then you can always get it from CRAN.)
2. showMethods() is for S4 generics, portfolio.optim is an S3 generic.
3. Simply typing portfolio.optim.default at the prompt should print the
   function.
Z

> Thanks,
> 
> Roger
> 
> > showMethods("portfolio.optim")
> 
> Function "portfolio.optim":
> <not a generic function>
> > 
> 
> 
> On Thu, 13 Jan 2005 19:58:33 +0100, Achim Zeileis
> <Achim.Zeileis at wu-wien.ac.at> wrote:
> > On Thu, 13 Jan 2005 13:44:58 -0500 roger bos wrote:
> > 
> > > At the risk of ridicule for my deficient linear algebra skills, I
> > > ask for help using the solve.QP function to do portfolio
> > > optimization.  I am trying to following a textbook example and
> > > need help converting the problem into the format required by
> > > solve.QP.  Below is my sample code if anyone is willing to go
> > > through it.  This problem will not solve because it is not set up
> > > properly.  I hope I included enough details for someone to deciper
> > > it.  Or does anyone have a good example they can send me?
> > 
> > You can look at the man page, code and example of the function
> > portfolio.optim() in package tseries which does portfolio
> > optimization based on solve.QP from quadprog.
> > 
> > hth,
> > Z
> > 
> > > Thanks so much for any hints and suggestions, Roger.
> > >
> > >
> > >
> > > library(quadprog, lib.loc="C:\\Program Files\\R\\tools")
> > > library(MASS, lib.loc="C:\\Program Files\\R\\tools")
> > > n<-100
> > > m<-200
> > > rho<-0.7
> > > sigma<-0.2
> > > mu<-0.1
> > > Cov <- matrix(rho*sigma*sigma, ncol=n, nrow=n)
> > > diag(Cov) <- rep(sigma*sigma, n)
> > > S <- 1+matrix(mvrnorm(m, rep(mu, n), Sigma=Cov), ncol=n)
> > >
> > > #The problem is formulated as minimize t(b) Cov b
> > > #subject to cLo <= A <= cUp
> > > #and bLo=0 <= w <= 1=bUp
> > >
> > > Cov <- var(S)
> > > mu <- apply(S, 2, mean)
> > > mu.target <- 0.1
> > > #subject to cLo <= A <= cUp and bLo=0 <= b <= 1=bUp
> > > A <- rbind(1,mu)
> > > cLo <- c(1, mu.target)
> > > cUp <- c(1, Inf)
> > > bLo <- rep(0, n)
> > > bUp <- rep(1, n)
> > >
> > > #I convert [cLo <= A <= cUp] to Amat >= bvec and [bLo=0 <= w
> > > ##<=1=bUp] to
> > > Amat <- rbind(-1, 1, -mu, mu)
> > > dim(bLo) <- c(n,1)
> > > dim(bUp) <- c(n,1)
> > > bvec <- rbind(-1, 1, mu.target, Inf, bLo, -bUp)
> > > zMat <- matrix(rep(0,2*n*n),ncol=n, nrow=n*2)
> > > zMat[,1] <- c(rep(1,n), rep(-1,n))
> > > Amat <- t(rbind(Amat, zMat))
> > >
> > > #So I set Dmat=Cov and set dvec=0
> > > Dmat=Cov
> > > dvec=rep(0, nrow(Amat))
> > >
> > > #The first two rows of Amat should be equality constraints (so
> > > #weights sum to 1)
> > > meq <- 2
> > >
> > > sol <- solve.QP(Dmat=Dmat, dvec=dvec, Amat=Amat, bvec=bvec, meq)
> > > sol
> > > 
> > > ______________________________________________
> > > R-help at stat.math.ethz.ch mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide!
> > > http://www.R-project.org/posting-guide.html
> > >
> >
>




More information about the R-help mailing list