Mehmet Balcilar mbalcilar at gmail.com
Tue May 23 11:03:33 CEST 2006

```I guess I just need to sum over observations.

Here are my functions:

--------------------------------------------------------------------------------------------
#
#  function to compute gradient vector of the two-regime LSTAR model
#

dlogistic <- function(theta,x,z,g.scale)
{
n = nrow(x)
k = length(theta)
k1 = (k-2)/2 + 2
G = logistic(z,g.scale,exp(theta[1]),theta[2])
dgam = exp(theta[1]) * (x %*% theta[3:k1] - x %*% theta[(k1+1):k]) * (G*(1-G)) * (z-theta[2])/g.scale
dc = (x %*% theta[(k1+1):k] - x %*% theta[3:k1]) * (G*(1-G)) * (exp(theta[1])/g.scale)*rep(1,T)
return(cbind(dgam,dc));
}

#
# function to compute the value of the logistic transition function
#

logistic <- function(z,g.scale,gam,c)
{
return(1./(1+exp(-(gam/g.scale)*(z-c))))
}

#
#  function to compute gradient matrix of parameter estimates for
#  LSTAR model
#
#

{
dgamdc=dlogistic(theta,x,z,g.scale)
G = logistic(z,g.scale,exp(theta[1]),theta[2])
dphi_1 = x*(1-G)
dphi_2 = x*G
}

---------------------------------------------------------------------------------

I guess

will do what I want.

Thanks.

Prof Brian Ripley wrote:
> On Tue, 23 May 2006, Mehmet Balcilar wrote:
>
>> Hi,
>>
>> I am using optim to estimate the parameters of a smooth transition
>> autoregressive model.  I  wrote a function to return the  gradient  for
>> each observation. So, for k parameters and n observations my function
>> returns a (n x k) matrix. The gr argument of optim expects a (k x 1)
>> vector.  Now,  what is the correct way of passing my gradient matrix to
>> optim?
>
> gr is documented to be a function, not a vector!
>
> Since you are optimizing a numeric function such as the
> log-likelihood, the derivative is a vector, not a matrix, and your gr
> function should return a vector.  We have far too few details, but for
> example did you forget to sum over observations?
>

```