# dpldis: Discrete power-law distribution In csgillespie/poweRlaw: Analysis of Heavy Tailed Distributions

## Description

Density, distribution function and random number generation for the discrete power law distribution with parameters xmin and alpha.

## Usage

 ```1 2 3 4 5``` ```dpldis(x, xmin, alpha, log = FALSE) ppldis(q, xmin, alpha, lower.tail = TRUE) rpldis(n, xmin, alpha, discrete_max = 10000) ```

## Arguments

 `x, q` vector of quantiles. The discrete power-law distribution is defined for x > xmin. `xmin` The lower bound of the power-law distribution. For the continuous power-law, xmin >= 0. for the discrete distribution, xmin > 0. `alpha` The scaling parameter: alpha > 1. `log` logical (default FALSE) if TRUE, log values are returned. `lower.tail` logical; if TRUE (default), probabilities are P[X ≤ x], otherwise, P[X > x]. `n` Number of observations. If `length(n) > 1`, the length is taken to be the number required. `discrete_max` The value when we switch from the discrete random numbers to a CTN approximation.

## Details

The Clauset, 2009 paper provides an algorithm for generating discrete random numbers. However, if this algorithm is implemented in R, it gives terrible performance. This is because the algorithm involves "growing vectors". Another problem is when alpha is close to 1, this can result in very large random number being generated (which means we need to calculate the discrete CDF for very large values).

The algorithm provided in this package generates true discrete random numbers up to 10,000 then switches to using continuous random numbers. This switching point can altered by changing the `discrete_max` argument.

In order to get a efficient power-law discrete random number generator, the algorithm needs to be implemented in C.

## Value

dpldis returns the density, ppldis returns the distribution function and rpldis return random numbers.

## Note

The naming of these functions mirrors standard R functions, i.e. dnorm. When alpha is close to one, generating random number can be very slow.

## References

Clauset, Aaron, Cosma Rohilla Shalizi, and Mark EJ Newman. "Power-law distributions in empirical data." SIAM review 51.4 (2009): 661-703.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17``` ```xmin = 1; alpha = 2 x = xmin:100 plot(x, dpldis(x, xmin, alpha), type="l") plot(x, ppldis(x, xmin, alpha), type="l", main="Distribution function") dpldis(1, xmin, alpha) ############################################### ## Random number generation # ############################################### n = 1e5 x1 = rpldis(n, xmin, alpha) ## Compare with exact (dpldis(1, xmin, alpha)) sum(x1==1)/n ## Using only the approximation x2 = rpldis(n, xmin, alpha, 0) sum(x2==1)/n ```

csgillespie/poweRlaw documentation built on April 8, 2018, 5:38 p.m.