Learn R Programming

nullcat

nullcat provides null model algorithms for categorical and quantitative community ecology data. It extends classic binary null models (e.g., curveball, swap) to work with categorical data, and introduces a stratified randomization framework for continuous data that addresses limitations in existing methods for randomizing quantitative and count data.

Installation

# Install stable version from CRAN:
install.packages("nullcat")

# Or dev version from GitHub:
# install.packages("remotes")
remotes::install_github("matthewkling/nullcat")

Quick start

Categorical null models

Generalize binary null models to matrices where cells contain integers representing discrete categories:

library(nullcat)

# Create a categorical matrix
set.seed(123)
cat_matrix <- matrix(sample(1:4, 20*10, replace = TRUE), nrow = 20)

# Randomize using curvecat (preserves row & column category multisets)
randomized <- curvecat(cat_matrix, n_iter = 1000)

# Verify margins are preserved
all.equal(sort(cat_matrix[1,]), sort(randomized[1,]))
#> [1] TRUE
all.equal(sort(cat_matrix[,1]), sort(randomized[,1]))
#> [1] TRUE

Available algorithms: curvecat(), swapcat(), tswapcat(), r0cat(), c0cat()

Quantitative null models

Apply stratified randomization to continuous community data:

# Create a quantitative community matrix
set.seed(456)
comm <- matrix(rexp(50 * 30, rate = 0.5), nrow = 50)

# Stratified randomization with 5 strata
rand1 <- quantize(comm, n_strata = 5, n_iter = 2000)

# Preserve row value multisets (row sums maintained)
rand2 <- quantize(comm, n_strata = 5, fixed = "row", n_iter = 2000)
all.equal(rowSums(comm), rowSums(rand2))
#> [1] TRUE

Learn more

See vignette("nullcat") for comprehensive documentation including:

  • Categorical null model algorithms and their constraints
  • Quantitative null model workflow and stratification options
  • Convergence diagnostics and burn-in estimation
  • Efficient batch generation of null distributions
  • Integration with the vegan package

Package website: https://matthewkling.github.io/nullcat/

Report issues: https://github.com/matthewkling/nullcat/issues

Copy Link

Version

Install

install.packages('nullcat')

Version

0.1.0

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Matthew Kling

Last Published

December 18th, 2025

Functions in nullcat (0.1.0)

trace_cat

Trace diagnostics for categorical randomizations
nullcat_methods

Supported nullcat methods
r0cat

Row-constrained categorical randomization (r0cat)
tswapcat

Trial-swap categorical randomization (tswapcat)
stratify

Bin quantitative data into strata
quantize

Stratified randomization of a quantitative community matrix
quantize_commsim_seq

Quantile-based quantize commsim (sequential / Markov chain)
quantize_prep

Prepare stratified null model overhead for quantize()
swapcat

Categorical swap randomization (swapcat)
suggest_n_iter

Suggest a reasonable n_iter for a randomization
quantize_batch

Generate a batch of null matrices using quantize()
nullcat_commsim

Nullcat-based commsim (non-sequential)
c0cat

Column-constrained categorical randomization (c0cat)
quantize_commsim

Quantize-based commsim (non-sequential)
curvecat

Categorical curveball randomization (curvecat)
nullcat

Categorical matrix randomization
nullcat_commsim_seq

Nullcat-based commsim (sequential / Markov chain)
nullcat_batch

Generate a batch of null matrices using nullcat()