calc.logLik.lv0 {boral} R Documentation

Log-likelihood for a model fitted with no latent variables

Description

Calculates the log-likelihood for a set of parameter estimates from a model with no latent variables. If the row effects are assumed to be random, they are integrated over using Monte Carlo integration. WARNING: As of version 1.9, this function is no longer being maintained (and probably does not work properly, if at all)!

Usage

calc.logLik.lv0(y, X = NULL, family, trial.size = 1, lv.coefs,
X.coefs = NULL, row.eff = "none", row.params = NULL,
row.ids = NULL, offset = NULL, cutoffs = NULL,
powerparam = NULL)

Details

For an n x p response matrix \bm{y}, the log-likelihood for a model with no latent variables included is given by,

\log(f) = \sum_{i=1}^n \sum_{j=1}^p \log \{f(y_{ij} | \beta_{0j}, \alpha_i, \ldots)\},

where f(y_{ij}|\cdot) is the assumed distribution for column j, \beta_{0j} is the response-specific intercepts, \alpha_i is the row effect, and \ldots generically denotes anything else included in the model, e.g. row effects, dispersion parameters etc...

Please note the function is written conditional on all regression coefficients. Therefore, if traits are included in the model, in which case the regression coefficients \beta_{0j}, \bm{\beta}_j become random effects instead (please see about.traits), then the calculation of the log-likelihood does NOT take this into account, i.e. does not marginalize over them!

Likewise if more than two columns are ordinal responses, then the regression coefficients \beta_{0j} corresponding to these columns become random effects, and the calculation of the log-likelihood also does NOT take this into account, i.e. does not marginalize over them!

When a single \alpha_i random row effect is inclued, then the log-likelihood is calculated by integrating over this,

\log(f) = \sum_{i=1}^n \log ( \int \prod_{j=1}^p \{f(y_{ij} | \beta_{0j}, \alpha_i, \ldots)\}f(\alpha_i) d\alpha_i ),

where f(\alpha_i) is the random effects distribution with mean zero and standard deviation given by the row.params. The integration is performed using standard Monte Carlo integration. This naturally extends to multiple random row effects structures.

Value

A list with the following components:

 logLik Value of the log-likelihood logLik.comp A vector of the log-likelihood values for each row of the response matrix, such that sum(logLik.comp) = logLik.

Author(s)

Francis K.C. Hui [aut, cre], Wade Blanchard [aut]

Maintainer: Francis K.C. Hui <fhui28@gmail.com>

calc.marglogLik for calculation of the log-likelihood marginalizing over one or more latent variables, and calc.condlogLik for calculation of the conditional log-likelihood for models where everything is treated as "fixed effects", including latent variables, row effects, and so on.

Examples

## Not run:
## NOTE: The values below MUST NOT be used in a real application;
## they are only used here to make the examples run quick!!!
example_mcmc_control <- list(n.burnin = 10, n.iteration = 100,
n.thin = 1)

testpath <- file.path(tempdir(), "jagsboralmodel.txt")

library(mvabund) ## Load a dataset from the mvabund package
data(spider)
y <- spider$abun n <- nrow(y) p <- ncol(y) ## Example 1 - NULL model with site effects only spiderfit_nb <- boral(y, family = "negative.binomial", row.eff = "fixed", save.model = TRUE, mcmc.control = example_mcmc_control, model.name = testpath) ## Extract all MCMC samples fit_mcmc <- get.mcmcsamples(spiderfit_nb) mcmc_names <- colnames(fit_mcmc) ## Find the posterior medians coef_mat <- matrix(apply(fit_mcmc[,grep("lv.coefs",mcmc_names)], 2,median),nrow=p) site_coef <- list(ID1 = apply(fit_mcmc[,grep("row.coefs.ID1", mcmc_names)], 2,median)) ## Calculate the log-likelihood at the posterior median calc.logLik.lv0(y, family = "negative.binomial", lv.coefs = coef_mat, row.eff = "fixed", row.params = site_coef) ## Example 2 - Model with environmental covariates and random row effects X <- scale(spider$x)
spiderfit_nb2 <- boral(y, X = X, family = "negative.binomial", row.eff = "random",
save.model = TRUE, mcmc.control = example_mcmc_control,
model.name = testpath)

## Extract all MCMC samples
fit_mcmc <- get.mcmcsamples(spiderfit_nb2)
mcmc_names <- colnames(fit_mcmc)

## Find the posterior medians
coef_mat <- matrix(apply(fit_mcmc[,grep("lv.coefs",mcmc_names)],
2,median),nrow=p)
X_coef_mat <- matrix(apply(fit_mcmc[,grep("X.coefs",mcmc_names)],
2,median),nrow=p)
site.sigma <- list(ID1 =
median(fit_mcmc[,grep("row.sigma.ID1", mcmc_names)]))

## Calculate the log-likelihood at the posterior median
calc.logLik.lv0(y, X = spider\$x, family = "negative.binomial",
row.eff = "random",lv.coefs =  coef_mat, X.coefs = X_coef_mat,
row.params = site.sigma)

## End(Not run)

[Package boral version 2.0.2 Index]