Page 1 of 1

Integrate draws provided by the user into Apollo

Posted: 11 May 2022, 09:03
by alvarogutyerrez
Dear Stephane and David,

I wondered if it is possible to provide Apollo with draws that the user created. I need a fully-antithetic draws (Andersen, 2014) for a project, and I have written an R function (see below) for that, but I am not sure if it is possible to provide Apollo with it. At the moment, I am using the R package mixl (Molloy, Becker, Schmid & Axhausen, 2021) which allows the user to provide a matrix with draws, but I would like to port my code into Apollo.

Additionally, I am aware of the "antithetic" option available in Apollo. However, as far as I understood the source code of the apollo_makeDraws function it is only one-dimensional antithetic, and not fully antithetic (meaning using all the possible 2^{n-1} combinations, where n is the number of dimensions of the integration.)

Here is the R function I mentioned earlier:

Code: Select all

create_antithetic_sobol_draws <- function(Nindividuals, nDraws, draw_dimensions,scrambling=3){

  ## Uniform scramble Sobol draws
  uniform_sobol_draws <- as.matrix(randtoolbox::sobol(
    n          = Nindividuals * nDraws,
    scrambling = scrambling, #3 = sobolowenfauretezuka scrambling
    dim        = draw_dimensions,
    normal     = FALSE))


  ## Antithetic expansion
  anthi_draw <- do.call(
    rbind,
    apply(X = uniform_sobol_draws,
          MARGIN = 1,
          FUN = function(x) {
            expand.grid(
              data.frame(rbind(x, 1 - x)))})
  )

  ## as matrix
  anthi_draw_matrix <- as.matrix(anthi_draw)

  ## transform into standard normal distribution draws
  normal_anthitetic_scramble_sobol_draws <- stats::qnorm(anthi_draw_matrix)
  ## drop useless colnames
  colnames(normal_anthitetic_scramble_sobol_draws) <- NULL

  # count the total number of draws
  N_final_draws<- nrow(normal_anthitetic_scramble_sobol_draws)/Nindividuals

  cat(N_final_draws, "antithetic draws generated from the original", "\n",
      nDraws, "draws for",
      Nindividuals," individuals expanded using",
      draw_dimensions,"dimensions","\n"  )

  return(normal_anthitetic_scramble_sobol_draws)
}
Thank you for your time!


References
  • Andersen, L. M. (2014). Obtaining reliable likelihood ratio tests from simulated likelihood functions. PloS one, 9(10), e106136.
  • Molloy, J., Becker, F., Schmid, B., & Axhausen, K. W. (2021). mixl: An open-source R package for estimating complex choice models on large datasets. Journal of choice modelling, 39, 100284.

Re: Integrate draws provided by the user into Apollo

Posted: 12 May 2022, 16:01
by stephanehess
Yes, it is possible. See Section 6.1.3 in the manual (towards the end of that section)