Skip to content

An extention to the bayes_R2 function #128

Description

@jalilian

Hi,

This work shows that we can extend the use of the Bayesian R-square in the bayes_R2 function to a wider range of models. I've suggested some changes to the bayes_R2 function, which you can find below and in the attached file. It is not an issue, but I wanted to know whether to create an issue or submit a direct pull request.
BayesRsquared.pdf

Thank you for considering this.

Best regards,
Abdollah

bayes_R2_new <- function(fit)
{
  fam <- family(fit) # family dist. of the response
  eta <- posterior_linpred(fit) # linear predictor: eta
  mu <- fam$linkinv(eta) # conditional mean
  varfit <- apply(mu, 1, var)
  varres <- switch(fam$family, gaussian={
     as.matrix(fit, pars="sigma")^2
  }, binomial={
    v <- fam$variance(mu)
    apply(v, 1, mean)
  }, poisson={
    v <- fam$variance(mu)
    apply(v, 1, mean)
  }, Gamma={
    v <- fam$variance(mu)
    apply(v, 1, mean) / as.matrix(fit, pars="shape")
  }, beta={
    v <- fam$variance(mu)
    apply(v, 1, mean)
  }, neg_binomial_2={
    size <- as.matrix(fit, pars="reciprocal_dispersion")
    v <- fam$variance(mu, theta=c(size))
    apply(v, 1, mean)
  }, inverse.gaussian={
    v <- family(fit)$variance(mu)
    apply(v, 1, mean) / as.matrix(fit, pars="lambda")
  }, stop("the speciefied family is not implemented"))
  R2 <- varfit / (varres + varfit) # Bayesian R-squared
  attributes(R2) <- list(varfit=varfit, varres=varres)
  return(R2)
}

BayesRsquared.pdf

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