| 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)