Skip to contents

This vignette demonstrates how to use the SuSiE-ash and SuSiE-inf models. We use a simulated data set with n = 1000 individuals, p = 5000 variants, and 5 simulated non-zero effects (of equal magnitude).

Data

library(susieR)
data(unmappable_data)

X <- unmappable_data$X
y <- as.vector(unmappable_data$y)
b <- unmappable_data$beta
causal <- unmappable_data$causal

plot(b, ylab = "Effect Size")

causal
# [1] 4708 2477  754 3197 2544

The causal signals are: 754, 2477, 2544, 3197, 4708.

Fitting the Three Models

SuSiE can model unmappable (polygenic) effects alongside sparse causal effects via the unmappable_effects parameter.

  • “none” (default): Standard SuSiE model
  • “inf”: SuSiE-inf model, uses an infinitesimal component to model unmappable effects
  • “ash”: SuSiE-ash model, uses adaptive shrinkage to model unmappable effects

Standard SuSiE

fit_susie <- susie(X, y, L = 10)

SuSiE-inf

fit_inf <- susie(X, y, L = 10, unmappable_effects = "inf", convergence_method = "pip")
# WARNING: Individual-level data converted to sufficient statistics for unmappable effects methods

SuSiE-ash

fit_ash <- susie(X, y, L = 10, unmappable_effects = "ash", convergence_method = "pip")
# WARNING: Individual-level data converted to sufficient statistics for unmappable effects methods
# Mr.ASH terminated at iteration 293.
# Mr.ASH terminated at iteration 274.

Comparing Results

Credible Sets

The three methods identify different numbers of credible sets:

cat("SuSiE (standard):", length(fit_susie$sets$cs), "credible sets\n")
# SuSiE (standard): 4 credible sets
cat("SuSiE-inf:", length(fit_inf$sets$cs), "credible sets\n")
# SuSiE-inf: 2 credible sets
cat("SuSiE-ash:", length(fit_ash$sets$cs), "credible sets\n")
# SuSiE-ash: 4 credible sets

We can check which credible sets contain true causal signals:

check_cs <- function(fit, name) {
  cat(name, ":\n")
  for (i in seq_along(fit$sets$cs)) {
    cs <- fit$sets$cs[[i]]
    in_causal <- any(cs %in% causal)
    cat("  CS", i, ": size=", length(cs),
        ", contains causal=", in_causal, "\n")
  }
}

check_cs(fit_susie, "SuSiE")
# SuSiE :
#   CS 1 : size= 1 , contains causal= TRUE 
#   CS 2 : size= 1 , contains causal= TRUE 
#   CS 3 : size= 3 , contains causal= TRUE 
#   CS 4 : size= 36 , contains causal= FALSE
check_cs(fit_inf, "SuSiE-inf")
# SuSiE-inf :
#   CS 1 : size= 3 , contains causal= TRUE 
#   CS 2 : size= 36 , contains causal= FALSE
check_cs(fit_ash, "SuSiE-ash")
# SuSiE-ash :
#   CS 1 : size= 1 , contains causal= TRUE 
#   CS 2 : size= 1 , contains causal= TRUE 
#   CS 3 : size= 3 , contains causal= TRUE 
#   CS 4 : size= 36 , contains causal= TRUE

PIP Comparison

Standard SuSiE identifies 4 credible sets, but one (light blue) does not contain the true causal variant. This is a false positive in a high-LD region where the causal signal is narrowly missed.

susie_plot(fit_susie, y = "PIP", b = b, main = "SuSiE (standard)")

SuSiE-inf is more conservative, finding only 2 credible sets. Both contain true causal variants, but it misses 3 of the 5 causal signals.

susie_plot(fit_inf, y = "PIP", b = b, main = "SuSiE-inf")

SuSiE-ash finds 4 credible sets, all containing true causal variants. It successfully retains the causal signal in the high-LD region that standard SuSiE missed.

susie_plot(fit_ash, y = "PIP", b = b, main = "SuSiE-ash")

Session Information

sessionInfo()
# R version 4.4.3 (2025-02-28)
# Platform: x86_64-conda-linux-gnu
# Running under: Ubuntu 24.04.3 LTS
# 
# Matrix products: default
# BLAS/LAPACK: /home/runner/work/susieR/susieR/.pixi/envs/r44/lib/libopenblasp-r0.3.30.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.14.51
# 
# loaded via a namespace (and not attached):
#  [1] Matrix_1.7-4          gtable_0.3.6          jsonlite_2.0.0       
#  [4] compiler_4.4.3        crayon_1.5.3          Rcpp_1.1.0           
#  [7] mr.ash.alpha_0.1-43   jquerylib_0.1.4       systemfonts_1.3.1    
# [10] scales_1.4.0          textshaping_1.0.4     yaml_2.3.11          
# [13] fastmap_1.2.0         lattice_0.22-7        plyr_1.8.9           
# [16] ggplot2_4.0.1         R6_2.6.1              mixsqp_0.3-54        
# [19] knitr_1.50            htmlwidgets_1.6.4     zigg_0.0.2           
# [22] desc_1.4.3            bslib_0.9.0           RColorBrewer_1.1-3   
# [25] rlang_1.1.6           cachem_1.1.0          reshape_0.8.10       
# [28] xfun_0.54             fs_1.6.6              sass_0.4.10          
# [31] S7_0.2.1              RcppParallel_5.1.11-1 cli_3.6.5            
# [34] pkgdown_2.2.0         digest_0.6.39         grid_4.4.3           
# [37] irlba_2.3.5.1         lifecycle_1.0.4       vctrs_0.6.5          
# [40] Rfast_2.1.5.2         evaluate_1.0.5        glue_1.8.0           
# [43] farver_2.1.2          ragg_1.5.0            rmarkdown_2.30       
# [46] matrixStats_1.5.0     tools_4.4.3           htmltools_0.5.9