TWAS association testing with omnibus combination (OTTERS Stage II)
Source:R/otters.R
otters_association.RdComputes per-method TWAS z-scores using the FUSION formula and combines p-values across methods via ACAT (Aggregated Cauchy Association Test) or HMP (Harmonic Mean P-value).
Usage
otters_association(
weights,
gwas_z,
LD,
combine_method = c("acat", "hmp", "fisher", "stouffer", "invchisq", "gbj", "bj", "hc",
"ghc", "minp", "gbj_omni", "aspu", "gates")
)Arguments
- weights
Named list of weight vectors (output from
otters_weightsor any named list of numeric vectors).- gwas_z
Numeric vector of GWAS z-scores, same length and order as the weights vectors. Must be aligned to the same variants and allele orientation as the weights and LD matrix. Use
allele_qcorrss_basic_qcfor harmonization before calling this function.- LD
LD correlation matrix R, aligned to the same variants as weights and gwas_z.
- combine_method
Method to combine p-values across methods. Correlation-free (valid under arbitrary dependence):
"acat"(default),"hmp". Correlation-adjusted via poolr (generalized multivariate theory):"fisher"(Brown's method),"stouffer"(Strube's method),"invchisq". Set-based tests via GBJ (uses TWAS z-scores and inter-method correlation):"gbj","bj","hc","ghc","minp","gbj_omni". Adaptive and Simes-type tests via aSPU:"aspu"(adaptive sum of powered scores),"gates"(extended Simes / GATES). The poolr, GBJ, and aSPU methods automatically compute the inter-method TWAS z-score correlation from the weight vectors and LD matrix.
Value
A data.frame with columns:
- method
Method name (per-method rows plus a combined row).
- twas_z
TWAS z-score (
NAfor combined row).- twas_pval
TWAS p-value.
- n_snps
Number of non-zero weight SNPs used.
Details
The FUSION TWAS statistic (Gusev et al. 2016) is: $$Z_{TWAS} = \frac{w^T z}{\sqrt{w^T R w}}$$ where \(w\) are eQTL weights, \(z\) are GWAS z-scores, and \(R\) is the LD correlation matrix.
Examples
set.seed(42)
p <- 20
gwas_z <- rnorm(p)
R <- diag(p)
weights <- list(method1 = rnorm(p, sd = 0.01), method2 = rnorm(p, sd = 0.01))
otters_association(weights, gwas_z, R)
#> method twas_z twas_pval n_snps
#> 1 method1 2.2164891 0.02665802 20
#> 2 method2 0.2466401 0.80518676 20
#> 3 ACAT_combined NA 0.05998009 NA