fit_nb

fit_nb(
    Y,
    W,
    idx=None,
    lambda_a=0.0,
    winsor=DEFAULT_WINSOR,
    maxit_psi=25,
    maxit_nb=50,
    tol=0.0001,
    offset=None,
    psi=None,
    backend='auto',
    verbose=True,
    **kwargs,
)

Fit a per-gene NB GLM over an arbitrary design (R fitNB).

log(mu) = W @ alpha.T (+ offset) with no built-in intercept (gmean is zero). Y is genes x cells, W cells x covariates. Returns alpha, gmean, psi, loglik, sampling.

Examples

import numpy as np
import spanormpy as sn
rng = np.random.default_rng(1)
Y = rng.poisson(5, size=(20, 50))  # counts, genes x cells
W = np.column_stack([np.ones(50), np.linspace(-1, 1, 50)])  # intercept + one covariate
fit = sn.fit_nb(Y, W, verbose=False, backend="cpu")
fit["alpha"].shape  # genes x covariates
(20, 2)
fit["psi"][:3]  # dispersions
array([0.00372586, 0.00061724, 0.00184694])