Gig’s documentation

Draws from the Generalized Inverse Gaussian distribution

\[f(x) = x^{\lambda - 1} e^{-\frac{1}{2}(\chi/x + \psi x)}\]

where \(\lambda\) is any real number, \(\chi\) must be nonnegative (nonpositive) for positive (negative) \(\lambda\) and \(\psi\) must be be nonnegative (nonpositive) for negative (positive) \(\lambda\).

Install

Download and unpack the latest version. In the unpacked folder, type

mkdir build
cd build
cmake ..
make

It should create the shared and static libraries

libgig.[version].[extension]
libgig_static.[extension]

You can enter

make test

to test it and

make install

to install it.

Usage example

Suppose you have the file

/* example.cpp */
#include "gig/gig.h"

#include <random>
#include <iostream>

int main()
{
  Random random(1);

  double lambda = 2.1;
  double chi = 0.1;
  double psi = 1.0;

  std::cout << random.gig(lambda, chi, psi) << std::endl;
}

Compiling, linking, and running it via

g++ -lgig example.cpp -o example
./example

should print:

1.30869

Interface

class Random

Generalized Inverse Gaussian distribution sampler.

Random::Random(unsigned int seed)

Initialize sampler with a seed.

Parameters:seed – Seed.
Random::Random(std::default_random_engine &generator)

Initialize sampler with a random number generator.

Parameters:generator – Generator.
double Random::gig(double lambda, double chi, double psi)

Draw sample from GIG distribution.

Parameters:
  • double lambda – shape parameter.
  • double chi – shape and scale parameter.
  • double psi – shape and scale parameter.
Returns:

sample.

Disclaimer

This library is simply a wrapper around Josef Leydold and Wolfgang Hormann’s implementation of a GIG sampler found in the GIGrvg package.