4
4
import pandas as pd
5
5
import scipy .stats as stats
6
6
7
- from batchglm .api .models .glm_nb import Simulator
8
7
import diffxpy .api as de
9
8
10
9
11
10
class _TestSingleDE :
12
11
13
- def _prepare_data (self , n_cells : int = 2000 , n_genes : int = 100 ):
12
+ def _prepare_data (
13
+ self ,
14
+ n_cells : int ,
15
+ n_genes : int ,
16
+ noise_model : str
17
+ ):
14
18
"""
15
19
16
20
:param n_cells: Number of cells to simulate (number of observations per test).
17
21
:param n_genes: Number of genes to simulate (number of tests).
22
+ :param noise_model: Noise model to use for data fitting.
18
23
"""
24
+ if noise_model == "nb" :
25
+ from batchglm .api .models .glm_nb import Simulator
26
+ elif noise_model == "norm" :
27
+ from batchglm .api .models .glm_norm import Simulator
28
+ else :
29
+ raise ValueError ("noise model %s not recognized" % noise_model )
30
+
19
31
num_non_de = n_genes // 2
20
32
sim = Simulator (num_observations = n_cells , num_features = n_genes )
21
33
sim .generate_sample_description (num_batches = 0 , num_conditions = 2 )
@@ -50,7 +62,12 @@ def _eval(self, sim, test):
50
62
51
63
return sim
52
64
53
- def _test_rank_de (self , n_cells : int = 2000 , n_genes : int = 100 ):
65
+ def _test_rank_de (
66
+ self ,
67
+ n_cells : int ,
68
+ n_genes : int ,
69
+ noise_model : str
70
+ ):
54
71
"""
55
72
:param n_cells: Number of cells to simulate (number of observations per test).
56
73
:param n_genes: Number of genes to simulate (number of tests).
@@ -59,7 +76,11 @@ def _test_rank_de(self, n_cells: int = 2000, n_genes: int = 100):
59
76
logging .getLogger ("batchglm" ).setLevel (logging .WARNING )
60
77
logging .getLogger ("diffxpy" ).setLevel (logging .WARNING )
61
78
62
- sim = self ._prepare_data (n_cells = n_cells , n_genes = n_genes )
79
+ sim = self ._prepare_data (
80
+ n_cells = n_cells ,
81
+ n_genes = n_genes ,
82
+ noise_model = noise_model
83
+ )
63
84
64
85
test = de .test .rank_test (
65
86
data = sim .X ,
@@ -72,7 +93,11 @@ def _test_rank_de(self, n_cells: int = 2000, n_genes: int = 100):
72
93
73
94
return True
74
95
75
- def _test_t_test_de (self , n_cells : int = 2000 , n_genes : int = 100 ):
96
+ def _test_t_test_de (
97
+ self ,
98
+ n_cells : int ,
99
+ n_genes : int
100
+ ):
76
101
"""
77
102
:param n_cells: Number of cells to simulate (number of observations per test).
78
103
:param n_genes: Number of genes to simulate (number of tests).
@@ -81,7 +106,11 @@ def _test_t_test_de(self, n_cells: int = 2000, n_genes: int = 100):
81
106
logging .getLogger ("batchglm" ).setLevel (logging .WARNING )
82
107
logging .getLogger ("diffxpy" ).setLevel (logging .WARNING )
83
108
84
- sim = self ._prepare_data (n_cells = n_cells , n_genes = n_genes )
109
+ sim = self ._prepare_data (
110
+ n_cells = n_cells ,
111
+ n_genes = n_genes ,
112
+ noise_model = "norm"
113
+ )
85
114
86
115
test = de .test .t_test (
87
116
data = sim .X ,
@@ -109,7 +138,11 @@ def _test_wald_de(
109
138
logging .getLogger ("batchglm" ).setLevel (logging .WARNING )
110
139
logging .getLogger ("diffxpy" ).setLevel (logging .WARNING )
111
140
112
- sim = self ._prepare_data (n_cells = n_cells , n_genes = n_genes )
141
+ sim = self ._prepare_data (
142
+ n_cells = n_cells ,
143
+ n_genes = n_genes ,
144
+ noise_model = noise_model
145
+ )
113
146
114
147
test = de .test .wald (
115
148
data = sim .X ,
@@ -140,7 +173,11 @@ def _test_lrt_de(
140
173
logging .getLogger ("batchglm" ).setLevel (logging .WARNING )
141
174
logging .getLogger ("diffxpy" ).setLevel (logging .WARNING )
142
175
143
- sim = self ._prepare_data (n_cells = n_cells , n_genes = n_genes )
176
+ sim = self ._prepare_data (
177
+ n_cells = n_cells ,
178
+ n_genes = n_genes ,
179
+ noise_model = noise_model
180
+ )
144
181
145
182
test = de .test .lrt (
146
183
data = sim .X ,
@@ -264,5 +301,6 @@ def test_lrt_de_norm(
264
301
noise_model = "norm"
265
302
)
266
303
304
+
267
305
if __name__ == '__main__' :
268
306
unittest .main ()
0 commit comments