Fine-Mapping Tool Requirements¶
Use this page when you are deciding whether a prepared locus has enough data for a specific fine-mapping tool.
Short Version¶
| Tool | Input mode | LD needed by method | Extra software | Notes |
|---|---|---|---|---|
abf |
single input | no | none | ABF assumes one causal signal; CLI still expects LD files when loading from loci_list.txt. |
abf_cojo |
single input | yes | none | Uses COJO-style conditioning before ABF. |
susie |
single input | yes | none | Good default for most first-pass runs. |
susie_ash |
single input | yes | Rscript, susieR >= 0.16.1 |
SuSiE with adaptive-shrinkage background. |
susie_inf |
single input | yes | Rscript, susieR >= 0.16.1 |
SuSiE with infinitesimal background. |
finemap |
single input | yes | finemap executable |
Requires MAF; has a per-locus timeout. |
rsparsepro |
single input | yes | none | Robust sparse model for LD mismatch sensitivity checks. |
carma |
single input | yes | Rscript, CARMA |
Includes CARMA outlier modeling. |
multisusie |
multi input | yes | none | Joint multi-population SuSiE-style model. |
susiex |
multi input | yes | SuSiEx executable |
Cross-ancestry fine-mapping wrapper. |
mesusie |
multi input | yes | Rscript, MESuSiE |
Joint multi-ancestry model with shared and ancestry-specific signals. |
Single input versus multi input
Single-input tools run once per row in a locus set and CREDTOOLS combines
the results. Multi-input tools analyze all rows for the same locus_id
together.
Required Columns¶
All CLI fine-mapping workflows start from loci_list.txt:
Each prefix should resolve to:
The summary statistics should contain:
| Column | Used for |
|---|---|
SNPID |
matching summary statistics to LD |
CHR, BP |
location and plotting |
EA, NEA |
allele alignment |
EAF |
allele-frequency checks and derived MAF |
MAF |
required by FINEMAP; usually derived from EAF when loaded |
BETA, SE, P |
all fine-mapping models |
N |
useful in prepared files; CLI also uses sample_size from loci_list.txt |
RSID |
optional reporting field |
No-Signal Behavior¶
Most single-input wrappers check --significant-threshold before running the
model. If no variant passes the threshold, CREDTOOLS returns an empty result
instead of forcing a weak credible set.
An empty result usually has:
n_cs = 0PIP = 0for every variant- no rows in
causal_variants.txt.gz
If that is not what you want, loosen --significant-threshold for exploratory
runs and label the output accordingly.
Convergence Options¶
Iterative tools expose --max-iter and convergence tolerance options. When a
fixed signal cap is hard to choose, use adaptive L.
Adaptive L (--adaptive-max-causal)¶
L is the model's cap on the number of causal signals. In the CREDTOOLS CLI,
this is exposed as --max-causal; in the Python API, it is the max_causal
argument. Adaptive L does not change the fine-mapping model itself. It is a
retry strategy around the selected tool that changes max_causal when the
current value looks too small or too hard for the model to fit.
Use it when loci have variable signal counts or when some high-L runs fail to converge:
The starting value is the effective max_causal: the requested --max-causal,
or the COJO-derived value when --set-L-by-cojo is enabled.
flowchart TD
A["Start with effective L"] --> B["Run fine-mapping tool"]
B --> C{"Run failed?"}
C -- "yes" --> H{"Smaller L left?"}
C -- "no" --> D["Apply purity filter<br/>if --purity > 0"]
D --> E{"0 < n_cs < L?"}
E -- "yes" --> F["Accept result"]
E -- "no" --> G{"n_cs >= L?"}
G -- "yes" --> I["Increase L by 5<br/>and retry while within cap"]
I --> B
G -- "no: n_cs = 0" --> H
H -- "yes" --> J["Run next smaller L"]
J --> K{"Non-converged empty result?"}
K -- "yes" --> H
K -- "no" --> F
H -- "no" --> M["Return empty result<br/>adaptive_failed = true"]
The loop uses these rules:
| Situation | Adaptive action |
|---|---|
0 < n_cs < L |
Accept the result. The model found credible sets without filling all available signal slots. |
n_cs >= L |
Treat the run as saturated. Increase L by 5 and retry while the high-L guard allows it. |
| The tool raises an error | Enter the decrease phase and try smaller values of L. |
The wrapper returns n_cs = 0 with converged = False |
Treat this as retryable non-convergence and keep decreasing L. |
| A smaller-L run returns any non-retryable result | Accept it, including a converged no-signal result with n_cs = 0. |
| Every attempted value fails or stays non-converged | Return an empty credible set with parameters.adaptive_failed = true. |
The increase branch is deliberately bounded rather than exhaustive. In the
current implementation, CREDTOOLS adds 5 while the current L is at or below
20, so the default L = 5 path can visit 10, 15, 20, and a final
guard-edge attempt at 25 if the L = 20 run is still saturated. If you need a
strict scientific cap, use a fixed --max-causal without adaptive L.
When --adaptive-max-causal is enabled, CREDTOOLS also defaults
empty_on_nonconvergence=True for wrappers that support it. This makes
non-converged runs return an empty result marked converged = False, so the
adaptive loop can keep reducing L instead of accepting unstable partial
credible sets.
Purity filtering is applied inside the adaptive loop when --purity is set.
That means the loop makes success and saturation decisions using the
post-filter n_cs, so low-purity credible sets do not force L upward.
Adaptive L applies to finemap, rsparsepro, susie, susie_ash, and
susie_inf per input locus. It applies to multisusie, susiex, and
mesusie once at the LocusSet level.
For SuSiEx, keep --mult-step off when using --adaptive-max-causal; both
features try to refine the model and can make debugging harder.
Choosing the First Tool¶
Start with:
Then compare a smaller set of important loci with another tool:
credtools finemap important_loci.txt results_finemap \
--tool finemap \
--max-causal 5 \
--timeout-minutes 30
Use comparison runs to answer a specific question, such as whether a top credible set is stable under a different model.