On 14-04-2011, at 09:00, Kristian Lind wrote:

> HI Berend, 
> 
> Thank you for your reply. 
> 
> ......
> Finally the likelihood function at the end of your code
> 
> #Maximum likelihood estimation using mle package
> library(stats4)
> #defining loglikelighood function
> #T <- length(v)
> #minuslogLik <- function(x,x2)
> #{    f <- rep(NA, length(x))
> #        for(i in 1:T)
> #        {
> #            f[1] <- -1/T*sum(log(transdens(parameters = parameters, x =
> c(v[i],v[i+1])))-log(Jac(outmat=outmat, x2=c(v[i],r[i])))
> #        }
> #    f
> # }
> 
> How do the arguments of your function x and x2 influence the calculations in
> the likelihood function?
>  
> What I was thinking was that the x and x2 would be the input for the 
> transdens() and Jac() functions, but I guess that is already taken care of 
> when defining them.  
> 

Huh?
If you define zz <- function(x) {...} x is an argument which must be specified 
when using the function.

> As written now with argument x and x2 not being used in the body of the
> function, there is nothing to optimize.
>  
> That is correct and that is the problem. The likelihood need to be stated as 
> a function of the parameters, here the vector "parameters". Because in the 
> maximum likelihood estimation we want to maximize the value of the likelihood 
> function by changing the parameter values. The likelihood function is a 
> function of the parameters but only through the functions, for example 
> Kristian() is a function of "parameters" which feeds into Bo(), transdens() 
> and Jac(). Do you have any suggestions how to get around this issue?  
> 

What kind of problem?. Why don't you then do (parameters and outmat already 
known globally)

          f[i] <- -1/T*sum(log(transdens(parameters = parameters, x = 
x))-log(Jac(outmat=outmat, x2=x2)))

You should pass the arguments used by the optimizer in calling your likelihood 
function to the functions you defined. That way f[] will depend on x and x2 and 
so will the likelihood.

> Shouldn't f[1] be f[i] because otherwise the question is why are looping
> for( i in 1:T)?
> But then returning f as a vector seems wrong here. Shouldn't a likelihood
> function return a scalar?
> 
> The likelihood function should return a scalar. I think the fix could be to 
> make the function calculate the function value at each "i" and then make it 
> return the mean of all the f[i]s. 
> 

Is the mean  a likelihood?

Berend

______________________________________________
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