The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Package {scmix}


Type: Package
Title: Bayesian Model-Based Clustering with Sparse Conditional Mixture Models
Version: 0.1.1
Description: Fits Bayesian sparse conditional (Gaussian) mixture models for model-based clustering. Each mixture component factorizes into a chain of univariate polynomial regressions with per-component, per-equation Bayesian variable selection under a centered Zellner g-prior; the number of clusters is selected within a single run via an overfitted sparse mixture (Dirichlet concentration 1/K). The blocked Gibbs sampler draws the selection sets exactly by enumeration (or by validated single-flip Metropolis-Hastings in higher dimension), is provably well-posed under a documented proper fallback prior, and reports a label-invariant consensus partition (Dahl's least-squares criterion). Companion package to Dong, Liao, and Lee (2026), "Replacing three nested searches with one sweep: a Bayesian treatment of sparse conditional mixture clustering". Multiple-imputation functionality for the same engine is also exposed.
License: GPL (≥ 3)
Encoding: UTF-8
Depends: R (≥ 4.1)
Imports: graphics, stats
Suggests: knitr, mclust, rmarkdown, testthat (≥ 3.0.0)
Config/testthat/edition: 3
VignetteBuilder: knitr
Config/roxygen2/version: 8.1.0
NeedsCompilation: no
Packaged: 2026-08-15 17:13:34 UTC; july
Author: Aqi Dong [aut, cre], Yang-Li Liao [aut], Danhyang Lee [aut]
Maintainer: Aqi Dong <donga2@erau.edu>
Repository: CRAN
Date/Publication: 2026-08-20 14:30:02 UTC

scmix: Bayesian sparse conditional mixture clustering

Description

See scmix for the main entry point, scmix_impute for multiple imputation, and scmix_engine for the low-level sampler.

Author(s)

Maintainer: Aqi Dong donga2@erau.edu

Authors:


Rubin's rules pooling

Description

Pools estimates and variances across completed data sets from scmix_impute.

Usage

rubin_pool_scmix(completed, est_fun, var_fun)

Arguments

completed

list of completed data matrices.

est_fun, var_fun

functions mapping a completed matrix to a named numeric vector of estimates and matching variances.

Value

List with pooled estimates, total variance, standard errors, degrees of freedom, and 95 percent interval endpoints.

Examples

Y <- scmix_sim_mw3(n = 120, seed = 7)$Y
set.seed(7)
Y[sample(length(Y), 30)] <- NA
imp <- scmix_impute(Y, M = 2, K = 4, n_iter = 300, burn = 100, seed = 8)
pool <- rubin_pool_scmix(imp$completed, colMeans,
                         function(d) apply(d, 2, stats::var) / nrow(d))
pool$est
pool$se

Bayesian sparse conditional mixture clustering

Description

Fits the Bayesian sparse conditional mixture model of Dong, Liao, and Lee to a numeric data matrix and returns a clustering. Each mixture component factorizes into a chain of univariate polynomial regressions (degree m) with per-component, per-equation Bayesian variable selection under a centered Zellner g-prior; the number of clusters is selected within the run by an overfitted sparse mixture (Dirichlet concentration a = 1/K). A single run returns the estimated number of clusters, a label-invariant consensus partition, selection probabilities for every term of every within-component regression, and coefficient summaries.

Usage

scmix(
  Y,
  K = 7L,
  m = 2L,
  n_iter = 1500L,
  burn = 600L,
  order = NULL,
  a = 1/K,
  g = NULL,
  enum_max = 12L,
  seed = NULL,
  verbose = 0L,
  ...
)

Arguments

Y

numeric matrix (n x p); rows are observations. Must be complete for m >= 2.

K

integer, overfitted cap on the number of components (the number of occupied components is estimated; K only needs to exceed the plausible truth). Default 7.

m

integer polynomial degree of the conditional means (2 = quadratic, the recommended default; 1 = linear).

n_iter, burn

total and burn-in Gibbs sweeps.

order

optional integer permutation of 1:p giving the conditioning order. Defaults to the column order of Y. For m >= 2, results depend on the order (see the paper's order-sensitivity study); an inflated number of clusters relative to other orders is a practical misfit diagnostic.

a

Dirichlet concentration of the mixture weights (default 1/K; must be small for superfluous components to empty out).

g

g-prior scale: NULL (default) uses unit information g = n_k per component; a number fixes g; a function(nk) is evaluated per component. See the paper for the effect on the sigma^2 posterior at extreme signal-to-noise ratios.

enum_max

exact enumeration of selection sets while a regression has at most enum_max candidate terms; larger sets use validated single-flip Metropolis-Hastings. Default 12; 6 is a good speed/exactness compromise in higher dimension.

seed

optional integer seed (full run reproducibility).

verbose

print progress every verbose sweeps (0 = silent).

...

further arguments passed to the engine (see scmix_engine), e.g. n_min, nflip.

Value

An object of class "scmix": a list with components

cluster

integer vector, the consensus partition (Dahl's least-squares criterion over the posterior similarity matrix).

K

number of clusters in the consensus partition.

Kstar_mode

posterior mode of the number of occupied components across sweeps.

inclusion

list (one matrix per mixture component label) of posterior selection probabilities; rows = equations, columns = candidate terms (named).

beta, sig2

coefficient summaries (posterior means conditional on inclusion) and residual-variance posterior means, per label.

alive_frac

fraction of post-burn-in sweeps each label was occupied (interpret per-label summaries only for labels with alive_frac near 1).

z_draw

the final-sweep posterior draw of the allocations (a sample, not a point estimate; prefer cluster).

order, call, runtime

bookkeeping.

References

Dong, A., Liao, Y.-L., and Lee, D. (2026). Replacing three nested searches with one sweep: a Bayesian treatment of sparse conditional mixture clustering. Melnykov, V. and Wang, Y. (2023). Conditional mixture modeling and model-based clustering. Pattern Recognition 133, 108994. doi:10.1016/j.patcog.2022.108994 Dahl, D. B. (2006). Model-based clustering for expression data via a Dirichlet process mixture model. In Bayesian Inference for Gene Expression and Proteomics, 201–218. Cambridge University Press.

Examples

set.seed(1)
n <- 200
x1 <- rnorm(n)
x2 <- c(0.5 + x1[1:100]^2, -2 - 0.8 * x1[101:200]^2) + rnorm(n, 0, 0.6)
fit <- scmix(cbind(x1, x2), K = 5, m = 2, n_iter = 400, burn = 150,
             seed = 42)
fit$K            # curved clusters found from one run
table(fit$cluster, rep(1:2, each = 100))
summary(fit)


Adjusted Rand index

Description

The adjusted Rand index between two partitions (Hubert and Arabie, 1985); label-invariant, 1 for identical partitions, ~0 for unrelated ones.

Usage

scmix_ari(a, b)

Arguments

a, b

Two label vectors of equal length.

Value

The adjusted Rand index, a scalar.

Examples

a <- rep(1:3, each = 5)
b <- c(rep(2:1, each = 5), rep(3, 5))   # same partition, labels permuted
scmix_ari(a, b)

Low-level engine (advanced use)

Description

The validated sampling engine underlying scmix and scmix_impute, exposed for power users; see the package source for complete documentation of every argument and output.

Usage

scmix_engine(Y, ...)

Arguments

Y

numeric matrix, NA = missing (complete required for m >= 2).

...

engine arguments; see scmix.

Value

Engine output list; see scmix for main fields.

Examples

d <- scmix_sim_mw3(n = 150, seed = 2)
eng <- scmix_engine(d$Y, K = 4, m = 1, n_iter = 200, burn = 80,
                    consensus = TRUE, seed = 3)
scmix_ari(eng$z_consensus, d$z)   # linear conditionals, short run

# quadratic conditionals at a more realistic length
eng2 <- scmix_engine(d$Y, K = 4, m = 2, n_iter = 400, burn = 200,
                     consensus = TRUE, seed = 3)
eng2$Kstar_consensus
scmix_ari(eng2$z_consensus, d$z)


Multiple imputation with the sparse conditional mixture engine

Description

Runs the same engine as scmix in multiple-imputation mode (linear conditionals, m = 1) for a data matrix with missing values, returning completed data sets and Rubin-pooling utilities.

Usage

scmix_impute(
  Y,
  M = 10L,
  K = 10L,
  n_iter = 1500L,
  burn = 500L,
  a = 1/K,
  seed = NULL,
  verbose = 0L,
  ...
)

Arguments

Y

numeric matrix with NAs.

M

number of completed data sets to return.

K

integer, overfitted cap on the number of components (the number of occupied components is estimated; K only needs to exceed the plausible truth). Default 7.

n_iter, burn

total and burn-in Gibbs sweeps.

a

Dirichlet concentration of the mixture weights (default 1/K; must be small for superfluous components to empty out).

seed

optional integer seed (full run reproducibility).

verbose

print progress every verbose sweeps (0 = silent).

...

further engine arguments.

Value

List with completed (list of M completed matrices) and the fitted-model summaries of scmix.

See Also

rubin_pool_scmix

Examples

Y <- scmix_sim_mw3(n = 120, seed = 7)$Y
set.seed(7)
Y[sample(length(Y), 30)] <- NA
imp <- scmix_impute(Y, M = 2, K = 4, n_iter = 300, burn = 100, seed = 8)
length(imp$completed)
anyNA(imp$completed[[1]])

Simulate the p = 3 replication setting of Melnykov and Wang (2023)

Description

Draws one data set from the three-component, quadratic-conditional setting of Melnykov and Wang (2023), supplementary Table S-1 (p = 3), as replicated in the accompanying paper.

Usage

scmix_sim_mw3(n = 1000, seed = NULL)

Arguments

n

Sample size.

seed

Optional seed.

Value

A list with elements Y (an n x 3 matrix) and z (the true component labels).

References

Melnykov, V. and Wang, Y. (2023). Conditional mixture modeling and model-based clustering. Pattern Recognition, 133:108994. doi:10.1016/j.patcog.2022.108994

Examples

d <- scmix_sim_mw3(n = 300, seed = 1)
dim(d$Y)
table(d$z)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.