Skip to content

On-the-fly custom distribution registration: scoping of r-function #1545

@danielturek

Description

@danielturek

Briefly: when using a custom-defined distribution, and making use of the automatic registration (at the time of model building) of the distribution, the automatic registration process will (very conveniently) create a placeholder random generation function (r-function) for you, if one doesn't exist.

However, when this process takes place stemming from nimbleMCMC, the creation of the r-function goes somewhere, but not somewhere that the ensuing compilation cannot locate it.

@paciorek Since I believe you authored the "automatic generation of the r-function" code, would you mind taking a look of the scoping for where this function is created? The relevant code is essentially lines 505-507 of distributions_processInputList.R

Reproducible example below:

library(nimble)

dNorm <- nimbleFunction(
    run = function(x = double(), mean = double(), sd = double(), Mean = double(), SD = double(), log=integer(0, default = 0)) {
        ####y <- Rrnorm(mean=Mean,sd=SD)
        y <- rnorm(1, Mean, SD)
        ####pdf <- Rdnorm(y,mean=mean,sd=sd,log=log)
        lp <- dnorm(y, mean, sd, log = 1)
        returnType(double(0))
        return(lp)
    })

code <- nimbleCode({
    for(i in 1:n) {
        x[i] ~ dNorm(mean=mu, sd=sigma, Mean=Mu, SD=Sigma)
    }
    # priors
    mu ~ dunif(-10, 10)    ## dunif(-10*Mu, 10*Mu)
    sigma ~ dunif(0, 10*Sigma)
})

Mu <- 0
Sigma <- 1
n <- 10
x <- rep(0,n)

constants <- list(n=n, Mu=Mu, Sigma=Sigma)
data <- list(x=x)
inits <- list(mu=Mu, sigma=Sigma)

mcmc.out <- nimbleMCMC(code=code,   ## ERROR
                       constants=constants,
                       data=data,
                       inits=inits,
                       niter=1000,
                       summary=TRUE,
                       monitors=c("mu","sigma"))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions