MiST: set-based mixed effects score test for genetic association analysis

Yu-Ru Su

2019-11-01

This is an illustration for using the package MiST to implement set-based genetic association test under mixed effects models. To form the input data, make sure that the columns of the data are arranged in the following order [Y X G], where Y is an outcome variable, X is a matrix of confounder(s), and G is a matrix of genotype(s). MiST allows for multiple confounders (dimension is specified by option d), and multiple variants (dimension is specified by option p).

Several R packages are called in MiST and should be installed beforehand. These include:

The main function to implement the set-based test is MiST. The required inputs include:

Other options to customize the analysis are available, including

The references for the methods are:

The following is an example of having simple burden score (weight being 1’s for all variants) and variance component test in MiST.

library(MiSTi)

# Y: binary outcome variable. a vector of length n.
# X: d confounders, either a nx1 vector or nxd matrix if d>1.
# G: genotypes of varaints. a n*p matrix.

# Data generation
n = 2000
set.seed(1234)
X = rbinom(n,size=1,prob=0.5)
MAF = runif(10,min=0.001,max=0.01)
G = sapply(MAF,function(maf) rbinom(n,size=1,prob=maf))
eta = X*0.5 + G%*%rnorm(10,mean=0,sd=0.5) 
Y = rbinom(n,size=1,prob=exp(eta)/(1+exp(eta)))
d = 1
p = 10

data = data.frame(Y=Y, X=X,G=G)
mist = MiST(data = data,
              outcome_type = "Binary",
              d = d,
              p = p,
              R = 1,
              weight_method = "User"
)
print(mist)

If a functional annotation for the genetic variants is available, one can incorporate the functional annotation into the set-based test. Below is the sample code.

# FA: a vector of length p containing functional annotation for variants in consideration.

FA = runif(p)
mist.FAOnly = MiST(data = data,
                     outcome_type = "Binary",
                     d = d,
                     p = p,
                     R = 1,
                     weight_method = "User",
                     user_weight = FA
)

If the user would like to jointly test the effects of two weighted burden scores (e.g., a vector of 1’s and functional annotation), the sample code is shown below. In this case, the p-value of the joint effects of the two burden scores and their individual p-values after adjusting for the presence of each other will be returned by default.

mist.2burdens = MiST(data = data,
                       outcome_type = "Binary",
                       d = d,
                       p = p,
                       m = 1,
                       R = 2,
                       weight_method = "User",
                       user_weight = cbind(rep(1,p),FA)
)