@@ -60,10 +60,12 @@ def PrepareHitList(sample):
6060 print ('Loading read counts ...' )
6161 os .chdir (CtrlDir )
6262 Ctrl_File = pandas .read_table (CtrlCounts_Filename , sep = '\t ' )
63+ Model = Ctrl_File ['Model' ][0 ]
6364 sgIDs = list (Ctrl_File ['sgID' ])
6465 genes = list (Ctrl_File ['gene' ])
6566 mu = list (Ctrl_File ['Mean' ])
6667 L = len (sgIDs )
68+ SampleVar = list (Ctrl_File ['Sample Variance' ])
6769 sigma2 = list (Ctrl_File ['Model Variance' ])
6870 n = list (Ctrl_File ['n' ])
6971 p = list (Ctrl_File ['p' ])
@@ -74,57 +76,69 @@ def PrepareHitList(sample):
7476 x = list (SampleFile ['counts' ])
7577
7678 # -----------------------------------------------
77- # Compute fold change and p-values
79+ # Compute fold change
7880 # -----------------------------------------------
79- if max (sigma2 ) == 0 : # check for control replicates
81+ print ('Computing fold-changes ...' )
82+ fc = list ()
83+ for k in range (L ):
84+ if x [k ]== 0 or mu [k ]== 0 :
85+ fc .append ((x [k ]+ delta )/ (mu [k ]+ delta ))
86+ else :
87+ fc .append (x [k ]/ mu [k ])
88+
89+ # -----------------------------------------------
90+ # Compute p-values
91+ # -----------------------------------------------
92+ if Model == 'none' :
8093 # -----------------------------------------------------------
81- print ('WARNING: No control replicates! No p-values computed...' )
82- print ('Computing fold changes ...' )
83- fc = list ()
84- for k in range (L ):
85- if x [k ]== 0 or mu [k ]== 0 :
86- fc .append ((x [k ]+ delta )/ (mu [k ]+ delta ))
87- else :
88- fc .append (x [k ]/ mu [k ])
89- NBpval = [1 for k in range (L )]
90- NBpval_0 = [1 for k in range (L )]
94+ print ('WARNING: Zero variance or no control replicates! Cannot compute p-values ...' )
95+ pval = [1 for k in range (L )]
96+ pval0 = [1 for k in range (L )]
9197 significant = [False for k in range (L )]
9298 # -----------------------------------------------------------
9399 elif ScreenType == 'enrichment' : # enrichment screen
94100 # -----------------------------------------------------------
95- fc = list (); NBpval = list (); NBpval2 = list ()
96- print ('Computing fold-changes and p-values...' )
97- for k in range (L ):
98- # fold-change
99- if x [k ]== 0 or mu [k ]== 0 :
100- fc .append ((x [k ]+ delta )/ (mu [k ]+ delta ))
101- else :
102- fc .append (x [k ]/ mu [k ])
103- # one-sided p-value
104- if mu [k ]== 0 and x [k ]== 0 :
105- NBpval .append (1 )
106- elif x [k ]<= mu [k ]:
107- NBpval .append (1 )
108- else :
109- NBpval .append (1 - scipy .stats .nbinom .cdf (x [k ],n [k ],p [k ]))
101+ pval = list ();
102+ print ('Computing p-values ...' )
103+ # one-sided p-value
104+ if Model == 'Neg. Binomial' :
105+ for k in range (L ):
106+ if mu [k ]== 0 and x [k ]== 0 :
107+ pval .append (1 )
108+ elif x [k ]<= mu [k ]:
109+ pval .append (1 )
110+ else :
111+ pval .append (1 - scipy .stats .nbinom .cdf (x [k ],n [k ],p [k ]))
112+ elif Model == 'Poisson' :
113+ for k in range (L ):
114+ if mu [k ]== 0 and x [k ]== 0 :
115+ pval .append (1 )
116+ elif x [k ]<= mu [k ]:
117+ pval .append (1 )
118+ else :
119+ pval .append (1 - scipy .stats .poisson .cdf (x [k ],sigma2 [k ]))
110120 # -----------------------------------------------------------
111121 elif ScreenType == 'depletion' : # depletion screen
112122 # -----------------------------------------------------------
113- fc = list (); NBpval = list (); NBpval2 = list ()
114- print ('Computing fold-changes and p-values...' )
115- for k in range (L ):
116- # fold-change
117- if x [k ]== 0 or mu [k ]== 0 :
118- fc .append ((x [k ]+ delta )/ (mu [k ]+ delta ))
119- else :
120- fc .append (x [k ]/ mu [k ])
121- # one-sided p-value
122- if mu [k ]== 0 and x [k ]== 0 :
123- NBpval .append (1 )
124- elif x [k ]>= mu [k ]:
125- NBpval .append (1 )
126- else :
127- NBpval .append (scipy .stats .nbinom .cdf (x [k ],n [k ],p [k ]))
123+ pval = list ();
124+ print ('Computing p-values...' )
125+ # one-sided p-value
126+ if Model == 'Neg. Binomial' :
127+ for k in range (L ):
128+ if mu [k ]== 0 and x [k ]== 0 :
129+ pval .append (1 )
130+ elif x [k ]>= mu [k ]:
131+ pval .append (1 )
132+ else :
133+ pval .append (scipy .stats .nbinom .cdf (x [k ],n [k ],p [k ]))
134+ elif Model == 'Poisson' :
135+ for k in range (L ):
136+ if mu [k ]== 0 and x [k ]== 0 :
137+ pval .append (1 )
138+ elif x [k ]<= mu [k ]:
139+ pval .append (1 )
140+ else :
141+ pval .append (scipy .stats .poisson .cdf (x [k ],sigma2 [k ]))
128142 # -----------------------------------------------------------
129143 else : # error in scree type
130144 # -----------------------------------------------------------
@@ -133,17 +147,17 @@ def PrepareHitList(sample):
133147 # -----------------------------------------------
134148 # p-value Correction and Plots
135149 # -----------------------------------------------
136- if max (sigma2 ) > 0 :
150+ if max (SampleVar ) > 0 :
137151 # p-value correction for multiple tests
138152 print ('p-value correction ...' )
139- multTest = multipletests (NBpval ,alpha ,padj )
153+ multTest = multipletests (pval ,alpha ,padj )
140154 significant = multTest [0 ]
141- NBpval_0 = multTest [1 ]
155+ pval0 = multTest [1 ]
142156 # Plots
143157 print ('Plotting p-values ...' )
144- pvalHist (NBpval , NBpval_0 ,pvalDir ,sample ,res ,svg )
145- VolcanoPlot (fc ,NBpval ,significant ,pvalDir ,ScreenType ,sample ,res ,svg ,alpha )
146- QQPlot (NBpval ,significant ,pvalDir ,sample ,res ,svg ,alpha )
158+ pvalHist (pval , pval0 ,pvalDir ,sample ,res ,svg )
159+ VolcanoPlot (fc ,pval ,significant ,pvalDir ,ScreenType ,sample ,res ,svg ,alpha )
160+ QQPlot (pval ,significant ,pvalDir ,sample ,res ,svg ,alpha )
147161 zScorePlot (fc ,significant ,pvalDir ,ScreenType ,sample ,res ,svg ,alpha )
148162
149163
@@ -161,8 +175,8 @@ def PrepareHitList(sample):
161175 'control mean' : [mu [k ] for k in range (L )],
162176 'control stdev' : [numpy .sqrt (sigma2 [k ]) for k in range (L )],
163177 'fold change' : [fc [k ] for k in range (L )],
164- 'p-value' : [NBpval [k ] for k in range (L )],
165- 'p-value (adj.)' : [NBpval_0 [k ] for k in range (L )],
178+ 'p-value' : [pval [k ] for k in range (L )],
179+ 'p-value (adj.)' : [pval0 [k ] for k in range (L )],
166180 'significant' : [str (significant [k ]) for k in range (L )]},
167181 columns = ['sgRNA' ,'gene' ,'counts' ,'control mean' ,\
168182 'control stdev' ,'fold change' ,'p-value' ,'p-value (adj.)' ,'significant' ])
0 commit comments