Skip to contents

This vignette runs a formal colocalization analysis on a pair of SuSiE-suite fine-mapping fits using coloc::coloc.susie(). The recipe applies to any pair of susie-class fits — susieR::susie(), mfsusieR::fsusie(), mfsusieR::mfsusie(), mvsusieR::mvsusie(), and susieR::susie_rss() — because each returns the (class = "susie", $sets$cs_index, $lbf_variable) triple that coloc.susie() reads. susie_rss() is particularly useful for GWAS summary-statistics fine-mapping fits.

For pre-fit covariate adjustment, see the covariates vignette.

For illustration we use fsusie() (single-outcome functional fine-mapping); mfsusie() works the same way and is the natural choice when both fits cover multiple outcomes.

Data

data(N3finemapping)
X <- N3finemapping$X[, seq_len(150)]
n <- nrow(X); p <- ncol(X); T_m <- 64
colnames(X) <- paste0("SNP", seq_len(p))
positions <- seq_len(T_m)
shape  <- exp(-((positions - T_m / 2)^2) / (2 * (T_m / 6)^2))
beta1  <- matrix(0, p, T_m); beta1[42, ] <- 1.2 * shape
beta2  <- matrix(0, p, T_m); beta2[42, ] <- 0.9 * shape         # shared causal
beta3  <- matrix(0, p, T_m); beta3[88, ] <- 0.9 * shape         # distinct
Y1 <- X %*% beta1 + matrix(rnorm(n * T_m, sd = 0.4), n)
Y2 <- X %*% beta2 + matrix(rnorm(n * T_m, sd = 0.4), n)
Y3 <- X %*% beta3 + matrix(rnorm(n * T_m, sd = 0.4), n)

Fine-mapping

fit1 <- fsusie(Y1, X, pos = positions, verbose = FALSE)
fit2 <- fsusie(Y2, X, pos = positions, verbose = FALSE)
fit3 <- fsusie(Y3, X, pos = positions, verbose = FALSE)

Colocalization

coloc::coloc.susie() reads the credible-set indices from fit$sets$cs_index and the per-effect log-Bayes-factor matrix from fit$lbf_variable. Both are populated by fsusie() / mfsusie() on the standard fit path, so the call is a one- liner per pair. The returned $summary table reports the posterior probabilities of five hypotheses for each pair of credible sets:

meaning
PP.H0.abf no causal in either trait
PP.H1.abf causal in trait 1 only
PP.H2.abf causal in trait 2 only
PP.H3.abf causal in both, but at distinct variants
PP.H4.abf shared causal variant

hit1 and hit2 name the lead variant in each fit; idx1 and idx2 are the credible-set indices being compared.

Shared causal signals

fit1 and fit2 were simulated with the same causal SNP at SNP42. The coloc summary should put nearly all posterior mass on PP.H4 (shared causal):

res_shared <- tryCatch(coloc::coloc.susie(fit1, fit2), error = function(e) list())
res_shared$summary

PP.H4.abf is essentially 1 and hit1 == hit2 == SNP42, matching the simulation.

Distinct causal signals

fit1 carries a signal at SNP42; fit3 carries one at SNP88. The coloc summary should put posterior mass on PP.H3 (both have a causal, but at different variants):

res_distinct <- tryCatch(coloc::coloc.susie(fit1, fit3), error = function(e) list())
res_distinct$summary

PP.H3.abf is essentially 1, with hit1 = SNP42 and hit2 = SNP88.

Notes

  • This vignette assumes the user already has a pair of fine-mapping fits, possibly from different SuSiE Suite packages, and wants to test for colocalization between them. The natural alternative when subject-level data is available for all outcomes is to run mfsusie() jointly across them; the multi-outcome fit shares signal across modalities and identifies per-outcome and shared credible sets in one pass without a post-hoc combination step. coloc.susie() becomes essential when one or more inputs are summary-statistics fits (e.g., a GWAS susie_rss() fit colocalized against a molecular-QTL fsusie() fit), where the underlying individual-level data is not available.
  • Joint mfsusie() fine-mapping that takes summary statistics from a GWAS as one of its outcomes is future work.
  • For multi-outcome colocalization across more than two outcomes, see the multi-outcome intro, which fits all outcomes jointly and avoids the post-hoc combine. The disadvantage is that it would subject to mfSuSiE modeling assumptions and not as modular as integrating SuSiE Suite fits.

Session info

This is the version of R and the packages that were used to generate these results.

## 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/mfsusieR/mfsusieR/.pixi/envs/r44/lib/libopenblasp-r0.3.32.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  mfsusieR_0.0.2
## 
## loaded via a namespace (and not attached):
##  [1] viridis_0.6.5         sass_0.4.10           generics_0.1.4       
##  [4] ashr_2.2-63           lattice_0.22-9        magrittr_2.0.5       
##  [7] digest_0.6.39         evaluate_1.0.5        grid_4.4.3           
## [10] RColorBrewer_1.1-3    fastmap_1.2.0         plyr_1.8.9           
## [13] jsonlite_2.0.0        Matrix_1.7-5          reshape_0.8.10       
## [16] gridExtra_2.3         mixsqp_0.3-54         viridisLite_0.4.3    
## [19] scales_1.4.0          truncnorm_1.0-9       invgamma_1.2         
## [22] textshaping_1.0.5     jquerylib_0.1.4       cli_3.6.6            
## [25] rlang_1.2.0           zigg_0.0.2            crayon_1.5.3         
## [28] LaplacesDemon_16.1.8  cachem_1.1.0          yaml_2.3.12          
## [31] otel_0.2.0            coloc_5.2.3           tools_4.4.3          
## [34] SQUAREM_2026.1        parallel_4.4.3        dplyr_1.2.1          
## [37] wavethresh_4.7.3      ggplot2_4.0.3         Rfast_2.1.5.2        
## [40] vctrs_0.7.3           R6_2.6.1              matrixStats_1.5.0    
## [43] lifecycle_1.0.5       fs_2.1.0              htmlwidgets_1.6.4    
## [46] MASS_7.3-65           ragg_1.5.2            irlba_2.3.7          
## [49] pkgconfig_2.0.3       desc_1.4.3            pillar_1.11.1        
## [52] pkgdown_2.2.0         RcppParallel_5.1.11-2 bslib_0.10.0         
## [55] gtable_0.3.6          data.table_1.17.8     glue_1.8.1           
## [58] Rcpp_1.1.1-1.1        systemfonts_1.3.2     tidyselect_1.2.1     
## [61] tibble_3.3.1          xfun_0.57             knitr_1.51           
## [64] dichromat_2.0-0.1     farver_2.1.2          htmltools_0.5.9      
## [67] rmarkdown_2.31        compiler_4.4.3        S7_0.2.2