theislab / diffxpy

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

de.test.lrt fails with ValueError: type <class 'tuple'> not recognized #172

Open letaylor opened 4 years ago

letaylor commented 4 years ago

I am finding an error when I run de.test.lrt. Below is an example based on the tutorials.

import anndata
import matplotlib.pyplot as plt
import seaborn as sns
import logging
import numpy as np
import pandas as pd
import scipy.stats
import diffxpy.api as de

from batchglm.api.models.tf1.glm_nb import Simulator

sim = Simulator(num_observations=200, num_features=100)
sim.generate_sample_description(num_batches=0, num_conditions=2)
sim.generate_params(
    rand_fn_loc=lambda shape: np.random.uniform(-0.1, 0.1, shape),
    rand_fn_scale=lambda shape: np.random.uniform(0.1, 2, shape)
)
sim.generate_data()

data = anndata.AnnData(
    X=sim.x,
    var=pd.DataFrame(index=["gene" + str(i) for i in range(sim.x.shape[1])]),
    obs=sim.sample_description
)

test_lrt = de.test.lrt(
   data=data, 
   full_formula_loc="1+condition",
   reduced_formula_loc="1"
)

Throws the below error:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-faaa08cbab62> in <module>
      2    data=data,
      3    full_formula_loc="1+condition",
----> 4    reduced_formula_loc="1"
      5 )

/miniconda3/envs/diffx/lib/python3.7/site-packages/diffxpy/testing/tests.py in lrt(data, full_formula_loc, reduced_formula_loc, full_formula_scale, reduced_formula_scale, as_numeric, init_a,
init_b, gene_names, sample_description, noise_model, size_factors, batch_size, backend, train_args, training_strategy, quick_scale, dtype, **kwargs)
    412         quick_scale=quick_scale,
    413         dtype=dtype,
--> 414         **kwargs
    415     )
    416     full_model = _fit(

/miniconda3/envs/diffx/lib/python3.7/site-packages/diffxpy/testing/tests.py in _fit(noise_model, data, design_loc, design_scale, design_loc_names, design_scale_names, constraints_loc, constra
ints_scale, init_model, init_a, init_b, gene_names, size_factors, batch_size, backend, training_strategy, quick_scale, train_args, close_session, dtype)
    188         chunk_size_genes=chunk_size_genes,
    189         as_dask=backend.lower() in ["numpy"],
--> 190         cast_dtype=dtype
    191     )
    192

/miniconda3/envs/diffx/lib/python3.7/site-packages/batchglm/models/base_glm/input.py in __init__(self, data, design_loc, design_loc_names, design_scale, design_scale_names, constraints_loc, c
onstraints_scale, size_factors, observation_names, feature_names, chunk_size_cells, chunk_size_genes, as_dask, cast_dtype)
     94         design_loc, design_loc_names = parse_design(
     95             design_matrix=design_loc,
---> 96             param_names=design_loc_names
     97         )
     98         design_scale, design_scale_names = parse_design(

/miniconda3/envs/diffx/lib/python3.7/site-packages/batchglm/models/base_glm/utils.py in parse_design(design_matrix, param_names)
     39         params = None
     40     else:
---> 41         raise ValueError("type %s not recognized" % type(design_matrix))
     42
     43     if param_names is not None:

ValueError: type <class 'tuple'> not recognized

Conda environment:

channels:
  - hanyucui
  - conda-forge
  - bioconda
  - r
  - defaults
dependencies:
  - pandas=1.0.5
  - scipy=1.5.0
  - scanpy=1.5.1
  - plotnine=0.7.0
  - scikit-learn=0.23.1
  - joblib=0.15.1
  - tensorflow-gpu=1.15.0+db2
  - pip
  - pip:
      - diffxpy==0.7.4