Post-hoc credible-set filtering without an LD reference
Alex McCreight
2026-05-15
Source:vignettes/susie_attainable_coverage.Rmd
susie_attainable_coverage.Rmdsusie_get_cs_attainable() is a post-hoc credible-set
filter for the case when neither a genotype matrix nor an LD reference
is available, so the usual min_abs_corr purity filter in
susie_get_cs() cannot be used. It uses only the fitted
alpha matrix. For each effect, it computes an
attainable coverage, an idea introduced by SparsePro (Zhang et
al. 2023), by zeroing every entry of alpha that is not
the column maximum and then summing the rows, which gives the coverage
that effect could attain if it did not have to share probability mass
with other effects. A second filter caps the entropy of each effect’s
attainable mass, dropping effects whose mass is spread too thinly across
many variables.
Example
Fit SuSiE with a fixed prior so noise effects are not shrunken away:
fitted <- susie(X, y, L = 20,
estimate_prior_variance = FALSE,
scaled_prior_variance = 0.05,
verbose = FALSE)With the genotype matrix available, susie_get_cs()
filters by purity:
sets_purity <- susie_get_cs(fitted, X = X, coverage = 0.95)
length(sets_purity$cs)
# [1] 2Without X or Xcorr, several poorly
localized effects slip through:
sets_noLD <- suppressMessages(susie_get_cs(fitted, coverage = 0.95))
length(sets_noLD$cs)
# [1] 6
sapply(sets_noLD$cs, length)
# L1 L2 L3 L6 L8 L20
# 2 1 923 923 923 923susie_get_cs_attainable() recovers the purity-filtered
result without using X:
sets_attain <- susie_get_cs_attainable(fitted, coverage = 0.95)
# WARNING: Neither X nor Xcorr was provided; purity filtering is skipped and min_abs_corr will have no effect. Pass X or Xcorr to enable the purity filter.
length(sets_attain$cs)
# [1] 2The two filters select the same effects:
sets_purity$cs
# $L2
# [1] 653
#
# $L1
# [1] 773 777
sets_attain$cs
# $L1
# [1] 773 777
#
# $L2
# [1] 653References
Zhang, W., Najafabadi, H., Li, Y. (2023). SparsePro: An efficient fine-mapping method integrating summary statistics and functional annotations. PLOS Genetics 19, e1011104. doi:10.1371/journal.pgen.1011104.
Session information
sessionInfo()
# R version 4.4.3 (2025-02-28)
# Platform: x86_64-conda-linux-gnu
# Running under: Ubuntu 24.04.4 LTS
#
# Matrix products: default
# BLAS/LAPACK: /home/runner/work/susieR/susieR/.pixi/envs/r44/lib/libopenblasp-r0.3.33.so; LAPACK version 3.12.0
#
# locale:
# [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
# [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
# [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
# [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
#
# time zone: Etc/UTC
# tzcode source: system (glibc)
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods base
#
# other attached packages:
# [1] susieR_0.16.1
#
# loaded via a namespace (and not attached):
# [1] Matrix_1.7-5 gtable_0.3.6 jsonlite_2.0.0
# [4] compiler_4.4.3 crayon_1.5.3 Rcpp_1.1.1-1.1
# [7] jquerylib_0.1.4 systemfonts_1.3.2 scales_1.4.0
# [10] textshaping_1.0.5 yaml_2.3.12 fastmap_1.2.0
# [13] lattice_0.22-9 plyr_1.8.9 ggplot2_4.0.3
# [16] R6_2.6.1 mixsqp_0.3-54 knitr_1.51
# [19] htmlwidgets_1.6.4 desc_1.4.3 zigg_0.0.2
# [22] bslib_0.10.0 RColorBrewer_1.1-3 rlang_1.2.0
# [25] reshape_0.8.10 cachem_1.1.0 xfun_0.57
# [28] fs_2.1.0 sass_0.4.10 S7_0.2.2
# [31] RcppParallel_5.1.11-2 otel_0.2.0 cli_3.6.6
# [34] pkgdown_2.2.0 digest_0.6.39 grid_4.4.3
# [37] irlba_2.3.7 lifecycle_1.0.5 vctrs_0.7.3
# [40] Rfast_2.1.5.2 evaluate_1.0.5 glue_1.8.1
# [43] farver_2.1.2 ragg_1.5.2 rmarkdown_2.31
# [46] matrixStats_1.5.0 tools_4.4.3 htmltools_0.5.9