
Como o Benilton e o Wagner pontuaram, problemas de otimização são por default de minimização e vc quer maximizar a sua função de verossimilhança. Quando vc chama a função optim vc está minimizando, e como não existe mínimo vc está tendo problemas. Basta trocar o parâmetro da função optim. Abs Vinicius Em 26 de abril de 2014 07:31, Wagner Bonat <wbonat@gmail.com> escreveu:
Vc precisa escrever o negativo da log-verossimilhança. Veja abaixo.
Quanto aos warnings talvez os parametros tenham alguma restrição vc pode usar o L-BFGS-B ou reparametrizar o modelo para evitar isso.
n<-10000 u<-runif(n) z<-1.8 beta<- 1.2 dados1 = (1/(beta*(z-2)))*((u^((1-z)/(2-z))-1)/((1-z)/(2-z)))
## Definindo a função de verossimilhança
vero <- function(par,x){ q = par[1] lambda = par[2] saida <- ((sum(log(1 - ((1 - q)*x*lambda))))/(1 - q)) + ((n)*log(2 - q)) + (n*log(lambda)) return(saida) }
optim(par=c(1.8,4),fn=vero, method="BFGS",x=dados1) $par [1] 1.7828974 0.8629283
$value [1] 628.0947
$counts function gradient 44 11
$convergence [1] 0
$message NULL
There were 11 warnings (use warnings() to see them)
Em 26 de abril de 2014 01:33, Romero Luiz M. Sales Filho < romero.sfilho@gmail.com> escreveu:
Caros amigos,
estou precisando encontrar os estimadores para os parâmetros da dist. q-ponencial, cuja pdf é dada da seguinte forma:
[image: { (2-q) \lambda e_q^{-\lambda x}}]
onde,
[image: e_q(x) = [1+(1-q)x]^{1 \over 1-q}].
Estou tendo problemas pois utilizando o pacote Optim do R, não ocorre convergência em alguns métodos, na verdade só há convergência usando o método SANN, e mesmo assim as estimativas estão muito diferentes dos parâmetros que foram utilizados para gerar uma amostra aleatória da dist. q-exp.
O código utilizado no R é o seguinte:
## Gerando Valores de uma q-exponencial
n<-10000 u<-runif(n) z<-1.8 beta<- 1.2 dados1 = (1/(beta*(z-2)))*((u^((1-z)/(2-z))-1)/((1-z)/(2-z)))
## Definindo a função de verossimilhança
vero <- function(par,x){ q = par[1] lambda = par[2] ((sum(log(1 - ((1 - q)*x*lambda))))/(1 - q)) + ((n)*log(2 - q)) + (n*log(lambda)) }
## Otimizando os parâmetros - o método SANN sempre converge.
optim(par=c(1.8,4),fn=vero, method="SANN",x=dados1 )
E a saída é a seguinte:
$par [1] 1.000014 3.807168
$value [1] -284366598
$counts function gradient 10000 NA
$convergence [1] 0
$message NULL
Houve 50 ou mais avisos (use warnings() para ver os primeiros 50)
Alguém pode me ajudar nessa questão, uma vez que as estimativas dos parâmetros estão muito diferentes dos parâmetros originais?
Obrigado!
Romero.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Wagner Hugo Bonat LEG - Laboratório de Estatística e Geoinformação UFPR - Universidade Federal do Paraná
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- *Vinicius Brito Rocha.* *Estatístico e Atuário * *M.Sc. Engenharia de Produção/PO*