# spinBayes

Many complex diseases are known to be affected by the interactions between genetic variants and environmental exposures beyond the main genetic and environmental effects. Existing Bayesian methods for G×E interaction studies are challenged by the high-dimensional nature of the study and the complexity of environmental influences. We have developed a novel and powerful semi-parametric Bayesian variable selection method that can accommodate linear and nonlinear G×E interactions simultaneously. Furthermore, the proposed method can conduct structural identification by distinguishing nonlinear interactions from main effects only case within Bayesian framework. Spike-and-slab priors are incorporated on both individual and group level to shrink coefficients corresponding to irrelevant main and interaction effects to zero exactly. The MCMC algorithms of the proposed and alternative methods are efficiently implemented in C++.

## How to install

- To install from github, run these two lines of code in R

```
install.packages("devtools")
devtools::install_github("jrhub/spinBayes")
```

## Examples

#### Example.1 (default method)

```
library(spinBayes)
data(gExp.L)
test = sample((1:nrow(X2)), floor(nrow(X2)/5))
spbayes=BVCfit(X2[-test,], Y2[-test,], Z2[-test,], E2[-test,], clin2[-test,])
spbayes
selected = BVSelection(spbayes)
selected
pred = predict(spbayes, X2[test,], Z2[test,], E2[test,], clin2[test,], Y2[test,])
pred$pmse
# c(pred$y.pred)
```

#### Example.2 (non-structural)

```
data(gExp.L)
test = sample((1:nrow(X2)), floor(nrow(X2)/5))
spbayes=BVCfit(X2[-test,], Y2[-test,], Z2[-test,], E2[-test,], clin2[-test,], structural=FALSE)
spbayes
selected = BVSelection(spbayes)
selected
pred = predict(spbayes, X2[test,], Z2[test,], E2[test,], clin2[test,], Y2[test,])
pred$pmse
# c(pred$y.pred)
```

#### Example.3 (non-sparse)

```
data(gExp.L)
test = sample((1:nrow(X2)), floor(nrow(X2)/5))
spbayes=BVCfit(X2[-test,], Y2[-test,], Z2[-test,], E2[-test,], clin2[-test,], structural=TRUE, sparse=FALSE)
spbayes
selected = BVSelection(spbayes)
selected
pred = predict(spbayes, X2[test,], Z2[test,], E2[test,], clin2[test,], Y2[test,])
pred$pmse
# c(pred$y.pred)
```

## Methods

This package provides implementation for methods proposed in

- Ren, J., Zhou, F., Li, X., Chen, Q., Zhang, H., Ma, S., Jiang, Y., Wu, C. (2019) Semi-parametric Bayesian variable selection for gene-environment interactions. arXiv:1906.01057