Hello,

I've recently run into a problem when trying to do some MLE parameter

estimation in R using a non-linear Kalman filter. I've written some of the

functions myself and everything seems to be working fine until the end when

I try to use the mle2 function written for R. The error message states

that the argument "minuslog1" is missing with no default, but I've

specified this argument using my written function. Any help with this would

much appreciated.

##script that codes for a non-linear Kalman filter

#simulate starting conditions and data

N.obs=seq(from=5,to=200,by=5)

y.procobs2=Nobs

#write the function called "nlkfpred" to predict the mean and variance of

#each observed value; Nobs is the data set

nlkfpred=function(r,K,procvar,obsvar,M.n.start,Var.n.start,Nobs){

nt = length(Nobs)

M.nobs = numeric(nt)

Var.nobs = numeric(nt)

M.n = M.n.start

Var.n = Var.n.start

M.nobs[1] = M.n.start

Var.nobs[1] = Var.n.start+obsvar

for (t in 2:nt) {

M.ni = M.n+r*M.n(1-M.n/K)

b = 1+r-2*r*M.n/K

Var.ni = b^2*Var.n+procvar

M.nobs[t] = M.ni

Var.nobs[t] = Var.ni+obsvar

M.n = M.ni+(Var.ni/Var.nobs[t])*(Nobs[t]-M.nobs[t])

Var.n = Var.ni*(1-(Var.ni/Var.nobs[t]))

}

list(mean = M.nobs,var = Var.nobs)

}

##write the function called "nlkflik" to make a normal likelihood comparison

##using log values of the parameters so that we don't have to worry about

##negative parameter values; "obs.data" is an observed data set

nlkflik =

function(logr,logK,logprocvar,logobsvar,logM.n.start,logVar.n.start,

obs.data){

pred = nlkfpred(r = exp(logr),K = exp(logK),procvar = exp(logprocvar),

obsvar = exp(logobsvar),M.n.start = exp(logM.n.start),Var.n.start =

exp(logVar.n.start),

N.obs=y.procobs2)

-sum(dnorm(obs.data,mean = pred$mean,sd = sqrt(pred$var),log = TRUE))

}

#designate starting parameter values

startvec=list(logr=log(0.25),logK=log(10),logprocvar=log(0.5),

logobsvar=log(0.5),logM.n.start=log(3),logVar.n.start=-2)

#load two required packages

require(bbmle)

require(optimx)

#obtain MLE estimates of paramter values

m4 = mle2(minuslog1 = nlkflik,start = startvec,data = list(obs.data=Nobs),

method = "Nelder-Mead", control = list(maxit=2000))

Thanks

--

Curtis

[[alternative HTML version deleted]]

______________________________________________

[hidden email] mailing list

https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide

http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.