Learn Data & AI Skills | 50% off
Get 50% off unlimited learning

pomp (version 3.1)

distributions: Probability distributions

Description

pomp provides a number of probability distributions that have proved useful in modeling partially observed Markov processes. These include the Euler-multinomial family of distributions and the the Gamma white-noise processes.

Usage

reulermultinom(n = 1, size, rate, dt)

deulermultinom(x, size, rate, dt, log = FALSE)

rgammawn(n = 1, sigma, dt)

Arguments

n

integer; number of random variates to generate.

size

scalar integer; number of individuals at risk.

rate

numeric vector of hazard rates.

dt

numeric scalar; duration of Euler step.

x

matrix or vector containing number of individuals that have succumbed to each death process.

log

logical; if TRUE, return logarithm(s) of probabilities.

sigma

numeric scalar; intensity of the Gamma white noise process.

Value

reulermultinom

Returns a length(rate) by n matrix. Each column is a different random draw. Each row contains the numbers of individuals that have succumbed to the corresponding process.

deulermultinom

Returns a vector (of length equal to the number of columns of x) containing the probabilities of observing each column of x given the specified parameters (size, rate, dt).

rgammawn

Returns a vector of length n containing random increments of the integrated Gamma white noise process with intensity sigma.

C API

An interface for C codes using these functions is provided by the package. Visit the package homepage to view the pomp C API document.

Details

If N individuals face constant hazards of death in k ways at rates r1,r2,,rk, then in an interval of duration Δt, the number of individuals remaining alive and dying in each way is multinomially distributed: (Ni=1kΔni,Δn1,,Δnk)Multinomial(N;p0,p1,,pk), where Δni is the number of individuals dying in way i over the interval, the probability of remaining alive is p0=exp(iriΔt), and the probability of dying in way j is pj=rjiri(1exp(iriΔt)). In this case, we say that (Δn1,,Δnk)Eulermultinom(N,r,Δt), where r=(r1,,rk). Draw m random samples from this distribution by doing

    dn <- reulermultinom(n=m,size=N,rate=r,dt=dt),

where r is the vector of rates. Evaluate the probability that x=(x1,,xk) are the numbers of individuals who have died in each of the k ways over the interval Δt=dt, by doing

    deulermultinom(x=x,size=N,rate=r,dt=dt).

Breto & Ionides (2011) discuss how an infinitesimally overdispersed death process can be constructed by compounding a multinomial process with a Gamma white noise process. The Euler approximation of the resulting process can be obtained as follows. Let the increments of the equidispersed process be given by

    reulermultinom(size=N,rate=r,dt=dt).

In this expression, replace the rate r with rΔW/Δt, where ΔWGamma(Δt/σ2,σ2) is the increment of an integrated Gamma white noise process with intensity σ. That is, ΔW has mean Δt and variance σ2Δt. The resulting process is overdispersed and converges (as Δt goes to zero) to a well-defined process. The following lines of code accomplish this:

    dW <- rgammawn(sigma=sigma,dt=dt)

    dn <- reulermultinom(size=N,rate=r,dt=dW)

or

    dn <- reulermultinom(size=N,rate=r*dW/dt,dt=dt).

He et al. (2010) use such overdispersed death processes in modeling measles.

For all of the functions described here, access to the underlying C routines is available: see below.

References

C. and E. L. Ionides. Compound Markov counting processe and their applications to modeling infinitesimally over-dispersed systems. Stochastic Processes and their Applications 121, 2571--2591, 2011.

D. He, E.L. Ionides, & A.A. King. Plug-and-play inference for disease dynamics: measles in large and small populations as a case study. Journal of the Royal Society Interface 7, 271--283, 2010.

See Also

Other information on model implementation: Csnippet, accumulators, covariate_table(), dmeasure_spec, dprocess_spec, parameter_trans(), pomp-package, prior_spec, rinit_spec, rmeasure_spec, rprocess_spec, skeleton_spec, transformations, userdata

Examples

Run this code
# NOT RUN {
print(dn <- reulermultinom(5,size=100,rate=c(a=1,b=2,c=3),dt=0.1))
deulermultinom(x=dn,size=100,rate=c(1,2,3),dt=0.1)
## an Euler-multinomial with overdispersed transitions:
dt <- 0.1
dW <- rgammawn(sigma=0.1,dt=dt)
print(dn <- reulermultinom(5,size=100,rate=c(a=1,b=2,c=3),dt=dW))

# }

Run the code above in your browser using DataLab