[R] How to improve the "OPTIM" results

Zaihra T zaihra at uwindsor.ca
Sun Apr 6 17:01:52 CEST 2008


   try to use method "L-BFGS-B" and give boudary condition to the parameters in
   use so that the algorithm search is limited to a particular region as it
   seems u have to many parameters.

   On Fri, 4 Apr 2008 22:10:20 -0700 (PDT) kathie wrote:
   >
   > Dear R users,
   >
   > I used to "OPTIM" to minimize the obj. function below. Even though I used
   > the true parameter values as initial values, the results are not very
   good.
   >
   >  How  could  I  improve  my  results? Any suggestion will be greatly
   appreciated.
   >
   > Regards,
   >
   > Kathryn Lord
   >
   >
   #---------------------------------------------------------------------------
   ---------------
   >
   > x = c(0.35938587, 0.34889725, 0.20577608, 0.15298888, -4.24741146,
   > -1.32943326,
   > 0.29082527, -2.38156942, -6.62584473, -0.22596237, 6.97893687,
   >! ; 0.22001081,
   > -1.39729222, -5.17860124, 0.52456484, 0.46791660, 0.03065136,
   > 0.32155177,
   > -1.12530013, 0.02608057, -0.22323154, 3.30955460, 0.54653982,
   > 0.29403011,
   > 0.47769874, 2.42216260, 3.93518355, 0.23237890, 0.09647044,
   > -0.48768933,
   > 0.37736377, 0.43739341, -0.02416010, 4.02788119, 0.07320802,
   > -0.29393054,
   > 0.25184609, 0.76044448, -3.34121918, 1.16028677, -0.60352008,
   > -2.86454069,
   > -0.84411691, 0.24841071, -0.11764954, 5.92662106, 1.03932953,
   > -6.21987657,
   > -0.54763352, 0.20263192) # data
   >
   > theta0= c(log(2),0,c(0,-.3,.3),log(c(10,.05,.05))) # initial value(In
   fact,
   > true parameter value)
   > n = length(x)
   >
   > fr2 = function(theta)
   > {
   > a1 = theta[1]; a2 = theta[2]
   > mu1 = theta[3]; mu2 = theta[4]; mu3 = theta[5]
   > g1 = theta[6]; g2 = theta[7]; g3! = theta[8]
   >
   > w1=exp(a1)/(1+exp(a1)+exp(a2))
   > w2=exp(a2)/(1+exp(a1)+exp(a2))
   > w3=1-w1-w2
   >
   > obj =((w1^2)/(2*sqrt(exp(g1)*pi))
   > + (w2^2)/(2*sqrt(exp(g2)*pi))
   > + (w3^2)/(2*sqrt(exp(g2)*pi))
   >
   > + 2*w1*w2*dnorm((mu1-mu2)/sqrt(exp(g1)+exp(g2)))/sqrt(exp(g1)+exp(g2))
   > +
   > 2*w1*w3*dnorm((mu1-mu3)/sqrt(exp(g1)+exp(g3)))/sqrt(exp(g1)+exp(g3))
   > +
   > 2*w2*w3*dnorm((mu2-mu3)/sqrt(exp(g2)+exp(g3)))/sqrt(exp(g2)+exp(g3))
   >
   > - (2/n)*(sum(w1*dnorm((x-mu1)/sqrt(exp(g1)))/sqrt(exp(g1))
   > + w2*dnorm((x-mu2)/sqrt(exp(g2)))/sqrt(exp(g2))
   > + w3*dnorm((x-mu3)/sqrt(exp(g3)))/sqrt(exp(g3)) )))
   >
   > return(obj)
   > }
   >
   > optim(theta0, fr2, method=BFGS", control = list (fnscale=10,
   > parscale=c(.01,.01,.01,.01,.01,1,1,1), maxit=100000))
   >
   > --
   > View this message in context:
   > http://www.nabble.com/How-to-impr!
   ove-the-%22OPTIM%22-results-tp16509144p16509144.html
   > Sent from the R help mailing list archive at Nabble.com.
   >
   > ______________________________________________
   > R-help at 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.


More information about the R-help mailing list