границы параметров в mle2() с оптимизатором=optimx

В mle2 я использовал "optimx" в качестве оптимизатора. Я хочу использовать нижнюю и верхнюю границы для параметров. Как я могу это сделать?

Например:

 library("bbmle"); library("optimx")
 y <- c(0.654, 0.613, 0.315, 0.449, 0.297, 0.402, 0.379,
        0.423, 0.379, 0.3235, 0.269, 0.740, 0.418, 0.412, 
        0.494, 0.416, 0.338, 0.392, 0.484, 0.265) 
 gamma4 <- function(shape, scale) {
  -sum(dgamma(y, shape = shape, scale = scale,log = TRUE))
 } 
 gm <- mean(y) 
 cv <- var(y)/mean(y) 
 m5 <- mle2(gamma4,start = list(shape = gm/cv, scale = cv),
            optimizer="optimx") 
 m5

Or:

  mle2(gengamma3,start = list(shape = ci, 
      scale = bet, k=alp),
      optimizer="optimx")

Спасибо


r mle
person deniss    schedule 07.11.2015    source источник
comment
какой метод вы используете в optimx ?   -  person Ben Bolker    schedule 08.11.2015
comment
Я не написал никакого метода, это неправильно? Что я должен делать?   -  person deniss    schedule 08.11.2015
comment
хорошо, как выглядит ваш вывод? Не могли бы вы привести воспроизводимый пример?   -  person Ben Bolker    schedule 08.11.2015
comment
For example my data: y=c(0.654, 0.613, 0.315, 0.449, 0.297, 0.402, 0.379, 0.423, 0.379, 0.3235, 0.269, 0.740, 0.418, 0.412, 0.494, 0.416, 0.338, 0.392, 0.484, 0.265) To получить mles гамма-распределения: gamma4 = function(form, scale) { -sum(dgamma(y, shape = shape, scale = scale, log = TRUE))} gm = mean(y) cv = var(y)/mean (y) m5 = mle2 (gamma4, начало = список (форма = gm/cv, масштаб = cv), оптимизатор = optimx) m5   -  person deniss    schedule 08.11.2015
comment
Мой вывод: mle2 (минусlogl = gamma4, начало = список (форма = gm/cv, масштаб = cv), оптимизатор = optimx) Коэффициенты: масштаб формы 11,40723825 0,03709274 Логарифмическая вероятность: 15,18   -  person deniss    schedule 08.11.2015
comment
тогда ответ @Hamsternik мне нравится.   -  person Ben Bolker    schedule 08.11.2015
comment
Итак, если я не использую границы, могу ли я использовать optimx без метода?   -  person deniss    schedule 08.11.2015
comment
в любом случае есть метод по умолчанию. Но если вы не указываете какой-либо конкретный метод, то вы просто получаете некоторые из тех же оптимизаторов, которые встроены в optim() (Nelder-Mead по умолчанию или L-BFGS-B, если вы указываете границы), поэтому я не я действительно не вижу преимущества использования optimx здесь...   -  person Ben Bolker    schedule 08.11.2015


Ответы (1)


Вы можете попробовать написать более низкую функцию в качестве последнего параметра, как в примере ниже:

## use bounded optimization
## the lower bounds are really > 0, but we use >=0 to stress-test
## profiling; note lower must be named
(fit1 <- mle2(LL, method="L-BFGS-B", lower=c(ymax=0, xhalf=0)))
p1 <- profile(fit1)

Или в том:

# try bounded optimization with nlminb and constrOptim
(fit1B <- mle2(LL, optimizer="nlminb", lower=c(lymax=1e-7, lhalf=1e-7)))
p1B <- profile(fit1B)
confint(p1B)
(fit1C <- mle2(LL, optimizer="constrOptim", ui = c(lymax=1,lhalf=1), ci=2,
   method="Nelder-Mead"))

Но для полного понимания советую посмотреть здесь

person hamsternik    schedule 08.11.2015