The lit
package implements a kernel-based multivariate
testing procedure, called Latent Interaction Testing (LIT), to test for
latent genetic interactions in genome-wide association studies. See our
manuscript for additional details:
Bass AJ, Bian S, Wingo AP, Wingo TS, Culter DJ, Epstein MP. Identifying latent genetic interactions in genome-wide association studies using multiple traits. Submitted; 2023.
install.packages("devtools")
library("devtools")
# install package
::install_github("ajbass/lit") devtools
The vignette can be viewed by typing:
browseVignettes(package = "lit")
We provide two ways to use the lit
package. For small
GWAS datasets where the genotypes can be loaded in R, the
lit()
function can be used:
library(lit)
# set seed
set.seed(123)
# generate SNPs and traits
<- matrix(rbinom(10 * 10, size = 2, prob = 0.25), ncol = 10)
X <- matrix(rnorm(10 * 4), ncol = 4)
Y
# test for latent genetic interactions
<- lit(Y, X)
out head(out)
#> wlit ulit alit
#> 1 0.2681410 0.3504852 0.3056363
#> 2 0.7773637 0.3504852 0.6044655
#> 3 0.4034423 0.3504852 0.3760632
#> 4 0.7874949 0.3504852 0.6157108
#> 5 0.8701189 0.3504852 0.7337565
#> 6 0.2352616 0.3504852 0.2847600
The output is a data frame of p-values where the rows are SNPs and
the columns are different implementations of LIT to test for latent
genetic interactions: the first column (wlit
) uses a linear
kernel, the second column (ulit
) uses a projection kernel,
and the third column (alit
) maximizes the number of
discoveries by combining the p-values of the linear and projection
kernels.
For large GWAS datasets (e.g., biobank-sized), the lit()
function is not computationally feasible. Instead, the
lit_plink()
function can be applied directly to plink
files. To demonstrate how to use the function, we use the example plink
files from the genio
package:
# load genio package
library(genio)
# path to plink files
<- system.file("extdata", 'sample.bed', package = "genio", mustWork = TRUE)
file
# generate trait expression
<- matrix(rnorm(10 * 4), ncol = 4)
Y
# apply lit to plink file
<- lit_plink(Y, file = file, verbose = FALSE)
out head(out)
#> chr id pos alt ref maf wlit ulit alit
#> 1 1 rs3094315 752566 G A 0.3888889 0.7908763 0.3422960 0.6150572
#> 2 1 rs7419119 842013 T G 0.3888889 0.1552580 0.3422960 0.2194972
#> 3 1 rs13302957 891021 G A 0.2500000 0.4088937 0.3325939 0.3687589
#> 4 1 rs6696609 903426 C T 0.3125000 0.5857829 0.3325939 0.4519475
#> 5 1 rs8997 949654 A G 0.4375000 0.6628300 0.3325939 0.4969663
#> 6 1 rs9442372 1018704 A G 0.2500000 0.3192430 0.3325939 0.3258332
See ?lit
and ?lit_plink
for additional
details and input arguments.
Note that a marginal testing procedure for latent genetic
interactions based on the squared residuals and cross products (Marginal
(SQ/CP)) can also be implemented using the marginal
and
marginal_plink
functions:
# apply Marginal (SQ/CP) to loaded genotypes
<- marginal(Y, X)
out
# apply Marginal (SQ/CP) to plink file
<- marginal_plink(Y, file = file, verbose = FALSE) out