sLDSC Postprocessing Pipeline
Source:R/sldscPostprocessingPipeline.R
sldscPostprocessingPipeline.RdPostprocess polyfun's per-trait sLDSC outputs (already loaded
into an SldscData object) into a single results object with
per-trait tau*, EnrichStat with back-solved jackknife SE, and a
DerSimonian-Laird random-effects meta-analysis across traits. All file I/O
is done up front by the reader functions (readSldscAnnot,
readSldscFrq, readSldscTrait); this pipeline is
pure computation over the in-memory SldscData.
Usage
sldscPostprocessingPipeline(
sldscData,
mafCutoff = 0.05,
targetCategories = NULL,
targetLabels = NULL
)Arguments
- sldscData
An
SldscDataobject bundling the annotation table, the reference-panel allele frequencies, and the per-trait single/joint polyfun runs.- mafCutoff
Numeric MAF cutoff applied via the object's frq table. Default
0.05. Set to0to opt out (requires frq data when> 0).- targetCategories
Optional character vector of target annotation names to retain. Auto-detected from the joint run (or first single run) when
NULL.- targetLabels
Optional display names, same length / order as
targetCategories, applied to every output column / tau* block colname.
Value
A list with per_trait (per-trait standardised tables), meta
tables (tauStar, enrichment, enrichstat), and a
params record of the call options.
Examples
mkRun <- function(cats) {
n <- length(cats)
list(categories = cats, tau = setNames(rep(1e-7, n), cats),
tauSe = setNames(rep(3e-8, n), cats),
enrichment = setNames(rep(2, n), cats),
enrichmentSe = setNames(rep(0.4, n), cats),
enrichmentP = setNames(rep(0.01, n), cats),
propH2 = setNames(rep(0.2, n), cats),
propSnps = setNames(rep(0.1, n), cats), h2g = 0.3,
tauBlocks = matrix(1e-7, 10, n, dimnames = list(NULL, cats)),
nBlocks = 10L)
annot <- data.frame(CHR = c(1, 1, 1, 2, 2, 2), SNP = paste0("rs", 1:6),
annot_A = c(1, 0, 1, 0, 1, 0), annot_B = c(2.1, 1.8, 2.5, 1.9, 2.3, 2))
frq <- data.frame(CHR = c(1, 1, 1, 2, 2, 2), SNP = paste0("rs", 1:6),
MAF = rep(0.2, 6))
mkTrait <- function() {
list(single = list(mkRun(c("annot_A_0", "baselineLD_0")),
mkRun(c("annot_B_0", "baselineLD_0"))),
joint = mkRun(c("annot_A_0", "annot_B_0", "baselineLD_0")))
}
traits <- setNames(list(mkTrait(), mkTrait()), c("traitX", "traitY"))
sd <- SldscData(annot = annot, frq = frq, traits = traits)
sldscPostprocessingPipeline(sldscData = sd)
}