Do you mean that your objective function (given to nlminb) parameterized a positive definite matrix, P, as the elements in its upper (or lower) triangle? If so, you could reparameterize it by the non-zero (upper triangular) elements of the Choleski decomposition, C, of P. Compute P as crossprod(C), compute the initial estimate of C as chol(P).
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of Steven LeBlanc > Sent: Sunday, October 20, 2013 3:02 PM > To: r-help@R-project.org > Subject: [R] nlminb() - how do I constrain the parameter vector properly? > > Greets, > > I'm trying to use nlminb() to estimate the parameters of a bivariate normal > sample and > during one of the iterations it passes a parameter vector to the likelihood > function > resulting in an invalid covariance matrix that causes dmvnorm() to throw an > error. Thus, > it seems I need to somehow communicate to nlminb() that the final three > parameters in > my parameter vector are used to construct a positive semi-definite matrix, > but I can't see > how to achieve this using the constraint mechanism provided. Additional > details are > provided in the code below. > > Suggestions? > > Best Regards, > Steven > > Generate the data set I'm using: > > mu<-c(1,5) > sigma<-c(1,2,2,6) > dim(sigma)<-c(2,2) > set.seed(83165026) > sample.full<-sample.deleted<-mvrnorm(50,mu,sigma) > delete.one<-c(1,5,13,20) > delete.two<-c(3,11,17,31,40,41) > sample.deleted[delete.one,1]<-NA > sample.deleted[delete.two,2]<-NA > missing<-c(delete.one,delete.two) > complete<-sample.deleted[!(is.na(sample.deleted[,1]) | > is.na(sample.deleted[,2])),] > deleted<-sample.deleted[missing,] > > Try to estimate the parameters of the data set less the deleted values: > > exact<-function(theta,complete,deleted){ > one.only<-deleted[!(is.na(deleted[,1])),1] > two.only<-deleted[!(is.na(deleted[,2])),2] > u<-c(theta[1],theta[2]) > sigma<-c(theta[3],theta[5],theta[5],theta[4]) > dim(sigma)<-c(2,2) > -sum(log(dmvnorm(x=complete,mean=u,sigma=sigma)))- > sum(log(dnorm(one.only,u[1],sigma[1,1])))- > sum(log(dnorm(two.only,u[2],sigma[2,2]))) > } > nlminb(start=c(0,0,1,1,0),objective=exact,complete=complete,deleted=deleted,control=l > ist(trace=1)) > > Escape and it stops at Iteration 9 on my machine. > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.