gwaslab 3.6.9__tar.gz → 3.6.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of gwaslab might be problematic. Click here for more details.

Files changed (129) hide show
  1. {gwaslab-3.6.9/src/gwaslab.egg-info → gwaslab-3.6.10}/PKG-INFO +1 -1
  2. {gwaslab-3.6.9 → gwaslab-3.6.10}/pyproject.toml +1 -1
  3. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_Log.py +13 -1
  4. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_Sumstats.py +7 -1
  5. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_version.py +2 -2
  6. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_calculate_power.py +19 -14
  7. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_associations.py +2 -2
  8. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_mqqplot.py +1 -1
  9. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_trumpetplot.py +45 -8
  10. {gwaslab-3.6.9 → gwaslab-3.6.10/src/gwaslab.egg-info}/PKG-INFO +1 -1
  11. {gwaslab-3.6.9 → gwaslab-3.6.10}/LICENSE +0 -0
  12. {gwaslab-3.6.9 → gwaslab-3.6.10}/LICENSE_before_v3.4.39 +0 -0
  13. {gwaslab-3.6.9 → gwaslab-3.6.10}/README.md +0 -0
  14. {gwaslab-3.6.9 → gwaslab-3.6.10}/setup.cfg +0 -0
  15. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/__init__.py +0 -0
  16. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/bd/bd_common_data.py +0 -0
  17. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/bd/bd_config.py +0 -0
  18. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/bd/bd_download.py +0 -0
  19. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/bd/bd_get_hapmap3.py +0 -0
  20. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/bd/bd_path_manager.py +0 -0
  21. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/cache_manager.py +0 -0
  22. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/chrx_par/chrx_par_hg19.bed.gz +0 -0
  23. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/chrx_par/chrx_par_hg38.bed.gz +0 -0
  24. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/formatbook.json +0 -0
  25. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/hapmap3_SNPs/hapmap3_db150_hg19.snplist.gz +0 -0
  26. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/hapmap3_SNPs/hapmap3_db151_hg38.snplist.gz +0 -0
  27. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/high_ld/high_ld_hla_hg19.bed.gz +0 -0
  28. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/high_ld/high_ld_hla_hg38.bed.gz +0 -0
  29. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/data/reference.json +0 -0
  30. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/ldsc/ldsc_irwls.py +0 -0
  31. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/ldsc/ldsc_jackknife.py +0 -0
  32. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/ldsc/ldsc_ldscore.py +0 -0
  33. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/ldsc/ldsc_parse.py +0 -0
  34. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/ldsc/ldsc_regressions.py +0 -0
  35. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/ldsc/ldsc_sumstats.py +0 -0
  36. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/prscs/prscs_gigrnd.py +0 -0
  37. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/prscs/prscs_mcmc_gtb.py +0 -0
  38. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/extension/prscs/prscs_parse_genet.py +0 -0
  39. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_Phenotypes.py +0 -0
  40. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_SumstatsMulti.py +0 -0
  41. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_SumstatsPair.py +0 -0
  42. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_SumstatsSet.py +0 -0
  43. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_SumstatsT.py +0 -0
  44. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_Sumstats_polars.py +0 -0
  45. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_Sumstats_summary.py +0 -0
  46. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_headers.py +0 -0
  47. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_meta.py +0 -0
  48. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_meta_update.py +0 -0
  49. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_vchange_status.py +0 -0
  50. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/g_vchange_status_polars.py +0 -0
  51. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/hm/hm_casting.py +0 -0
  52. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/hm/hm_casting_polars.py +0 -0
  53. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/hm/hm_harmonize_sumstats.py +0 -0
  54. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/hm/hm_rsid_to_chrpos.py +0 -0
  55. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_load_ld.py +0 -0
  56. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_preformat_input.py +0 -0
  57. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_preformat_input_polars.py +0 -0
  58. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_process_args.py +0 -0
  59. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_read_ldsc.py +0 -0
  60. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_read_pipcs.py +0 -0
  61. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_read_tabular.py +0 -0
  62. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_to_formats.py +0 -0
  63. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/io/io_to_pickle.py +0 -0
  64. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/qc/qc_build.py +0 -0
  65. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/qc/qc_check_datatype.py +0 -0
  66. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/qc/qc_check_datatype_polars.py +0 -0
  67. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/qc/qc_fix_sumstats.py +0 -0
  68. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/qc/qc_fix_sumstats_polars.py +0 -0
  69. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/run_script.py +0 -0
  70. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_abf_finemapping.py +0 -0
  71. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_calculate_ldmatrix.py +0 -0
  72. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_calculate_prs.py +0 -0
  73. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_gwascatalog.py +0 -0
  74. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_infer_ancestry.py +0 -0
  75. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_ldproxyfinder.py +0 -0
  76. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_ldsc.py +0 -0
  77. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_match_ldmatrix.py +0 -0
  78. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_phewwas.py +0 -0
  79. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_plink_filter.py +0 -0
  80. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_process_h5.py +0 -0
  81. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_process_ref.py +0 -0
  82. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_2samplemr.py +0 -0
  83. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_ccgwas.py +0 -0
  84. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_clumping.py +0 -0
  85. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_coloc.py +0 -0
  86. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_hyprcoloc.py +0 -0
  87. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_magma.py +0 -0
  88. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_mesusie.py +0 -0
  89. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_mtag.py +0 -0
  90. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_prscs.py +0 -0
  91. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_scdrs.py +0 -0
  92. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_ex_run_susie.py +0 -0
  93. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_calculate_gc.py +0 -0
  94. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_convert_h2.py +0 -0
  95. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_correct_winnerscurse.py +0 -0
  96. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_estimate_ess.py +0 -0
  97. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_fill_data.py +0 -0
  98. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_filter_value.py +0 -0
  99. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_get_density.py +0 -0
  100. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_get_sig.py +0 -0
  101. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_merge.py +0 -0
  102. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_meta.py +0 -0
  103. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_meta_polars.py +0 -0
  104. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/util/util_in_snphwe.py +0 -0
  105. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_aux_annotate_plot.py +0 -0
  106. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_aux_chromatin.py +0 -0
  107. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_aux_property.py +0 -0
  108. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_aux_quickfix.py +0 -0
  109. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_aux_reposition_text.py +0 -0
  110. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_aux_save_figure.py +0 -0
  111. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_compare_af.py +0 -0
  112. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_compare_effect.py +0 -0
  113. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_credible_sets.py +0 -0
  114. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_effect.py +0 -0
  115. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_forestplot.py +0 -0
  116. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_miamiplot.py +0 -0
  117. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_miamiplot2.py +0 -0
  118. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_phe_heatmap.py +0 -0
  119. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_qqplot.py +0 -0
  120. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_regional2.py +0 -0
  121. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_regionalplot.py +0 -0
  122. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_rg_heatmap.py +0 -0
  123. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_scatter_with_reg.py +0 -0
  124. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_stackedregional.py +0 -0
  125. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab/viz/viz_plot_template.py +0 -0
  126. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab.egg-info/SOURCES.txt +0 -0
  127. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab.egg-info/dependency_links.txt +0 -0
  128. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab.egg-info/requires.txt +0 -0
  129. {gwaslab-3.6.9 → gwaslab-3.6.10}/src/gwaslab.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gwaslab
