The `lit`

package implements a flexible kernel-based
multivariate testing procedure, called Latent Interaction Testing (LIT),
to detect latent genetic interactions in a genome-wide association
study. In a standard GWAS analysis, one typically attempts to determine
which SNPs are associated with one (or many) traits. Another important
question is

- Do any SNPs demonstrate any interactive effects, e.g., gene-by-gene or gene-by-environment interactions?

This question has been very difficult to answer because effect sizes of interactions are likely small, interactive variables are unknown, and there’s often a large multiple testing burden from testing many candidate interactive variables.

One way to help address some of these issues is to use a variance-based testing procedure which does not require the interactive variable(s) to be specified or observed. These procedures can detect any unequal residual trait variation among genotype categories at a specific SNP (i.e., heteroskedasticity), which could suggest an unobserved (or latent) genetic interaction. However, researchers apply such procedures on a trait-by-trait basis and ignore any biological pleiotropy among traits. In fact, it is simple to show that a latent genetic interaction not only induces a variance effect but also a covariance effect between traits, and these covariance patterns can be harnessed to improve the statistical power.

The `lit`

package addresses this gap by leveraging both
the differential variance *and* differential covariance patterns
to substantially increase power to detect latent genetic interactions in
a GWAS. In particular, LIT assesses whether the trait
variances/covariances vary as a function of genotype using a
kernel-based distance covariance (KDC) framework. LIT often provides
substantial increases in power compared to trait-by-trait univariate
approaches, in part because LIT uses shared information (i.e.,
pleiotropy) across tests and does not require a multiple testing
correction which negatively impacts power.

Note that this package contains the core functionality for the methods described in

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.

Additional software features will be added in the future.

```
# install development version of package
install.packages("devtools")
library("devtools")
::install_github("ajbass/lit") devtools
```

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
```