R/model-wrapper.R

## Nothing to export

## I am not sure if this is a good idea after all...

`inla.model.wrapper` = function(
        covariates = NULL,
        model = c("joint"),
        data = NULL,
        Q = NULL,
        precision = 1.0E8,
        hyper = NULL,
        initial = NULL,
        prior = NULL,
        param = NULL,
        fixed = NULL,
        ...)
{
    model = match.arg(model, several.ok = FALSE)

    if (inla.one.of(model,  "joint")) {

        res = list()
        res$model = "generic0"

        if (is.character(covariates)) {
            if (is.null(data)) {
                covariates = eval.parent(parse(text=covariates))
            } else {
                covariates = eval(parse(text=covariates), data)
            }
        }
        covariates = as.matrix(covariates)
        n = dim(covariates)[1]
        nb = dim(covariates)[2]
        N = n+nb

        if (is.null(Q) || any(dim(Q) != nb)) {
            stop("Matrix Q is either null or has wrong dimension")
        }

        QQ = sparseMatrix(i=1:n, j=1:n, x=rep(precision, n), dims = c(N, N))
        for(i in 1:n) {
            cov.row = -precision * covariates[i, 1:nb, drop=FALSE]
            QQ[(n+1):N, i] = cov.row
            QQ[i, (n+1):N] = t(cov.row)
        }
        QQ[(n+1):N, (n+1):N] = precision * t(covariates) %*% covariates + Q

        hyper = inla.set.hyper(model, "wrapper", hyper, 
                initial, fixed, prior, param)         

        ret = list(f = list(Cmatrix = QQ, hyper.default = hyper,
                           model = "generic", n = N,  values = 1:N, rankdef = n))
        class(ret) = "inla.wrapper.model"
        
        return (ret)
    } else {
        stop("This should not happen.")
    }
}
andrewzm/INLA documentation built on May 10, 2019, 11:12 a.m.