Ok, I feel kinda silly for not having thought of that before... 


Anyway, thanks, Peter.




________________________________
 De: Peter Ehlers <ehlers@ucalgary.ca>

Cc: "r-help@r-project.org" <r-help@r-project.org> 
Enviadas: Quarta-feira, 23 de Maio de 2012 19:22
Assunto: Re: [R] Error message from optim

On 2012-05-23 09:39, Rubem Kaipper Ceratti wrote:
> Dear list,
>
> When running the script below, the optim function returns the message 'Error in function (par) : could not find function "fn"'. I've re-read the code a few times and just can't figure out why it's happening. Any help/suggestion is appreciated.
>
>
> Regards,
> Rubem
>
>
>
> ## R script
>
> library(tweedie)
>
>
> period<-factor(1:4)
> herd<-factor(1:10)
>
> dat<-expand.grid(period=period,herd=herd)
>
> beta<-c(-.3,1.7,2.5,3.4)
> x<-model.matrix(~period,dat)
>
> b<-rnorm(length(levels(dat$herd)),sd=.3)
> z<-model.matrix(~-1+herd,dat)
>
> mu<-as.vector(exp(x%*%beta+z%*%b))
> phi<-.8; p<-1.6
>
> dat$resp<-rtweedie(nrow(dat),p,mu,phi)
> y<-dat$resp
>
>
> th<-c(rep(0,ncol(x)),1,1,1.5)
>
> beta<-th[1:ncol(x)]
> sig<-th[ncol(x)+1]
> phi<-th[ncol(x)+2]
> p<-th[ncol(x)+3]
>
> z.ast<-sig*z
>
> l.u<-function(u,y,z,x,beta,phi,p){
>    eta.u<-as.vector(x%*%beta+z%*%u)
>    f.y<-log(dtweedie(y,p,exp(eta.u),phi))
>    l.yu<-sum(f.y)+sum(dnorm(u,log=T))
>    return(-l.yu)
> }
>
> uhat<-optim(rep(0,ncol(z)),l.u,method="BFGS",hessian=T,
>              y=y,z=z.ast,x=x,beta=beta,phi=phi,p=p)

Try naming the 'par' and 'fn' arguments:

   optim(par=...., fn=l.u, ....)

Peter Ehlers
	[[alternative HTML version deleted]]

