Hola,
Efectivamente tanto con optim(), como con constrOptim() tienes esa
limitación de obtener el máximo o el mínimo a un intervalo determinado.
Para el problema que planteas, creo que debieras de pensar en una solución
general y por qué no resolverlo de forma analítica. En tu planteamiento no
aparece la función que hay que maximizar o minimizar, tan sólo has incluido
la restricción.
La solución analítica de este tipo de problemas de maximización/minimización
de funciones sujetas a restricciones se suelen resolver de esta manera:
http://es.wikipedia.org/wiki/Multiplicadores_de_Lagrange
Si nos puedes comentar algo más del detalle de la función que quieres
minimizar, podríamos probar a ver si hay tal solución analítica.
Saludos,
Carlos Ortega
www.qualityexcellence.es
www.datanalytics.com/blog
2011/1/26 <guivivi@alumni.uv.es>
> Hola,
>
> Pongo un ejemplo resumido del problema que estoy intentando resolver:
>
> Para un valor n = 10, he obtenido un valor y = 1.11
>
> Para este valor y, busco el valor mínimo de n que cumpla:
>
> n*y*nivel.sig < 3
>
> Para hacerlo con R, defino mi función como:
>
> s <- function (n, y, nivel.sig){
> n*y*nivel.sig - 3
> }
>
> Para resolver esto, la función uniroot() presenta problemas porque exige
> un parámetro "interval" que define un intervalo en cuyos extremos
la
> función debe ser de distinto signo o cero, así que de antemano hay que
> comprobar que se cumpla esta condición en la función.
> Cuando tienes muchos valores distintos de n y de y, comprobar esto
> resulta muy laborioso.
>
> Por tanto, he buscado alternativas y he encontrado optimize() y nlm().
> Así es como estoy usando optimize():
>
> > optimize(s, c(0,10), tol = 0.1, y = 1.11, nivel.sig = 0.05)
> obtengo:
> $minimum
> [1] 0.04797285
>
> $objective
> [1] -2.997338
>
> Pero si hago:
> > optimize(s, c(9,10), tol = 0.1, y = 1.11, nivel.sig = 0.05)
> obtengo:
> $minimum
> [1] 9.055728
>
> $objective
> [1] -2.497407
>
> Es decir, sólo me busca el mínimo entre el intervalo que yo le digo,
> pero yo le que quisiera es que me encontrara el mínimo n con nivel.sig >
0.05 que satisfaga n*y*nivel.sig < 3 siendo y=1.11, sin tener que
> especificar yo el intervalo.
>
> Con nlm() tampoco sé muy bien como hacerlo.
>
> No sé si esto se puede hacer o estoy enfocando mal el problema.
>
> Gracias por la ayuda.
>
> Un saludo,
>
> Guillermo
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
[[alternative HTML version deleted]]