Mensagem de erro da função optim

CaRos, Ao rodar o script abaixo, a função 'optim' retorna a mensagem: 'Erro em function (par) : não foi possível encontrar a função "fn"'. Tentei, mas não consegui encontrar a razão para o erro. Alguém teria uma idéia? Grato, Rubem ## Script R: library(tweedie) # Simulação de dados 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)

para usar com a optim() a sua função l.u tem que receber todos os parametros a serem estimados em um unico vetor como primeiro argumento. Isto terá a mesma dimensao do vetor de valores iniciais Me parece que voce está passando varias argumentos como os parametros. Em Qua, 2012-05-23 às 05:40 -0700, Rubem Kaipper Ceratti escreveu:
library(tweedie)
# Simulação de dados 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) -- Paulo Justiniano Ribeiro Jr LEG (Laboratorio de Estatistica e Geoinformacao) Universidade Federal do Parana Caixa Postal 19.081 CEP 81.531-990 Curitiba, PR - Brasil Tel: (+55) 41 3361 3573 VOIP: (+55) (41) (3361 3600) 1053 1066 Fax: (+55) 41 3361 3141 e-mail: paulojus AT ufpr br http://www.leg.ufpr.br/~paulojus

Não é esse o caso. No código que eu postei, a função l.u é otimizada somente com relação à 'u' (primeiro argumento da função), enquanto todos os outros valores ficam constantes. Eu acabei postando a pergunta no r-help tb e a solução é bastante prosaica -- bastava nomear os argumentos, ie, optim(par=...,fn=...,...). De toda forma, obrigado pela resposta.
participantes (2)
-
Paulo J Ribeiro Jr
-
Rubem Kaipper Ceratti