I'm trying to da an optimization for the followig function

Zwischenwert <- function (x)
{
        lambda<-x[1];
        mu<-x[2];
        gammal<-x[3];
        mud<-x[4];
        gammad<-x[5];
        Mittelwert <-0;
        for(t in 0:(T-1))
        {
                for(i in 0:(n-1))
                {
                        for(j in i:(n-1))
                        {
                                Mittelwert <- Mittelwert +( 
phi[i+1,j+1,t+1]*((j-i)*log(lambda)-log(factorial(j-i))-lambda));
                        };
                        if(t>0){Mittelwert <- Mittelwert 
+(phisum[i+1,t+1]*(-0.5*log(2*pi)-0.5*log(t*gammal+i*gammad)-((Y[t+1]-i*mud-t*mu-0.5*t*gammal+lambda*exp(mud+0.5*gammad)-t*lambda)^2
 )/(2*(t*gammal+i*gammad))));};
                };
        };
};


and it's gradient

ZWGrad <- function(x)
{
        lambda<-x[1];
        mu<-x[2];
        gammal<-x[3];
        mud<-x[4];
        gammad<-x[5];
        dlambda<-0;
        dmu<-0;
        dgamma<-0;
        dmud<-0;
        dgammad<-0;
        for (t in 0:(T-1))
        {
                for (i in 0:(n-1))
                {
                        for (j in i:(n-1))
                        {
                                
dlambda<-dlambda-phi[i+1,j+1,t+1]*(-1+(j-i)/lambda);
                        };
                };
        };
        for (t in 1:(T-1))
        {
                for (i in 0:(n-1))
                {
                        
dlambda<-dlambda+phisum[i+1,t+1]*(t-t*lambda*exp(mud+0.5*gammad))*(Y[t+1]-i*mud-mu*t-0.5*gammal*t+lambda*t*exp(mud+0.5*gammad)-lambda*t)/(2*(gammal*t+gammad*i));
                        
dmu<-dmu+phisum[i+1,t+1]*t*(Y[t+1]-i*mud-t*mu-0.5*gammal*t+lambda*t*exp(mud+0.5*gammad)-lambda*t)/(gammal*t+gammad*i);
                        dgamma<-dgamma+phisum[i+1,t+1]*( 
t*(0.5*i*gammad+Y[t+1]-i*mud-t*mu+lambda*t*exp(mud+0.5*gammad)-lambda*t)^2/(2*(gammal*t+gammad*i)^2)-t/(2*(gammal*t+gammad*i))-0.125*t);
                        
dmud<-dmud+phisum[i+1,t+1]*(i-lambda*t*exp(mud+0.5*gammad))*(Y[t+1]-i*mud-t*mu-0.5*gammal*t+lambda*t*exp(mud+0.5*gammad)-lambda*t)/(gammal*t+gammad*i);
                        
dgammad<-dgammad+phisum[i+1,t+1]*(Y[t+1]-i*mud-t*mu-0.5*gammal*t+lambda*t*exp(mud+0.5*gammad)-lambda*t)*(i*(Y[t+1]-i*mud-t*mu-0.5*gammal*t-lambda*t)-lambda*t*exp(mud+0.5*gammad)*(gammal*t+gammad*i-i))/(2*(gammal*t+gammad*i)^2);
                };
        };
        GradZW <- c(dlambda,dmu,dgamma,dmud,dgammad);
};


lambda, gammal und gammd need to be larger than 0, so I've tried different 
constrained methods like L-BFGS-B via optim and constrOptim, but both seem to 
have problems with my functions. The standard optim-method works, but sometimes 
it returns negative values for lambda, gammal and gammad. 
Those phi and phisums are known at runtime, n and T can be pretty large, so 
maybe R simple can't handel it.


Many thanks
Matthias


--

______________________________________________
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.

Reply via email to