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 <mo...@what3words.com> wrote: > 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 > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.