Learn R Programming

BayesLogit (version 0.6.1)

rpg: Polya-Gamma Random Variates

Description

Generate random variates from the Polya-Gamma distribution.

Usage

rpg(num=1, h=1, z=0.0)

rpg.gamma(num=1, h=1, z=0.0, trunc=200)

rpg.devroye(num=1, n=1, z=0.0)

rpg.alt(num=1, h=1, z=0.0)

rpg.sp(num=1, h=1, z=0.0, track.iter=FALSE)

Arguments

num

The number of random variates to simulate.

n

Shape parameter, a positive integer.

h

Shape parameter. h must be >= 1 if not using sum of gammas method.

z

Parameter associated with tilting.

trunc

The number of elements used in sum of gammas approximation.

track.iter

The number of proposals made before accepting.

Value

This function returns num Polya-Gamma samples.

Details

A random variable X with distribution PG(n,z) is distributed like

$$ X \sim \sum_{k=1}^\infty G(n,1) / ( 2 \pi^2 (k-1/2)^2 + z^2/2). $$

The density for X may be derived by exponentially tilting the PG(n,0) density:

$$ p(x|n,z) \propto \exp(-x z^2/2) p(x|n,0).$$

Several different methods for generating this random variable are implemented. The parameters supplied by the user automatically determine which method is used. One may manually call each routine using rpg.METHOD.

You may call rpg when n and z are vectors.

References

Nicholas G. Polson, James G. Scott, and Jesse Windle. Bayesian inference for logistic models using Polya-Gamma latent variables. http://arxiv.org/abs/1205.0310

See Also

logit.EM, logit, mlogit

Examples

Run this code
# NOT RUN {
h = c(1, 2, 3);
z = c(4, 5, 6);

## Devroye-like method -- only use if h contains integers, preferably small integers.
X = rpg.devroye(100, h, z);

h = c(1.2, 2.3, 3.2);
z = c(4, 5, 6);

## Sum of gammas method -- this is slow.
X = rpg.gamma(100, h, z);

h = c(1, 4, 2.3);
z = c(4, 5, 6);

## Hybrid method -- automatically chooses best procedure.
X = rpg(100, h, z);

# }

Run the code above in your browser using DataLab