Skip to content

Commit 0718667

Browse files
authored
Merge pull request #196 from dvitale199/pipeline
adding option to maf prune during lambda calculation
2 parents f48c4a9 + 5a36685 commit 0718667

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

genotools/gwas.py

+25-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
plink2_exec = check_plink2()
2828

2929
class Assoc:
30-
def __init__(self, geno_path=None, out_path=None, pca=10, build='hg38', gwas=True, pheno_name='PHENO1', covar_path=None, covar_names=None):
30+
def __init__(self, geno_path=None, out_path=None, pca=10, build='hg38', gwas=True, pheno_name='PHENO1', covar_path=None, covar_names=None, maf_lambdas=False):
3131
self.geno_path = geno_path
3232
self.out_path = out_path
3333
self.pca = pca
@@ -36,6 +36,7 @@ def __init__(self, geno_path=None, out_path=None, pca=10, build='hg38', gwas=Tru
3636
self.pheno_name = pheno_name
3737
self.covar_path = covar_path
3838
self.covar_names = covar_names
39+
self.maf_lambdas = maf_lambdas
3940

4041

4142
def write_exclusion_file(self):
@@ -276,16 +277,34 @@ def run_gwas(self, covars=True):
276277
# add pruning step here (pre lambdas)
277278
gwas_df_add = gwas_df.loc[gwas_df.TEST=='ADD']
278279

280+
if self.maf_lambdas:
281+
gwas_df_maf = gwas_df_add[gwas_df_add['A1_FREQ']>=0.01]
282+
gwas_df_maf = gwas_df_maf[gwas_df_maf['A1_FREQ']<=0.99]
283+
gwas_df_maf = gwas_df_maf[~gwas_df_maf['P'].isna()]
284+
285+
lambda_maf_dict = Assoc.calculate_inflation(gwas_df_maf.P, normalize=False)
286+
lambda1000_maf_dict = Assoc.calculate_inflation(gwas_df_maf.P, normalize=True, ncases=ncases, ncontrols=ncontrols)
287+
279288
# calculate inflation
280289
lambda_dict = Assoc.calculate_inflation(gwas_df_add.P, normalize=False)
281290
lambda1000_dict = Assoc.calculate_inflation(gwas_df_add.P, normalize=True, ncases=ncases, ncontrols=ncontrols)
282291

283-
metrics_dict = {
284-
'lambda': lambda_dict['metrics']['inflation'],
285-
'lambda1000': lambda1000_dict['metrics']['inflation'],
286-
'cases': ncases,
287-
'controls': ncontrols
292+
if self.maf_lambdas:
293+
metrics_dict = {
294+
'lambda': lambda_dict['metrics']['inflation'],
295+
'lambda1000': lambda1000_dict['metrics']['inflation'],
296+
'lambda_maf': lambda_maf_dict['metrics']['inflation'],
297+
'lambda1000_maf': lambda1000_maf_dict['metrics']['inflation'],
298+
'cases': ncases,
299+
'controls': ncontrols
288300
}
301+
else:
302+
metrics_dict = {
303+
'lambda': lambda_dict['metrics']['inflation'],
304+
'lambda1000': lambda1000_dict['metrics']['inflation'],
305+
'cases': ncases,
306+
'controls': ncontrols
307+
}
289308

290309
process_complete = True
291310

genotools/pipeline.py

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def gt_argparse():
7676
parser.add_argument('--gwas', type=str, nargs='?', default='False', const='True', help='Run GWAS')
7777
parser.add_argument('--covars', type=str, nargs='?', default=None, const=None, help='Path to external covars')
7878
parser.add_argument('--covar_names', type=str, nargs='?', default=None, const=None, help='Covar names to use from external file')
79+
parser.add_argument('--maf_lambdas', type=str, nargs='?', default='False', const='True', help='MAF prune before lambda calculations')
7980

8081

8182
# parse args and turn into dict
@@ -219,6 +220,7 @@ def execute_pipeline(steps, steps_dict, geno_path, out_path, samp_qc, var_qc, as
219220
assoc.gwas = args['gwas']
220221
assoc.covar_path = args['covars']
221222
assoc.covar_names = args['covar_names']
223+
assoc.maf_lambdas = args['maf_lambdas']
222224
out_dict[step] = steps_dict[step]()
223225

224226
pass_fail[step] = {'status':out_dict[step]['pass'], 'input':step_input, 'output':step_output}

0 commit comments

Comments
 (0)