Title: | The Metropolis Algorithm |
Version: | 0.1.8 |
Date: | 2020-09-21 |
Author: | Alexander Keil [aut, cre] |
Maintainer: | Alexander Keil <akeil@unc.edu> |
Description: | Learning and using the Metropolis algorithm for Bayesian fitting of a generalized linear model. The package vignette includes examples of hand-coding a logistic model using several variants of the Metropolis algorithm. The package also contains R functions for simulating posterior distributions of Bayesian generalized linear model parameters using guided, adaptive, guided-adaptive and random walk Metropolis algorithms. The random walk Metropolis algorithm was originally described in Metropolis et al (1953); <doi:10.1063/1.1699114>. |
License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
Depends: | coda, R (≥ 3.5.0) |
Imports: | stats |
Suggests: | knitr, markdown |
VignetteBuilder: | knitr |
Encoding: | UTF-8 |
Language: | en-US |
LazyData: | true |
RoxygenNote: | 7.1.0 |
NeedsCompilation: | no |
Packaged: | 2020-09-21 20:23:34 UTC; akeil |
Repository: | CRAN |
Date/Publication: | 2020-09-21 21:20:07 UTC |
Convert glm_metropolis output to mcmc
object from package coda
Description
Allows use of useful functions from coda
package
Usage
## S3 method for class 'metropolis.samples'
as.mcmc(x, ...)
Arguments
x |
an object from the function "metropolis" |
... |
not used |
Details
TBA
Value
An object of type "mcmc" from the coda package
Examples
## Not run:
library("coda")
dat = data.frame(y = rbinom(100, 1, 0.5), x1=runif(100), x2 = runif(100))
res = metropolis_glm(y ~ x1 + x2, data=dat, family=binomial(), iter=10000, burnin=3000,
adapt=TRUE, guided=TRUE, block=FALSE)
res2 = as.mcmc(res)
summary(res2)
## End(Not run)
Inverse logit transform
Description
Inverse logit transform
Usage
expit(mu)
Arguments
mu |
log-odds |
Value
returns a scalar or vector the same length as mu with values that are the inverse logit transform of mu
Examples
logodds = rnorm(10)
expit(logodds)
logodds = log(1.0)
expit(logodds)
logistic log likelihood
Description
logistic log likelihood
Usage
logistic_ll(y, X, par)
Arguments
y |
binary outcome |
X |
design matrix |
par |
vector of model coefficients |
Value
a scalar quantity proportional to a binomial likelihood with logistic parameterization, given y,X,and par
A case control study of childhood leukemia and magnetic fields from Savitz, Wachtel, Barnes, et al (1998) doi: 10.1093/oxfordjournals.aje.a114943.
Description
A case control study of childhood leukemia and magnetic fields from Savitz, Wachtel, Barnes, et al (1998) doi: 10.1093/oxfordjournals.aje.a114943.
Usage
magfields
Format
A data frame with 234 rows and 2 variables:
- y
childhood leukemia
- x
exposure to magnetic field
metropolis.control
Description
metropolis.control
Usage
metropolis.control(
adapt.start = 25,
adapt.window = 200,
adapt.update = 25,
min.sigma = 0.001,
prop.sigma.start = 1,
scale = 2.4
)
Arguments
adapt.start |
start adapting after this many iterations; set to iter+1 to turn off adaptation |
adapt.window |
base acceptance rate on maximum of this many iterations |
adapt.update |
frequency of adaptation |
min.sigma |
minimum of the proposal distribution standard deviation (if set to zero, posterior may get stuck) |
prop.sigma.start |
starting value, or fixed value for proposal distribution s standard deviation |
scale |
scale value for adaptation (how much should the posterior variance estimate be scaled by?). Scale/sqrt(p) is used in metropolis_glm function, and Gelman et al. (2014, ISBN: 9781584883883) recommend a scale of 2.4 @return A list of parameters used in fitting with the following named objects adapt.start, adapt.window,adapt.update,min.sigma,prop.sigma.start,scale |
Use the Metropolis Hastings algorithm to estimate Bayesian glm parameters
Description
This function carries out the Metropolis algorithm.
Usage
metropolis_glm(
f,
data,
family = binomial(),
iter = 100,
burnin = round(iter/2),
pm = NULL,
pv = NULL,
chain = 1,
prop.sigma.start = 0.1,
inits = NULL,
adaptive = TRUE,
guided = FALSE,
block = TRUE,
saveproposal = FALSE,
control = metropolis.control()
)
Arguments
f |
an R style formula (e.g. y ~ x1 + x2) |
data |
an R data frame containing the variables in f |
family |
R glm style family that determines model form: gaussian() or binomial() |
iter |
number of iterations after burnin to keep |
burnin |
number of iterations at the beginning to throw out (also used for adaptive phase) |
pm |
vector of prior means for normal prior on log(scale) (if applicable) and regression coefficients (set to NULL to use uniform priors) |
pv |
vector of prior variances for normal prior on log(scale) (if applicable) and regression coefficients (set to NULL to use uniform priors) |
chain |
chain id (plan to deprecate) |
prop.sigma.start |
proposal distribution standard deviation (starting point if adapt=TRUE) |
inits |
NULL, a vector with length equal to number of parameters (intercept + x + scale ;gaussian() family only model only), or "glm" to set priors based on an MLE fit |
adaptive |
logical, should proposal distribution be adaptive? (TRUE usually gives better answers) |
guided |
logical, should the "guided" algorithm be used (TRUE usually gives better answers) |
block |
logical or a vector that sums to total number of parameters (e.g. if there are 4
random variables in the model, including intercept, then block=c(1,3) will update the
intercept separately from the other three parameters.) If TRUE, then updates each parameter
1 by 1. Using |
saveproposal |
(logical, default=FALSE) save the rejected proposals (block=TRUE only)? |
control |
parameters that control fitting algorithm. See metropolis.control() |
Details
Implements the Metropolis algorithm, which allows user specified proposal distributions or implements an adaptive algorithm as described by Gelman et al. (2014, ISBN: 9781584883883). This function also allows the "Guided" Metropolis algorithm of Gustafson (1998) doi: 10.1023/A:1008880707168. Note that by default all parameters are estimated simulataneously via "block" sampling, but this default behavior can be changed with the "block" parameter. When using guided=TRUE, block should be set to FALSE.
Value
An object of type "metropolis.samples" which is a named list containing posterior MCMC samples as well as some fitting information.
Examples
dat = data.frame(y = rbinom(100, 1, 0.5), x1=runif(100), x2 = runif(100))
res = metropolis_glm(y ~ x1 + x2, data=dat, family=binomial(), iter=1000, burnin=3000,
adapt=TRUE, guided=TRUE, block=FALSE)
res
summary(res)
apply(res$parms, 2, mean)
glm(y ~ x1 + x2, family=binomial(), data=dat)
dat = data.frame(y = rnorm(100, 1, 0.5), x1=runif(100), x2 = runif(100), x3 = rpois(100, .2))
res = metropolis_glm(y ~ x1 + x2 + factor(x3), data=dat, family=gaussian(), inits="glm",
iter=10000, burnin=3000, adapt=TRUE, guide=TRUE, block=FALSE)
apply(res$parms, 2, mean)
glm(y ~ x1 + x2+ factor(x3), family=gaussian(), data=dat)
Gaussian log likelihood
Description
Gaussian log likelihood
Usage
normal_ll(y, X, par)
Arguments
y |
binary outcome |
X |
design matrix |
par |
vector of gaussian scale parameter followed by model coefficients |
Value
a scalar quantity proportional to a normal likelihood with linear parameterization, given y, X, and par
Plot the output from the metropolis function
Description
This function allows you to summarize output from the metropolis function.
Usage
## S3 method for class 'metropolis.samples'
plot(x, keepburn = FALSE, parms = NULL, ...)
Arguments
x |
the outputted object from the "metropolis_glm" function |
keepburn |
keep the burnin iterations in calculations (if adapt=TRUE, keepburn=TRUE |
parms |
names of parameters to plot (plots the first by default, if TRUE, plots all) |
... |
other arguments to plot |
Details
TBA
Value
None
Examples
dat = data.frame(y = rbinom(100, 1, 0.5), x1=runif(100), x2 = runif(100))
res = metropolis_glm(y ~ x1 + x2, data=dat, family=binomial(), iter=10000, burnin=3000,
adapt=TRUE, guided=TRUE, block=FALSE)
plot(res)
Print a metropolis.samples object
Description
This function allows you to summarize output from the "metropolis_glm" function.
Usage
## S3 method for class 'metropolis.samples'
print(x, ...)
Arguments
x |
a "metropolis.samples" object from the function "metropolis_glm" |
... |
not used. |
Details
None
Value
An unmodified "metropolis.samples" object (invisibly)
Summarize a probability distribution from a Markov Chain
Description
This function allows you to summarize output from the metropolis function.
Usage
## S3 method for class 'metropolis.samples'
summary(object, keepburn = FALSE, ...)
Arguments
object |
an object from the function "metropolis" |
keepburn |
keep the burnin iterations in calculations (if adapt=TRUE, keepburn=TRUE will yield potentially invalid summaries) |
... |
not used |
Details
TBA
Value
returns a list with the following fields: nsamples: number of simulated samples sd: standard deviation of parameter distributions se: standard deviation of parameter distribution means ESS_parms: effective sample size of parameter distribution means postmean: posterior means and normal based 95% credible intervals postmedian: posterior medians and percentile based 95% credible intervals postmode: posterior modes and highest posterior density based 95% credible intervals
Examples
dat = data.frame(y = rbinom(100, 1, 0.5), x1=runif(100), x2 = runif(100))
res = metropolis_glm(y ~ x1 + x2, data=dat, family=binomial(), iter=10000, burnin=3000,
adapt=TRUE, guided=TRUE, block=FALSE)
summary(res)