3
- Version: 3.6.9
3
+ Version: 3.6.10
4
4
  Summary: A collection of handy tools for GWAS SumStats
5
5
  Author-email: Yunye <gwaslab@gmail.com>
6
6
  Project-URL: Homepage, https://cloufield.github.io/gwaslab/
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "gwaslab"
10
- version = "3.6.9"
10
+ version = "3.6.10"
11
11
  authors = [
12
12
  { name="Yunye", email="gwaslab@gmail.com" },
13
13
  ]
@@ -31,4 +31,16 @@ class Log():
31
31
  self.log_text = self.log_text + str(time.strftime('%Y/%m/%d %H:%M:%S')) + " " + " ".join(map(str,message)) + end
32
32
  else:
33
33
  if verbose: print(*message,end=end)
34
- self.log_text = self.log_text + " ".join(map(str,message)) + end
34
+ self.log_text = self.log_text + " ".join(map(str,message)) + end
35
+
36
+ def get_log_for_last_operation(self):
37
+ last_log = []
38
+ rows = self.log_text.strip().split("\n")
39
+
40
+ # Iterate backwards to find the last operation
41
+ for line in reversed(rows):
42
+ last_log.append(line)
43
+ if "Start to" in line:
44
+ break
45
+
46
+ return "".join(reversed(last_log))
@@ -112,6 +112,7 @@ from gwaslab.io.io_to_pickle import _reload
112
112
 
