Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

rnegbinRw

MCMC Algorithm for Negative Binomial Regression


Description

rnegbinRw implements a Random Walk Metropolis Algorithm for the Negative Binomial (NBD) regression model where β|α and α|β are drawn with two different random walks.

Usage

rnegbinRw(Data, Prior, Mcmc)

Arguments

Data

list(y, X)

Prior

list(betabar, A, a, b)

Mcmc

list(R, keep, nprint, s_beta, s_alpha, beta0, alpha)

Details

Model and Priors

y ~ NBD(mean=λ, over-dispersion=alpha)
λ = exp(x'β)

β ~ N(betabar, A^{-1})
alpha ~ Gamma(a, b) (unless Mcmc$alpha specified)
Note: prior mean of alpha = a/b, variance = a/(b^2)

Argument Details

Data = list(y, X)

y: n x 1 vector of counts (0,1,2,…)
X: n x k design matrix

Prior = list(betabar, A, a, b) [optional]

betabar: k x 1 prior mean (def: 0)
A: k x k PDS prior precision matrix (def: 0.01*I)
a: Gamma prior parameter (not used if Mcmc$alpha specified) (def: 0.5)
b: Gamma prior parameter (not used if Mcmc$alpha specified) (def: 0.1)

Mcmc = list(R, keep, nprint, s_beta, s_alpha, beta0, alpha) [only R required]

R: number of MCMC draws
keep: MCMC thinning parameter -- keep every keepth draw (def: 1)
nprint: print the estimated time remaining for every nprint'th draw (def: 100, set to 0 for no print)
s_beta: scaling for beta | alpha RW inc cov matrix (def: 2.93/sqrt(k))
s_alpha: scaling for alpha | beta RW inc cov matrix (def: 2.93)
alpha: over-dispersion parameter (def: alpha ~ Gamma(a,b))

Value

A list containing:

betadraw

R/keep x k matrix of beta draws

alphadraw

R/keep x 1 vector of alpha draws

llike

R/keep x 1 vector of log-likelihood values evaluated at each draw

acceptrbeta

acceptance rate of the beta draws

acceptralpha

acceptance rate of the alpha draws

Note

The NBD regression encompasses Poisson regression in the sense that as alpha goes to infinity the NBD distribution tends toward the Poisson. For "small" values of alpha, the dependent variable can be extremely variable so that a large number of observations may be required to obtain precise inferences.

Author(s)

Sridhar Narayanan (Stanford GSB) and Peter Rossi (Anderson School, UCLA), perossichi@gmail.com.

References

For further discussion, see Bayesian Statistics and Marketing by Rossi, Allenby, McCulloch.
http://www.perossi.org/home/bsm-1

See Also

Examples

if(nchar(Sys.getenv("LONG_TEST")) != 0)  {R=1000} else {R=10}
set.seed(66)

simnegbin = function(X, beta, alpha) {
  # Simulate from the Negative Binomial Regression
  lambda = exp(X%*%beta)
  y = NULL
  for (j in 1:length(lambda)) { y = c(y, rnbinom(1, mu=lambda[j], size=alpha)) }
  return(y)
}

nobs = 500
nvar = 2 # Number of X variables
alpha = 5
Vbeta = diag(nvar)*0.01

# Construct the regdata (containing X)
simnegbindata = NULL
beta = c(0.6, 0.2)
X = cbind(rep(1,nobs), rnorm(nobs,mean=2,sd=0.5))
simnegbindata = list(y=simnegbin(X,beta,alpha), X=X, beta=beta)

Data1 = simnegbindata
Mcmc1 = list(R=R)

out = rnegbinRw(Data=Data1, Mcmc=list(R=R))

cat("Summary of alpha/beta draw", fill=TRUE)
summary(out$alphadraw, tvalues=alpha)
summary(out$betadraw, tvalues=beta)

## plotting examples
if(0){plot(out$betadraw)}

bayesm

Bayesian Inference for Marketing/Micro-Econometrics

v3.1-4
GPL (>= 2)
Authors
Peter Rossi <perossichi@gmail.com>
Initial release
2019-10-14

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.