[R] FW: problem with optim()

From: chirine wolley <wolley.chirine_at_hotmail.com>
Date: Thu, 19 May 2011 15:48:28 +0200

 

From: wolley.chirine_at_hotmail.com
To: biomathjdaily_at_gmail.com
Subject: RE: [R] problem with optim()
Date: Thu, 19 May 2011 15:45:15 +0200

First, thank you for ur response...
Actually I didn't write the entire code ...X, Y and p_tilde are of course all defined at the beginning of my code. Normally the optimal values that I get should let me create a model for prediction. However the model currently obtained is not good at all.... And I think that the fact it gives me the exactly same values if I change the function to maximize shows that there's a problem in my code....  

> Date: Thu, 19 May 2011 09:29:02 -0400
> Subject: Re: [R] problem with optim()
> From: biomathjdaily_at_gmail.com
> To: wolley.chirine_at_hotmail.com
> CC: r-help_at_r-project.org
>
> What do you mean when you say "wrong results"? What do you expect for
> the output? Your code doesn't work for me because it references X in
> places and X is not defined.
>
> Have you tested your functions to make sure they return reasonable values?
>
> On Thu, May 19, 2011 at 9:17 AM, chirine wolley
> <wolley.chirine_at_hotmail.com> wrote:
> >
> > Dear R-users,
> >
> > I would like to maximize the function g above which depends on 4 parameters (2 vectors, 1 real number, and 1 matrix) using optim() and BFGS method. Here is my code:
> >
> > # fonction to maximize
> >
> > g=function(x)
> > {
> > x1 = x[1:ncol(X)]
> > x2 = x[(ncol(X)+1)]
> > x3 = matrix(x[(ncol(X)+2):(ncol(X)+1+ncol(X)*ncol(Y))],nrow=ncol(X),ncol=ncol(Y))
> > x4 = x[(ncol(X)+1+ncol(X)*ncol(Y)+1):length(x)]
> > res1=rep(0,nrow(X))
> > res2=matrix(0,nrow=nrow(X),ncol=ncol(Y))
> > log.res2=matrix(0,nrow=nrow(X),ncol=ncol(Y))
> > res2.b=rep(0,nrow(X))
> > res3 = rep(0,nrow(X))
> > res3.b = rep(0,nrow(X))
> > for (i in 1:nrow(X))
> > {
> > res1[i]=1/(1+exp(-t(x1)%*%X[i,]-x2))
> > for (t in 1:ncol(Y))
> > {
> > res2[i,t] = ((1-(1+exp(-t(x3[,t])%*%X[i,]-x4[t]))^(-1))^(abs(Y[i,t]-Yb[i])))*(((1+exp(-t(x3[,t])%*%X[i,]-x4[t]))^(-1))^(1-abs(Y[i,t]-Yb[i])))
> > log.res2[i,t]=log(res2[i,t])
> > res2.b[i]=res2.b[i]+log.res2[i,t]
> > }
> > res3[i] = p_tilde[i]*log(res1[i])
> > res3.b[i] = p_tilde[i]*(res2.b[i])
> > }
> > -(ncol(Y)*sum(res3)+sum(res3.b))
> >
> > }
> >
> > ##### Gradiants:
> >
> > gr=function(x)
> > {
> > x1 = x[1:ncol(X)]
> > x2 = x[(ncol(X)+1)]
> > x3 = matrix(x[(ncol(X)+2):(ncol(X)+1+ncol(X)*ncol(Y))],nrow=ncol(X),ncol=ncol(Y))
> > x4 = x[(ncol(X)+1+ncol(X)*ncol(Y)+1):length(x)]
> > gr1 = rep(0,ncol(X))
> > gr4 = rep(0,ncol(Y))
> > gr3 = matrix(0,nrow=ncol(X),ncol=ncol(Y))
> > gr1.b = matrix(0,nrow=nrow(X),ncol=ncol(X))
> > gr2.b = rep(0,nrow(X))
> > eta = matrix(0,nrow=nrow(X),ncol=ncol(Y))
> > d.eta.3 = array(0,dim=c(nrow(X),ncol(X),ncol(Y)))
> > d.eta.4 = matrix(0,nrow=nrow(X),ncol=ncol(Y))
> > gr3.b1 = array(0,dim=c(nrow(X),ncol(X),ncol(Y)))
> > gr4.b1 = matrix(0,nrow=nrow(X),ncol=ncol(Y))
> >
> > #Gradiant of alpha and beta
> >
> > for (i in 1:nrow(X))
> > {
> > gr1.b[i,] = (2*p_tilde[i]-1)*((exp(-t(x1)%*%X[i,]-x2)*X[i,])/(1+exp(-t(x1)%*%X[i,]-x2))^2)
> > gr2.b[i] = (2*p_tilde[i]-1)*((exp(-t(x1)%*%X[i,]-x2))/(1+exp(-t(x1)%*%X[i,]-x2))^2)
> > }
> > for (j in 1:ncol(X))
> > {
> > gr1[j] = sum(gr1.b[,j])
> > }
> > gr2 = sum(gr2.b)
> >
> >
> > #Gradiant de w et gamma
> > for (i in 1:nrow(X))
> > {
> > for (t in 1:ncol(Y))
> > {
> > eta[i,t] = 1/(1+exp(-t(x3[,t])%*%X[i,]-x4[t]))
> > d.eta.3[i,,t] = eta[i,t]*(1-eta[i,t])*X[i,]
> > d.eta.4[i,t] = eta[i,t]*(1-eta[i,t])
> > gr3.b1[i,,t] = p_tilde[i]*((-abs(Y[i,t]-Yb[i]))*(1-eta[i,t])^(-1)+(1-abs(Y[i,t]-Yb[i]))*
> > (eta[i,t])^(-1))*d.eta.3[i,,t]
> > gr4.b1[i,t] = p_tilde[i]*((-abs(Y[i,t]-Yb[i]))*(1-eta[i,t])^(-1)+(1-abs(Y[i,t]-Yb[i]))*
> > (eta[i,t])^(-1))*d.eta.4[i,t]
> > }
> > }
> > for (t in 1:ncol(Y))
> > {
> > for (j in 1:ncol(X))
> > {
> > gr3[j,t] = sum(gr3.b1[,j,t])
> > }
> > gr4[t] = sum(gr4.b1[,t])
> > }
> > c(-gr1,-gr2,-gr3,-gr4)
> > }
> >
> > opt = optim(c(alpha[,c+1],beta[c+1],w,gamma),g,gr,method="BFGS")
> >
> > The problem is that it gives me wrong results, and I have noticed that if I change my function to maximize (for example if, instead of -(ncol(Y)*sum(res3)+sum(res3.b)), I try to maximise -(ncol(Y)*sum(res3)), it gives me the exactly same results...which is not possible!
> > So maybe I am using optim() in a wrong way...Does someone have an idea what could be wrong in my code ?
> >
> > Thank you very much in advance
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
> >
>
>
>
> --
> ===============================================
> Jon Daily
> Technician
> ===============================================
> #!/usr/bin/env outside
> # It's great, trust me.
                                               

        [[alternative HTML version deleted]]



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. Received on Thu 19 May 2011 - 18:07:04 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 19 May 2011 - 18:10:08 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive