Generate correlated count random variables with individual parameters for each cluster

Share:

Description

'rcounts.reg' is used to sample high-dimensional correlated count random variables with approximate prespecified Pearson correlation and exact margins.

Usage

1
2
3
rcounts.reg(N, margins, mu, phi=matrix(NA,N,length(margins)), 
            omega=matrix(NA,N,length(margins)), 
            psi=matrix(NA,N,length(margins)), corstr, corpar, conv=0.01)

Arguments

N

number of observations to be generated per margin (should be at least 500).

margins

Vector of margin tokens. Its length T is the dimension. See details.

mu

Matrix of dimension N x T of means for the Poisson, GP, ZIP, ZIGP and NB margins.

phi

Matrix of dimension N x T of dispersion parameters for the GP, and ZIGP margins. For Poisson, ZIP and NB margins, an 'NA' can be provided.

omega

Matrix of dimension N x T of zero-inflation parameters for the ZIP and ZIGP margins. For Poisson, GP and NB margins, an 'NA' can be provided.

psi

Matrix of dimension N x T of size parameters for the NB margins. For Poisson, GP, ZIP and ZIGP margins, an 'NA' can be provided.

corstr

Correlation structure. Can be 'ex' for exchangeable, 'AR1' for AR(1) and 'unstr' for unstructured.

corpar

Correlation parameter. Scalar correlation for 'ex' and 'AR1' and matrix of dimension TxT for 'unstr'.

conv

Convergence criterion

Details

The entries in 'margins' can be specified as 'Poi' for Poisson, 'GP' for generalized Poisson, 'ZIP' for zero-inflated Poisson, 'ZIGP' for zero-inflated generalized Poisson and 'NB' for negative-binomial.

NOTE: there is a tradeoff between too small N (decreasing accuracy of the resulting correlation) and too high N (dramatically increasing computation time).

Value

The function will return a matrix of counts of dimension N x T.

Author(s)

Vinzenz Erhardt

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
N <- 500

# bivariate example
margins <- c("ZIGP","GP")
mu <-    matrix(runif(N*2,10,20),N,2)
phi <-   matrix(runif(N*2,1,3),N,2)
omega <- matrix(c(runif(N,0,.3),rep(NA,N)),N,2)
corstr <- "ex"
corpar <- .5
Y <- rcounts.reg(N=N, margins=margins, mu=mu, phi=phi, omega=omega, 
                 corstr=corstr, corpar=corpar)
cor(Y)