Skip to content

MLE packages

3 messages · Bert Gunter, Mohan Ganesalingam

#
I'm fairly new to R. The language is amazing, but I'm having trouble
navigating packages. I have a solution that handles the problems I'm
working on, but I don't know if it could be solved more cleanly with mle,
bbmle, maxLik, etc..

Here's an example problem first. I have run many WAV files through voice
recognition software; the software returns 50 hypotheses for each, together
with scores S_{ni} indicating how 'good' the i^th hypothesis is. I want to
map the S_{ni} to a probability distribution. So I'm using MLE to fit a
function f that maps scores to logs of relative probabilities. This means
maximising

\sum_n[   f(S_{nc_n}) - \log \sum_i \exp f(S_{ni})   ]

where c_n is the index of the correct hypothesis for the n^th sample.

Here's the code:

ave_log_likelihood = function(f, scores) {
    def = scores %>% filter(Sc > 0)
    log_likelihoods = with(def, f(Sc) - matrixStats::rowLogSumExps(f(S),
na.rm = T))
    return(mean(log_likelihoods))
}

nlopts = list(algorithm = "NLOPT_LN_BOBYQA", maxeval = 500, print_level = 0)

best_linear_fit = function(scores) {
  res <- nloptr(c(0.01),
                function(a) -ave_log_likelihood(function(x) (a * x),
scores),
                opts = nlopts)
  return (data.frame(log_likelihood = -res$objective, slope = res$solution,
doubling = log(2)/res$solution))
}


Now, I need to write a lot of variants of this with different objectives
and with different classes of function. But there's a lot of verbiage in
best_linear_fit which would currently be copy/pasted. Also, as written it
makes it messy to fit on training data and then evaluate on test data.

I'd appreciate any advice on packages that might make it easier to write
this more cleanly, ideally using the idioms used in `lm`, etc., such as
formulae and `predict`. (Any pointers on writing cleaner R code would also
be lovely!)

Thanks in advance;
Mohan
#
Are you familiar with R resources you can search?

1.  CRAN task views:
https://cran.r-project.org/web/views/

2. For searching:  https://rseek.org/
Searching on "maximum likelihood" there appeared to bring up relevant
resources.

3. RStudio resources: https://education.rstudio.com/
Note: RStudio is a private company that is not part of the R Foundation,
but may have useful programming resources for you.

4. Tons of online tutorials:  Just search!

I have not looked at your code in any detail, but I'd be willing to bet
you're trying to reinvent a square wheel.

Cheers,
Bert

Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Mon, Oct 21, 2019 at 8:21 AM Mohan Ganesalingam <mohan at what3words.com>
wrote:

  
  
#
Hi Bert,

thanks for the quick reply. I spent a while searching before I posted, and
also read through the documentation for the mle fn and the  maxLik and
bbmle packages. As you say, it seems likely I'm reinventing something
standard, but nothing I can find quite seems to do what I need. Hence
posting on the mailing list... .

best wishes,
Mohan
On Mon, 21 Oct 2019 at 16:40, Bert Gunter <bgunter.4567 at gmail.com> wrote: