theislab / diffxpy

Differential expression analysis for single-cell RNA-seq data.
https://diffxpy.rtfd.io
BSD 3-Clause "New" or "Revised" License
179 stars 23 forks source link

numpy.linalg.LinAlgError: Singular matrix #185

Open Hrovatin opened 3 years ago

Hrovatin commented 3 years ago

When training on pseudobulk data of dimensions (79, 21370) I get the below error:


training location model: True
training scale model: True
iter   0: ll=158167164.728318
caught 11002 linalg singular matrix errors
iter   1: ll=156633409.881217, converged: 0.00% (loc: 73.00%, scale update: False), in 6.84sec
iter   2: ll=153122686.626798, converged: 0.00% (loc: 73.07%, scale update: False), in 1.91sec
iter   3: ll=153117186.549920, converged: 0.00% (loc: 73.07%, scale update: False), in 1.81sec
iter   4: ll=153113320.883527, converged: 0.00% (loc: 73.07%, scale update: False), in 1.80sec
iter   5: ll=153109481.556667, converged: 0.00% (loc: 73.58%, scale update: False), in 2.00sec
iter   6: ll=113614739.986848, converged: 8.76% (loc: 8.76%, scale update: True), in 38.88sec
Traceback (most recent call last):
  File "/storage/groups/ml01/code/karin.hrovatin/diabetes_analysis/data_exploration/annotation/2_ovr_pseudobulk_cell_type_integrated_script.py", line 82, in <module>
    result=de.test.wald(data=adata_test.X,
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/diffxpy/diffxpy/testing/tests.py", line 717, in wald
    model = _fit(
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/diffxpy/diffxpy/testing/tests.py", line 242, in _fit
    estim.train_sequence(
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/batchglm/batchglm/models/base/estimator.py", line 124, in train_sequence
    self.train(**d, **kwargs)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/batchglm/batchglm/train/numpy/base_glm/estimator.py", line 139, in train
    a_step = self.iwls_step(idx_update=idx_update)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/batchglm/batchglm/train/numpy/base_glm/estimator.py", line 290, in iwls_step
    delta_theta[:, idx_update[invertible]] = dask.array.map_blocks(
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/base.py", line 279, in compute
    (result,) = compute(self, traverse=False, **kwargs)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/base.py", line 567, in compute
    results = schedule(dsk, keys, **kwargs)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/threaded.py", line 76, in get
    results = get_async(
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/local.py", line 486, in get_async
    raise_exception(exc, tb)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/local.py", line 316, in reraise
    raise exc
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/local.py", line 222, in execute_task
    result = _execute_task(task, data)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 121, in _execute_task
    return func(*(_execute_task(a, cache) for a in args))
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 121, in <genexpr>
    return func(*(_execute_task(a, cache) for a in args))
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 121, in _execute_task
    return func(*(_execute_task(a, cache) for a in args))
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 121, in <genexpr>
    return func(*(_execute_task(a, cache) for a in args))
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 121, in _execute_task
    return func(*(_execute_task(a, cache) for a in args))
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/optimization.py", line 963, in __call__
    return core.get(self.dsk, self.outkey, dict(zip(self.inkeys, args)))
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 151, in get
    result = _execute_task(task, cache)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/dask/core.py", line 121, in _execute_task
    return func(*(_execute_task(a, cache) for a in args))
  File "<__array_function__ internals>", line 5, in solve
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/numpy/linalg/linalg.py", line 394, in solve
    r = gufunc(a, b, signature=signature, extobj=extobj)
  File "/home/icb/karin.hrovatin/miniconda3/envs/diffxpy/lib/python3.8/site-packages/numpy/linalg/linalg.py", line 88, in _raise_linalgerror_singular
    raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix