[ea0fd6]: / tests / deseq2 / test_optim.py

Download this file

62 lines (55 with data), 2.1 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import unittest
import numpy as np
import patsy
import scipy.stats
from inmoose.deseq2 import DESeq, makeExampleDESeqDataSet
from inmoose.deseq2.fitNbinomGLMs import fitNbinomGLMs
class Test(unittest.TestCase):
def test_optim(self):
"""test that optim gives same results"""
dds = makeExampleDESeqDataSet(n=100, interceptMean=10, interceptSD=3, seed=51)
dds = dds.estimateSizeFactors()
dds = dds.estimateDispersions()
# make a larger predictor to test scaling
dds.obs["condition"] = scipy.stats.norm.rvs(
loc=0, scale=1000, size=dds.n_obs, random_state=51
)
modelMatrix = patsy.dmatrix("~condition", dds.obs)
fit = fitNbinomGLMs(
dds,
modelMatrix=modelMatrix,
modelFormula="~condition",
alpha_hat=dds.var["dispersion"],
lambda_=(2, 2),
renameCols=True,
betaTol=1e-8,
maxit=100,
useOptim=True,
useQR=True,
forceOptim=False,
)
fitOptim = fitNbinomGLMs(
dds,
modelMatrix=modelMatrix,
modelFormula="~condition",
alpha_hat=dds.var["dispersion"],
lambda_=(2, 2),
renameCols=True,
betaTol=1e-8,
maxit=100,
useOptim=True,
useQR=True,
forceOptim=True,
)
self.assertTrue(np.allclose(fit["betaMatrix"], fitOptim["betaMatrix"]))
self.assertTrue(np.allclose(fit["betaSE"], fitOptim["betaSE"]))
# test optim gives same lfcSE
dds = makeExampleDESeqDataSet(n=100, m=10, seed=42)
dds.X[:, 0] = [0, 0, 0, 0, 0, 1000, 1000, 0, 0, 0]
dds = DESeq(dds, betaPrior=False)
# beta iter = 100 implies optim used for fitting
self.assertEqual(dds.var["betaIter"].iloc[0], 100)
res1 = dds.results(contrast=["condition", "B", "A"])
res2 = dds.results(contrast=[0, 1])
self.assertTrue(np.allclose(res1.lfcSE, res2.lfcSE))
self.assertTrue(np.allclose(res1.pvalue, res2.pvalue, equal_nan=True))