113
113
  #20220309
114
114
  class Sumstats():
115
+
115
116
  def __init__(self,
116
117
  sumstats=None,
117
118
  fmt=None,
@@ -274,6 +275,10 @@ class Sumstats():
274
275
  self.id = id(self)
275
276
  self.tmp_path = _path(pid=self.id, log = self.log, verbose=verbose)
276
277
 
278
+ def __getitem__(self, index):
279
+ return self.data[index]
280
+ def __len__(self):
281
+ return len(self.data)
277
282
  #### healper #################################################################################
278
283
  def update_meta(self, **kwargs):
279
284
  self.meta = _update_meta(self.meta, self.data,log = self.log, **kwargs)
@@ -695,7 +700,8 @@ class Sumstats():
695
700
  return fig, outliers
696
701
 
697
702
  def infer_ancestry(self, **kwargs):
698
- self.meta["gwaslab"]["inferred_ancestry"] = _infer_ancestry(self.data, **kwargs)
703
+ self.meta["gwaslab"]["inferred_ancestry"] = _infer_ancestry(self.data, log=self.log,
704
+ **kwargs)
699
705
 
700
706
  def plot_gwheatmap(self, **kwargs):
701
707
  fig = _gwheatmap(self.data, **kwargs)
@@ -17,8 +17,8 @@ def _get_version():
17
17
  def gwaslab_info():
18
18
  # version meta information
19
19
  dic={
20
- "version":"3.6.9",
21
- "release_date":"20251012"
20
+ "version":"3.6.10",
21
+ "release_date":"20251101"
22
22
  }
23
23
  return dic
24
24
 
@@ -27,17 +27,19 @@ def get_power(
27
27
  log.write(" -Number of cases:{}".format(ncase), verbose=verbose)
28
28
  log.write(" -Number of controls:{}".format(ncontrol), verbose=verbose)
29
29
  if genotype_rr is not None:
30
- log.write(" -Risk allele RR:{:.3f}".format(genotype_rr), verbose=verbose)
30
+ log.write(" -Risk allele RR:{}".format(genotype_rr), verbose=verbose)
31
31
  elif genotype_or is not None:
32
- log.write(" -Risk allele OR:{:.3f}".format(genotype_or), verbose=verbose)
32
+ log.write(" -Risk allele OR:{}".format(genotype_or), verbose=verbose)
33
33
  elif beta is not None:
34
- log.write(" -Risk allele beta:{:.3f}".format(beta), verbose=verbose)
34
+ log.write(" -Risk allele beta:{}".format(beta), verbose=verbose)
35
35
  else:
36
36
  genotype_rr = 0.1
37
- log.write(" -Risk allele RR:{:.3f}".format(genotype_rr), verbose=verbose)
38
- log.write(" -Disease prevalence:{:.3f}".format(prevalence), verbose=verbose)
39
- log.write(" -Risk allele frequency: {:.3f}".format(daf), verbose=verbose)
40
- log.write(" -Significance level: {:.3e}".format(sig_level), verbose=verbose)
37
+ log.write(" -Risk allele RR:{}".format(genotype_rr), verbose=verbose)
38
+
39
+ log.write(" -Disease prevalence:{}".format(prevalence), verbose=verbose)
40
+ log.write(" -Risk allele frequency: {}".format(daf), verbose=verbose)
41
+ log.write(" -Significance level: {}".format(sig_level), verbose=verbose)
42
+
41
43
  # Skol, A. D., Scott, L. J., Abecasis, G. R., & Boehnke, M. (2006). Joint analysis is more efficient than replication-based analysis for two-stage genome-wide association studies. Nature genetics, 38(2), 209-213.
42
44
  aaf = daf**2
43
45
  abf = 2 * (daf) * (1 - daf)
@@ -68,9 +70,9 @@ def get_power(
68
70
  abp= x[1] * prevalence / (x[0]*aaf + x[1]*abf + x[2]*bbf)
69
71
  bbp= x[2] * prevalence / (x[0]*aaf + x[1]*abf + x[2]*bbf)
70
72
  log.write("Probability of disease :", verbose=verbose)
71
- log.write(" - Individuals with AA genotype: {:.3f}".format(aap), verbose=verbose)
72
- log.write(" - Individuals with AB genotype: {:.3f}".format(abp), verbose=verbose)
73
- log.write(" - Individuals with BB genotype: {:.3f}".format(bbp), verbose=verbose)
73
+ log.write(" - Individuals with AA genotype: {}".format(aap), verbose=verbose)
74
+ log.write(" - Individuals with AB genotype: {}".format(abp), verbose=verbose)
75
+ log.write(" - Individuals with BB genotype: {}".format(bbp), verbose=verbose)
74
76
 
75
77
  pcase= (aap * aaf + abp * abf*0.5) / prevalence
76
78
  pcontrol=((1-aap )* aaf + (1-abp )* abf*0.5) / (1 - prevalence)
@@ -78,16 +80,19 @@ def get_power(
78
80
  vcase = pcase *(1-pcase)
79
81
  vcontrol =pcontrol *(1-pcontrol)
80
82
  log.write("Expected risk allele frequency:", verbose=verbose)
81
- log.write(" - In cases: {:.3f}".format(pcase), verbose=verbose)
82
- log.write(" - In controls: {:.3f}".format(pcontrol), verbose=verbose)
83
+ log.write(" - In cases: {}".format(pcase), verbose=verbose)
84
+ log.write(" - In controls: {}".format(pcontrol), verbose=verbose)
83
85
 
84
86
  num= (pcase - pcontrol)
85
- den= np.sqrt( (vcase/ncase + vcontrol/ncontrol)*0.5 )
87
+ for_sqrt = (vcase/ncase + vcontrol/ncontrol)*0.5
88
+ if np.iterable(for_sqrt):
89
+ for_sqrt[for_sqrt < 0] = np.nan
90
+ den= np.sqrt( for_sqrt )
86
91
  u = num / den
87
92
 
88
93
  c = ss.norm.isf(sig_level/2)
89
94
  power = 1 - ss.norm.cdf(c-u) + ss.norm.cdf(-c-u)
90
- log.write("Expected power: {:.3f}".format(power), verbose=verbose)
95
+ log.write("Expected power: {}".format(power), verbose=verbose)
91
96
 
92
97
  elif mode=="q":
93
98
  if beta is None:
@@ -33,8 +33,8 @@ def _plot_associations(associations,
33
33
  associations = associations.dropna(subset=[values])
34
34
  log.write(f" -Keeping associations without NA in {values} :{len(associations)} ", verbose=verbose)
35
35
 
36
- log.write(f" -Total number of unique variants for plotting :{associations["rsID"].nunique()} ", verbose=verbose)
37
- log.write(f" -Total number of unique traits for plotting:{associations["GWASCATALOG_TRAIT"].nunique()} ", verbose=verbose)
36
+ log.write(f" -Total number of unique variants for plotting :{associations['rsID'].nunique()} ", verbose=verbose)
37
+ log.write(f" -Total number of unique traits for plotting:{associations['GWASCATALOG_TRAIT'].nunique()} ", verbose=verbose)
38
38
 
39
39
  matrix_beta = associations.pivot_table(index=['rsID','gene.geneName'],
40
40
  columns='GWASCATALOG_TRAIT',
@@ -296,7 +296,7 @@ def mqqplot(insumstats,
296
296
  region_ref.append(region_ref_second)
297
297
  region_ref_index_dic = {value: index for index,value in enumerate(region_ref)}
298
298
 
299
- taf = _update_args(taf, [track_n,track_n_offset,track_fontsize_ratio,track_exon_ratio,track_text_offset])
299
+ taf = _update_arg(taf, [track_n,track_n_offset,track_fontsize_ratio,track_exon_ratio,track_text_offset])
300
300
  region_marker_shapes = _update_arg(region_marker_shapes, ['o', '^','s','D','*','P','X','h','8'])
301
301
  region_grid_line = _update_args(region_grid_line, {"linewidth": 2,"linestyle":"--"})
302
302
  region_lead_grid_line = _update_args(region_lead_grid_line, {"alpha":0.5,"linewidth" : 2,"linestyle":"--","color":"#FF0000"})
@@ -170,10 +170,11 @@ def plottrumpet(mysumstats,
170
170
  cols_to_use.append(chrom) if chrom not in cols_to_use else cols_to_use
171
171
 
172
172
  if size != "ABS_BETA":
173
- if size not in cols_to_use:
173
+ if size is not None and size not in cols_to_use:
174
174
  cols_to_use.append(size)
175
175
  if "hue" in scatter_args.keys():
176
- cols_to_use.append(scatter_args["hue"])
176
+ if scatter_args["hue"] not in cols_to_use:
177
+ cols_to_use.append(scatter_args["hue"])
177
178
  #filter by p #################################################################################################################
178
179
  if p in mysumstats.columns:
179
180
  sumstats = mysumstats.loc[mysumstats[p]< p_level,cols_to_use ].copy()
@@ -287,7 +288,10 @@ def plottrumpet(mysumstats,
287
288
  sumstats["ABS_BETA"] = sumstats[beta].abs()
288
289
 
289
290
  ##################################################################################################
290
- size_norm = (sumstats[size].min(), sumstats[size].max())
291
+ if size is None:
292
+ size_norm = None
293
+ else:
294
+ size_norm = (sumstats[size].min(), sumstats[size].max())
291
295
  ## if highlight ##################################################################################################
292
296
 
293
297
  log.write(" -Creating scatter plot...", verbose=verbose)
@@ -389,15 +393,30 @@ def plottrumpet(mysumstats,
389
393
 
390
394
  #second_legend = ax.legend(title="Power", loc="upper right",fontsize =fontsize,title_fontsize=fontsize)
391
395
  log.write(" -Creating legends...")
396
+ # curve, size, hue
392
397
  h,l = ax.get_legend_handles_labels()
398
+
393
399
  if len(ts)>0:
400
+ # power curves
394
401
  l1 = ax.legend(h[:int(len(ts))],l[:int(len(ts))], title="Power", loc="upper right",fontsize =fontsize,title_fontsize=fontsize)
395
402
  for line in l1.get_lines():
396
403
  line.set_linewidth(5.0)
397
- if hue is None:
398
- l2 = ax.legend(h[int(len(ts)):],l[int(len(ts)):], title=None, loc="lower right",fontsize =fontsize,title_fontsize=fontsize)
404
+ ## hue
405
+ if hue is not None or size is not None:
406
+ # # sizes
407
+ if hue is None and size is not None:
408
+ hue_size_legend_title = size
409
+ elif hue is not None and size is None:
410
+ hue_size_legend_title = hue
411
+ else:
412
+ hue_size_legend_title = None
413
+ l2 = ax.legend(h[int(len(ts)):],l[int(len(ts)):], title=hue_size_legend_title, loc="lower right",fontsize =fontsize,title_fontsize=fontsize)
414
+
415
+ ## hue
399
416
  if len(ts)>0:
400
417
  ax.add_artist(l1)
418
+ if hue is not None or size is not None:
419
+ ax.add_artist(l2)
401
420
  #first_legend = ax.legend(handles=dots, loc="lower right" ,title=size,fontsize =fontsize,title_fontsize=fontsize)
402
421
  #ax.add_artist(first_legend)
403
422
  ##################################################################################################
@@ -780,17 +799,31 @@ def plot_power_x(
780
799
  log=Log()):
781
800
 
782
801
  #Checking columns#################################################################################################################
802
+ """
803
+ Create power cure with user-specified x axis
804
+ q mode:
805
+ N
806
+ MAF
807
+ b mode:
808
+ N_CASE
809
+ N_CONTROL
810
+ PREVALENCE
811
+ BETA
812
+ """
813
+
783
814
  log.write("Start to create power plot...", verbose=verbose)
784
815
  matplotlib.rc('font', family=font_family)
785
816
 
786
817
  log.write(" -Settings:", verbose=verbose)
787
818
  log.write(" -Mode: {}".format(mode), verbose=verbose)
819
+
788
820
  if mode == "q" :
789
821
  log.write(" -X axis: {}".format(x), verbose=verbose)
790
822
  if x!="N":
791
823
  log.write(" -N: {}".format(ns), verbose=verbose)
792
824
  if x!="MAF":
793
825
  log.write(" -MAF: {}".format(mafs), verbose=verbose)
826
+
794
827
  if mode == "b" :
795
828
  log.write(" -X axis: {}".format(x), verbose=verbose)
796
829
  if x!="N_CASE":
@@ -846,8 +879,11 @@ def plot_power_x(
846
879
  prevalence_range = np.linspace(0.01,0.99,n_matrix)
847
880
  else:
848
881
  prevalence_range = np.linspace(prevalence_range[0],prevalence_range[1],n_matrix)
849
- #configure power threshold###################################################################################################
850
882
 
883
+
884
+ #configure power threshold###################################################################################################
885
+ # for hue
886
+ # which is the variable
851
887
  if type(ns) is list:
852
888
  var_to_change = ns
853
889
  legend_title = "N"
@@ -895,12 +931,13 @@ def plot_power_x(
895
931
  ##creating power line############################################################################################
896
932
  if mode=="q":
897
933
  for i,value in enumerate(var_to_change):
898
-
934
+ # iterate through variables
899
935
  n = ns
900
936
  beta = betas
901
937
  maf = mafs
902
938
  sig_level = sig_levels
903
939
 
940
+ # update the variable
904
941
  if legend_title == "BETA":
905
942
  beta = value
906
943
  elif legend_title == "MAF":
@@ -910,7 +947,7 @@ def plot_power_x(
910
947
  elif legend_title == "Significance level":
911
948
  sig_level = value
912
949
 
913
-
950
+ # update X
914
951
  if x == "N":
915
952
  x_values = n_range
916
953
  n = x_values
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gwaslab
3
- Version: 3.6.9
3
+ Version: 3.6.10
4
4
  Summary: A collection of handy tools for GWAS SumStats
5
5
  Author-email: Yunye <gwaslab@gmail.com>
6
6
  Project-URL: Homepage, https://cloufield.github.io/gwaslab/
File without changes
File without changes
File without changes
File without changes
File without changes