[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