[R-br] Minimização Condicionada
Luciano Ramos Gonçalves
lrg.financas em gmail.com
Sexta Julho 22 00:02:22 BRT 2011
Gostaria de saber qual é a melhor função para realizar uma minimização
com restrições: nlm(), optim(), optimize() ou constrOptim(), ou outra?
Abaixo vai a função objeto, e as restrições descritas. Qualquer dica já
ajuda. O meu problema maior foi aplicar as restrições aos métodos de
otimização.
Obs.: Salvo engano, tudo abaixo é plenamente reproduzível.
# Tenho a função abaixo.
LogLik <- function(parametros,dados){
alpha <- parametros[1]
delta <- parametros[2]
epsilon.c <- parametros[3]
epsilon.v <- parametros[4]
mu <- parametros[5]
B <- dados[,2]
S <- dados[,3]
logl <- sum(-epsilon.c-epsilon.v+((max(c(B,S))+min(c(B,S)))/2)*
(log((epsilon.v/(mu+epsilon.v)))+
log((epsilon.c/(mu+epsilon.c))))+
B*log(mu+epsilon.c)+S*log(mu+epsilon.v))+
sum(
log(
(alpha)*(1-delta)*exp(-mu)*
((((epsilon.v/(mu+epsilon.v))))^
(S-((max(c(B,S))+min(c(B,S)))/2)))*
((epsilon.c/(mu+epsilon.c))^
(-((max(c(B,S))+min(c(B,S)))/2)))+
(alpha)*(delta)*exp(-mu)*
((((epsilon.c/(mu+epsilon.c))))^
(B-((max(c(B,S))+min(c(B,S)))/2)))*
((epsilon.v/(mu+epsilon.v))^
(-((max(c(B,S))+min(c(B,S)))/2)))+
(1-alpha)*
((epsilon.c/(mu+epsilon.c))^
(B-((max(c(B,S))+min(c(B,S)))/2)))*
((epsilon.v/(mu+epsilon.v))^
(S-((max(c(B,S))+min(c(B,S)))/2)))
))
return(logl)
}
# Supondo os valores
BS <- cbind(1,500,501)
theta <- c(0.4,0.5,40,40,50)
# Quero minimizar a função:
LogLik(theta,BS)
# Com as seguintes restrições, que eu não consegui implementar (as
restrições são
# aos valores de theta, ou "parametros" na função, em ordem):
# 0 <= alpha <= 1 ("alpha" é um valor entre 0 e 1)
# 0 <= delta <= 1 ("delta" é um valor entre 0 e 1)
# epsilon.c > 20 ("epsilon.c" é maior que 20)
# epsilon.v > 20 ("epsilon.v" é maior que 20)
# mu > 30 ("mu" é maior que 30)
Grato,
Luciano.
Mais detalhes sobre a lista de discussão R-br