## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup, include = FALSE---------------------------------------------------
library(GxEScanR)
library(BinaryDosage)

## ----genetic-data-convert, eval = FALSE---------------------------------------
# vcffile <- system.file("extdata", "gendata.vcf.gz", package = "GxEScanR")
# 
# exampledir <- tempdir()
# bdosefile <- file.path(exampledir, "gendata.bdose")
# 
# BinaryDosage::vcftobd(vcffile = vcffile, bdose_file = bdosefile)
# bdinfo <- BinaryDosage::getbdinfo(bdosefile)

## ----genetic-data-------------------------------------------------------------
bdosefile <- system.file("extdata", "gendata.bdose", package = "GxEScanR")
bdinfo <- BinaryDosage::getbdinfo(bdosefile)
exampledir <- tempdir()

## ----subject-data-------------------------------------------------------------
subjectfile <- system.file("extdata", "subdata.rds", package = "GxEScanR")
subjectdata <- readRDS(subjectfile)
head(subjectdata)

## ----linear-model-------------------------------------------------------------
# Remove y_logistic from the subject data
lineardata <- subjectdata[, c(1, 2, 4, 5)]

# Keep only subjects with complete data
lineardata <- lineardata[complete.cases(lineardata), ]

# Keep only subjects with genetic data
lineardata <- lineardata[lineardata$subid %in% bdinfo$samples$sid, ]

# Fit the linear model
linearmodel <- glm(y_linear ~ x2 + x1, data = lineardata)

## ----logistic-model-----------------------------------------------------------
# Remove y_linear from the subject data
logisticdata <- subjectdata[, c(1, 3, 4, 5)]

# Keep only subjects with complete data
logisticdata <- logisticdata[complete.cases(logisticdata), ]

# Keep only subjects with genetic data
logisticdata <- logisticdata[logisticdata$subid %in% bdinfo$samples$sid, ]

# Fit the logistic model
logisticmodel <- glm(y_logistic ~ x2 + x1, family = binomial, data = logisticdata)

## ----allocate-memory----------------------------------------------------------
# Continuous outcome
linearmem <- gweis.mem(gemdl = linearmodel,
                       subids = lineardata$subid,
                       tests = c("bg_ge", "bg_gxe", "bgxe", "joint"))

# Dichotomous outcome
logisticmem <- gweis.mem(gemdl = logisticmodel,
                         subids = logisticdata$subid,
                         tests = c("bg_ge", "bg_gxe", "bgxe", "joint",
                                   "bg_eg", "bg_case", "bg_ctrl"))

## ----run-gweis----------------------------------------------------------------
snpindex <- 1:nrow(bdinfo$snps)

# Continuous outcome
linearresults <- file.path(exampledir, "linear.txt")
rungweis(gweismem = linearmem,
         bdinfo = bdinfo,
         snps = snpindex,
         outfilename = linearresults)

# Dichotomous outcome
logisticresults <- file.path(exampledir, "logistic.txt")
rungweis(gweismem = logisticmem,
         bdinfo = bdinfo,
         snps = snpindex,
         outfilename = logisticresults)

## ----read-results-------------------------------------------------------------
lineardf <- read.table(linearresults, header = TRUE, sep = "\t")
logisticdf <- read.table(logisticresults, header = TRUE, sep = "\t")

## ----snp-info-linear----------------------------------------------------------
knitr::kable(lineardf[1:3, 1:6], caption = "SNP information — continuous outcome")

## ----snp-info-logistic--------------------------------------------------------
knitr::kable(logisticdf[1:3, 1:8], caption = "SNP information — dichotomous outcome")

## ----model1-output------------------------------------------------------------
knitr::kable(lineardf[1:3, 7:8], caption = "Model 1 results")

## ----model2-output------------------------------------------------------------
knitr::kable(lineardf[1:3, 9:13], caption = "Model 2 results")

## ----model3-5-output----------------------------------------------------------
knitr::kable(logisticdf[1:3, 16:21], caption = "Models 3-5 results")

