From 4ccab8252fe95ffbee68571f75ec6c06b2872ab8 Mon Sep 17 00:00:00 2001 From: Julian Stamp Date: Mon, 6 Jan 2025 19:29:37 +0100 Subject: [PATCH] rename package to SME (#1) --- .Rbuildignore | 2 +- .gitignore | 2 +- DESCRIPTION | 18 ++-- LICENSE.md | 2 +- NAMESPACE | 4 +- NEWS.md | 4 +- R/RcppExports.R | 22 ++-- R/approximate_memory_requirements.R | 40 +++---- R/catch-routine-registration.R | 2 +- R/getting_started.R | 48 ++++----- R/simulate_traits.R | 14 +-- R/{mme.R => sme.R} | 70 ++++++------- README.Rmd | 60 +++++------ README.md | 16 +-- _pkgdown.yml | 8 +- data-raw/getting_started.R | 4 +- inst/logo/logo.R | 2 +- inst/profiling/local/compile-runner.sh | 4 +- inst/profiling/local/runner.cpp | 4 +- inst/profiling/oscar/compile-runner.sh | 4 +- inst/profiling/oscar/runner.cpp | 4 +- inst/profiling/profiling.R | 4 +- man/approximate_memory_requirements.Rd | 16 +-- man/figures/README-logo.png | Bin 113172 -> 51378 bytes man/figures/logo.png | Bin 25448 -> 51378 bytes .../{mme-runtime.png => sme-runtime.png} | Bin ...chematic-dhs.png => sme-schematic-dhs.png} | Bin ...hattan.png => sme-schematic-manhattan.png} | Bin ...{mme-shared-rvs.png => sme-shared-rvs.png} | Bin man/getting_started.Rd | 8 +- man/simulate_traits.Rd | 2 +- man/{mme.Rd => sme.Rd} | 20 ++-- src/RcppExports.cpp | 74 ++++++------- src/allocate_memory.h | 8 +- src/computation.h | 2 +- src/compute_covariance_q.h | 8 +- src/compute_mom_components.h | 8 +- src/genotype.h | 2 +- src/initialize_random_vectors.h | 8 +- src/read_covariates.h | 2 +- src/read_genotype_mask.h | 2 +- src/read_genotypes.h | 2 +- src/read_phenotypes.h | 2 +- src/simulate_traits.cpp | 2 +- src/simulate_traits.h | 6 +- src/{mme.cpp => sme.cpp} | 20 ++-- src/{mme.h => sme.h} | 2 +- src/testing_utils.cpp | 2 +- src/testing_utils.h | 8 +- tests/testthat.R | 4 +- tests/testthat/test-cpp.R | 4 +- tests/testthat/test-mme.R | 44 ++++---- tests/testthat/test-simulate_traits.R | 6 +- vignettes/{mmer.Rmd => sme.Rmd} | 98 +++++++++--------- .../study-erythroid-differentiation-data.Rmd | 56 +++++----- vignettes/tutorial-cite-us.Rmd | 16 +-- vignettes/tutorial-create-mask-file.Rmd | 20 ++-- vignettes/tutorial-memory-optimization.Rmd | 46 ++++---- vignettes/tutorial-simulate-traits.Rmd | 10 +- 59 files changed, 423 insertions(+), 423 deletions(-) rename R/{mme.R => sme.R} (92%) rename man/figures/{mme-runtime.png => sme-runtime.png} (100%) rename man/figures/{mme-schematic-dhs.png => sme-schematic-dhs.png} (100%) rename man/figures/{mme-schematic-manhattan.png => sme-schematic-manhattan.png} (100%) rename man/figures/{mme-shared-rvs.png => sme-shared-rvs.png} (100%) rename man/{mme.Rd => sme.Rd} (96%) rename src/{mme.cpp => sme.cpp} (97%) rename src/{mme.h => sme.h} (93%) rename vignettes/{mmer.Rmd => sme.Rmd} (75%) diff --git a/.Rbuildignore b/.Rbuildignore index c737db0..dcfe1b9 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,4 +1,4 @@ -^mmer\.Rproj$ +^sme\.Rproj$ ^\.Rproj\.user$ ^LICENSE\.md$ ^Makefile$ diff --git a/.gitignore b/.gitignore index 20611bf..4e1cad4 100644 --- a/.gitignore +++ b/.gitignore @@ -48,7 +48,7 @@ po/*~ # RStudio Connect folder rsconnect/ .Rproj.user -mmer.Rproj +sme.Rproj .idea/ diff --git a/DESCRIPTION b/DESCRIPTION index 465cf2a..06324e9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,14 +1,14 @@ -Package: mmer -Title: The Multimodal Marginal Epistasis Test +Package: sme +Title: The Sparse Marginal Epistasis Test Version: 0.0.1 -URL: https://github.com/lcrawlab/mmer, https://lcrawlab.github.io/mmer/ -BugReports: https://github.com/lcrawlab/mmer/issues +URL: https://github.com/lcrawlab/sme, https://lcrawlab.github.io/sme/ +BugReports: https://github.com/lcrawlab/sme/issues Authors@R: c( person("Julian", "Stamp", email = "julian.d.stamp@gmail.com", role = c("cre", "aut"), comment = c(ORCID = "0000-0003-3014-6249")), person("Lorin", "Crawford", email = "lcrawford@microsoft.com", role = "aut", comment = c(ORCID = "0000-0003-0178-8242"))) -Description: A computationally efficient genetics method which detects +Description: A computationally efficient genetics method which detects statistical epistasis in complex traits. License: MIT + file LICENSE Encoding: UTF-8 @@ -20,7 +20,7 @@ LinkingTo: RcppEigen, Rhdf5lib, testthat -Imports: +Imports: dplyr, genio, logging, @@ -28,7 +28,7 @@ Imports: Rcpp, RcppEigen, tidyr -Suggests: +Suggests: GenomicRanges, ggplot2, knitr, @@ -38,10 +38,10 @@ Suggests: Config/testthat/edition: 3 SystemRequirements: GNU make VignetteBuilder: knitr -Depends: +Depends: R (>= 4.4.0) LazyData: true -biocViews: +biocViews: GenomeWideAssociation, Epistasis, Genetics, diff --git a/LICENSE.md b/LICENSE.md index d65fe84..978b576 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # MIT License -Copyright (c) 2024 mmer authors +Copyright (c) 2024 sme authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/NAMESPACE b/NAMESPACE index e1d04f9..3361a70 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,9 +2,9 @@ export(approximate_memory_requirements) export(create_hdf5_file) -export(mme) export(read_hdf5_dataset) export(simulate_traits) +export(sme) export(write_hdf5_dataset) import(Rcpp) import(RcppEigen) @@ -15,4 +15,4 @@ importFrom(stats,pnorm) importFrom(tidyr,pivot_longer) importFrom(utils,read.delim) importFrom(utils,write.table) -useDynLib(mmer) +useDynLib(sme) diff --git a/NEWS.md b/NEWS.md index 3e28cb4..625573e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# mmer 0.0.1 +# sme 0.0.1 -* Version that was used in the publication of MME. +* Version that was used in the publication of SME. diff --git a/R/RcppExports.R b/R/RcppExports.R index 2b5b934..6688d5c 100644 --- a/R/RcppExports.R +++ b/R/RcppExports.R @@ -2,38 +2,38 @@ # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 check_openmp <- function() { - .Call('_mmer_check_openmp', PACKAGE = 'mmer') + .Call('_sme_check_openmp', PACKAGE = 'sme') } count_samples <- function(filename) { - .Call('_mmer_count_samples', PACKAGE = 'mmer', filename) + .Call('_sme_count_samples', PACKAGE = 'sme', filename) } count_fam <- function(filename) { - .Call('_mmer_count_fam', PACKAGE = 'mmer', filename) + .Call('_sme_count_fam', PACKAGE = 'sme', filename) } count_snps_bim <- function(filename) { - .Call('_mmer_count_snps_bim', PACKAGE = 'mmer', filename) + .Call('_sme_count_snps_bim', PACKAGE = 'sme', filename) } createH5File <- function(filename) { - invisible(.Call('_mmer_createH5File', PACKAGE = 'mmer', filename)) + invisible(.Call('_sme_createH5File', PACKAGE = 'sme', filename)) } readH5File <- function(filename, datasetName) { - .Call('_mmer_readH5File', PACKAGE = 'mmer', filename, datasetName) + .Call('_sme_readH5File', PACKAGE = 'sme', filename, datasetName) } replaceH5Dataset <- function(filename, datasetName, newData) { - invisible(.Call('_mmer_replaceH5Dataset', PACKAGE = 'mmer', filename, datasetName, newData)) + invisible(.Call('_sme_replaceH5Dataset', PACKAGE = 'sme', filename, datasetName, newData)) } -mme_cpp <- function(plink_file, pheno_file, genotype_mask_file, n_randvecs, n_blocks, rand_seed, gxg_indices, n_threads, gxg_h5_dataset, ld_h5_dataset) { - .Call('_mmer_mme_cpp', PACKAGE = 'mmer', plink_file, pheno_file, genotype_mask_file, n_randvecs, n_blocks, rand_seed, gxg_indices, n_threads, gxg_h5_dataset, ld_h5_dataset) +simulate_traits_cpp <- function(plink_file, additive_heritability, gxg_heritability, additive_snps, gxg_group_1, gxg_group_2) { + .Call('_sme_simulate_traits_cpp', PACKAGE = 'sme', plink_file, additive_heritability, gxg_heritability, additive_snps, gxg_group_1, gxg_group_2) } -simulate_traits_cpp <- function(plink_file, additive_heritability, gxg_heritability, additive_snps, gxg_group_1, gxg_group_2) { - .Call('_mmer_simulate_traits_cpp', PACKAGE = 'mmer', plink_file, additive_heritability, gxg_heritability, additive_snps, gxg_group_1, gxg_group_2) +sme_cpp <- function(plink_file, pheno_file, genotype_mask_file, n_randvecs, n_blocks, rand_seed, gxg_indices, n_threads, gxg_h5_dataset, ld_h5_dataset) { + .Call('_sme_sme_cpp', PACKAGE = 'sme', plink_file, pheno_file, genotype_mask_file, n_randvecs, n_blocks, rand_seed, gxg_indices, n_threads, gxg_h5_dataset, ld_h5_dataset) } diff --git a/R/approximate_memory_requirements.R b/R/approximate_memory_requirements.R index 314d95b..e514bd3 100644 --- a/R/approximate_memory_requirements.R +++ b/R/approximate_memory_requirements.R @@ -1,31 +1,31 @@ -#' Estimate Memory Requirements for MME Routine +#' Estimate Memory Requirements for SME Routine #' -#' This function provides an approximate estimate of the memory requirements -#' (in gigabytes) for running the Multimodal Marginal Epistasis (MME) routine +#' This function provides an approximate estimate of the memory requirements +#' (in gigabytes) for running the Sparse Marginal Epistasis (SME) routine #' based on input parameters such as the number of samples, SNPs, and other configurations. #' #' @param n_samples Integer. The number of samples in the dataset. #' @param n_snps Integer. The total number of SNPs in the dataset. -#' @param n_blocks Integer. The number of genotype blocks used to partition SNPs. +#' @param n_blocks Integer. The number of genotype blocks used to partition SNPs. #' Affects the size of encoded genotype segments. -#' @param n_randvecs Integer. The number of random vectors used for stochastic +#' @param n_randvecs Integer. The number of random vectors used for stochastic #' trace estimation. Affects memory for operations involving random vectors. #' @param chunksize Integer. The number of focal SNPs processed per chunk. #' #' @return Numeric. The approximate memory requirement (in gigabytes) for the -#' MME routine. +#' SME routine. #' #' @details -#' The function calculates memory usage by summing the contributions from -#' various components used in the MME routine, including: +#' The function calculates memory usage by summing the contributions from +#' various components used in the SME routine, including: #' - Variance component estimates (`vc_estimates`) #' - Phenotype-related matrices #' - Random vector-based computations #' - Genotype objects and block statistics #' - Gene-by-gene interaction masks #' -#' The estimated memory requirement is derived from the data dimensions -#' and operational needs, and it provides a guideline for configuring resources +#' The estimated memory requirement is derived from the data dimensions +#' and operational needs, and it provides a guideline for configuring resources #' for the analysis. #' #' @examples @@ -34,10 +34,10 @@ #' n_blocks <- 100 #' n_randvecs <- 100 #' chunksize <- 10 -#' approximate_memory_requirements(n_samples, -#' n_snps, -#' n_blocks, -#' n_randvecs, +#' approximate_memory_requirements(n_samples, +#' n_snps, +#' n_blocks, +#' n_randvecs, #' chunksize) #' #' @export @@ -60,7 +60,7 @@ approximate_memory_requirements <- function(n_samples, # collect_XXy - Matrix: (n_samples, 1) # collect_Gy - Matrix: (n_samples, n_gxg_idx) # focal_snps_matrix - Matrix: (n_samples, n_gxg_idx) - # collect_XXUy - Matrix: (n_samples, + # collect_XXUy - Matrix: (n_samples, # (n_variance_components + 1) * (n_variance_components + 1) * n_gxg_idx) phenotype_like <- n_samples * (6 + 2 * chunksize + 9 * chunksize) @@ -97,11 +97,11 @@ approximate_memory_requirements <- function(n_samples, # # these are so small they can be neglected - total <- vc_estimates + - phenotype_like + - randomvec_like + - gt_objects + - block_stats + + total <- vc_estimates + + phenotype_like + + randomvec_like + + gt_objects + + block_stats + mask return(total * 8 / 1024 / 1024 / 1024) } diff --git a/R/catch-routine-registration.R b/R/catch-routine-registration.R index d879041..f6c7e48 100644 --- a/R/catch-routine-registration.R +++ b/R/catch-routine-registration.R @@ -2,5 +2,5 @@ # 'tools::package_native_routine_registration_skeleton()' generates the required # registration info for the 'run_testthat_tests' symbol. (function() { - .Call("run_testthat_tests", FALSE, PACKAGE = "mmer") + .Call("run_testthat_tests", FALSE, PACKAGE = "sme") }) diff --git a/R/getting_started.R b/R/getting_started.R index 75cc596..c7fe08f 100644 --- a/R/getting_started.R +++ b/R/getting_started.R @@ -1,35 +1,35 @@ #' @title Simulated Dataset for Genome-Wide Interaction Analysis #' @description -#' `getting_started` is a simulated dataset created to demonstrate the use of -#' the `mme()` function for genome-wide interaction analyses. It contains -#' results from a simulated analysis involving additive genetic effects and +#' `getting_started` is a simulated dataset created to demonstrate the use of +#' the `sme()` function for genome-wide interaction analyses. It contains +#' results from a simulated analysis involving additive genetic effects and #' gene-by-gene (GxG) interactions. #' #' @details #' The dataset was generated as follows: -#' -#' - **Genotype Simulation**: +#' +#' - **Genotype Simulation**: #' Genotype data for 5000 individuals and 6,000 SNPs was simulated with #' synthetic allele counts. -#' -#' - **Phenotype Simulation**: +#' +#' - **Phenotype Simulation**: #' Phenotypic values were simulated with an additive heritability of 0.3 and a #' GxG interaction heritability of 0.25. A set of 100 SNPs were selected for #' additive effects, and two groups of 5 SNPs each were used for GxG #' interactions. -#' -#' - **PLINK-Compatible Files**: +#' +#' - **PLINK-Compatible Files**: #' The simulated data was saved in PLINK-compatible `.bed`, `.fam`, #' and `.bim` files. -#' -#' - **Interaction Analysis**: -#' The `mme()` function was used to perform genome-wide interaction analyses +#' +#' - **Interaction Analysis**: +#' The `sme()` function was used to perform genome-wide interaction analyses #' on a subset of SNP indices, including the GxG SNP groups and 100 additional -#' additive SNPs. Memory-efficient computation parameters +#' additive SNPs. Memory-efficient computation parameters #' (e.g., `chun_ksize`, `n_randvecs`, and `n_blocks`) were applied. #' #' @format -#' A list with results from `mme()`, including the following components: +#' A list with results from `sme()`, including the following components: #' \describe{ #' \item{`summary`}{A data frame summarizing the analysis results, including #' p-values for SNP associations (`p`).} @@ -42,16 +42,16 @@ #' } #' #' @section Key Parameters: -#' - **Additive Heritability**: 0.3 -#' - **GxG Heritability**: 0.25 -#' - **Number of Samples**: 5000 -#' - **Number of SNPs**: 6,000 -#' - **Selected Additive SNPs**: 100 -#' - **Selected GxG SNP Groups**: -#' - Group 1: 5 SNPs -#' - Group 2: 5 SNPs +#' - **Additive Heritability**: 0.3 +#' - **GxG Heritability**: 0.25 +#' - **Number of Samples**: 5000 +#' - **Number of SNPs**: 6,000 +#' - **Selected Additive SNPs**: 100 +#' - **Selected GxG SNP Groups**: +#' - Group 1: 5 SNPs +#' - Group 2: 5 SNPs #' -#' @usage +#' @usage #' data("getting_started") #' #' @examples @@ -59,7 +59,7 @@ #' head(getting_started$summary) #' #' @seealso -#' \link[mme]{mme} +#' \link[sme]{sme} #' #' @keywords datasets #' @source data-raw/getting_started.R diff --git a/R/simulate_traits.R b/R/simulate_traits.R index 7714325..a5c6248 100644 --- a/R/simulate_traits.R +++ b/R/simulate_traits.R @@ -1,7 +1,7 @@ #' Simulate Quantitative Traits from PLINK Genotypes #' -#' This function simulates a quantitative trait based on additive and epistatic -#' genetic effects using genotype data from a PLINK dataset. The simulated trait +#' This function simulates a quantitative trait based on additive and epistatic +#' genetic effects using genotype data from a PLINK dataset. The simulated trait #' is saved to a specified output file in a phenotype format compatible with #' PLINK. #' @@ -34,12 +34,12 @@ #' and `gxg_indices_2`, contributing to the `gxg_heritability`. #' - Environmental effects: Any remaining variance not explained by genetic #' effects is assigned to random environmental noise. -#' -#' The output file is in PLINK-compatible phenotype format with three columns: +#' +#' The output file is in PLINK-compatible phenotype format with three columns: #' Family ID (`FID`), Individual ID (`IID`), and the simulated trait (`TRAIT`). #' #' @examples -#' plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", package = "mmer")) +#' plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", package = "sme")) #' out_file <- tempfile() #' additive_heritability <- 0.3 #' gxg_heritability <- 0.1 @@ -59,7 +59,7 @@ #' from_file <- read.table(out_file, header = TRUE) #' head(from_file) #' -#' @useDynLib mmer +#' @useDynLib sme #' @import genio #' @import dplyr #' @importFrom utils write.table @@ -75,7 +75,7 @@ simulate_traits <- function(plink_file, logging::basicConfig(level = log_level) - log <- logging::getLogger("mmer::simulate_traits") + log <- logging::getLogger("sme::simulate_traits") if (additive_heritability + gxg_heritability > 1) { stop("Additive heritability and gxg heritability should sum to less than 1") diff --git a/R/mme.R b/R/sme.R similarity index 92% rename from R/mme.R rename to R/sme.R index d52e03a..79d0ae4 100644 --- a/R/mme.R +++ b/R/sme.R @@ -1,29 +1,29 @@ -#' Multimodal Marginal Epistasis Test (MME) +#' Sparse Marginal Epistasis Test (SME) #' -#' MME fits a linear mixed model in order to test for marginal epistasis. It +#' SME fits a linear mixed model in order to test for marginal epistasis. It #' concentrates the scans for epistasis to regions of the genome that have known #' functional enrichment for a trait of interest. -#' -#' @references Stamp, J., Pattillo Smith, S., Weinreich, D., & Crawford, L. (2024). -#' Integration of functional genomic maps enables genome-wide detection of -#' epistasis in human complex traits. +#' +#' @references Stamp, J., Pattillo Smith, S., Weinreich, D., & Crawford, L. (2024). +#' Integration of functional genomic maps enables genome-wide detection of +#' epistasis in human complex traits. #' bioRxiv. -#' @references Stamp, J., DenAdel, A., Weinreich, D., & Crawford, L. (2023). -#' Leveraging the genetic correlation between traits improves the detection of -#' epistasis in genome-wide association studies. +#' @references Stamp, J., DenAdel, A., Weinreich, D., & Crawford, L. (2023). +#' Leveraging the genetic correlation between traits improves the detection of +#' epistasis in genome-wide association studies. #' G3: Genes, Genomes, Genetics, 13(8), jkad118. -#' @references Crawford, L., Zeng, P., Mukherjee, S., & Zhou, X. (2017). -#' Detecting epistasis with the marginal epistasis test in genetic mapping +#' @references Crawford, L., Zeng, P., Mukherjee, S., & Zhou, X. (2017). +#' Detecting epistasis with the marginal epistasis test in genetic mapping #' studies of quantitative traits. PLoS genetics, 13(7), e1006869. -#' #' -#' @param plink_file Character. File path to the PLINK dataset -#' (without *.bed extension). +#' +#' @param plink_file Character. File path to the PLINK dataset +#' (without *.bed extension). #' The function will append `.bim`, `.bed`, and `.fam` extensions #' automatically. #' The genotype data must not have any missing genotypes. Use PLINK to remove #' variants with missing genotypes or impute them. -#' @param pheno_file Character. File path to a phenotype file in PLINK format. +#' @param pheno_file Character. File path to a phenotype file in PLINK format. #' The file should contain exactly one phenotype column. #' @param mask_file Character or NULL. File path to an HDF5 file specifying #' per-SNP masks for gene-by-gene interaction tests. This file informs which @@ -34,24 +34,24 @@ #' If `NULL`, all SNPs in the dataset will be tested. #' These indices are **1-based**. #' @param chunk_size Integer or NULL. Number of SNPs processed per chunk. -#' This influences memory +#' This influences memory #' usage and can be left `NULL` to automatically determine the chunk size #' based on `gxg_indices` and number of threads. #' @param n_randvecs Integer. Number of random vectors used for stochastic trace -#' estimation. +#' estimation. #' Higher values yield more accurate estimates but increase computational #' cost. Default is 10. #' @param n_blocks Integer. Number of blocks into which SNPs are divided for -#' processing. +#' processing. #' This parameter affects memory requirements. Default is 100. #' @param n_threads Integer. Number of threads for OpenMP parallel processing. #' Default is 1. #' @param gxg_h5_group Character. Name of the HDF5 group within the mask file -#' containing gene-by-gene +#' containing gene-by-gene #' interaction masks. SNPs in this group will be included in the gene-by-gene #' interactions. Defaults to "gxg". #' @param ld_h5_group Character. Name of the HDF5 group within the mask file -#' containing linkage disequilibrium +#' containing linkage disequilibrium #' masks. SNPs in this group are excluded from analysis. Defaults to "ld". #' @param rand_seed Integer. Seed for random vector generation. If `-1`, no seed #' is set. Default is -1. @@ -74,22 +74,22 @@ #' - `average_duration`: Average computation time per SNP. #' #' @details -#' This function integrates PLINK-formatted genotype and phenotype data to +#' This function integrates PLINK-formatted genotype and phenotype data to #' perform marginal epistasis tests on a set of SNPs. Using stochastic trace #' estimation, the method computes variance components for gene-by-gene #' interaction and genetic relatedness using the MQS estimator. The process is #' parallelized using OpenMP when `n_threads > 1`. #' -#' The memory requirements and computation time scaling can be optimized through +#' The memory requirements and computation time scaling can be optimized through #' the parameters `chunk_size`, `n_randvecs`, and `n_blocks`. -#' +#' #' **Mask Format Requirements** #' #' The mask file format is an HDF5 file used for storing index data for #' the masking process. This format supports data retrieval by index. #' Below are the required groups and datasets within the HDF5 file: #' -#' The required group names can be configured as input parameters. +#' The required group names can be configured as input parameters. #' The defaults are described below. #' #' - **Groups**: @@ -97,16 +97,16 @@ #' - `gxg`: Stores indices of SNPs that the marginal epistasis test is conditioned on. These SNPs will be **included**. #' #' - **Datasets**: -#' - `ld/`: For each focal SNP ``, this dataset contains indices of SNPs +#' - `ld/`: For each focal SNP ``, this dataset contains indices of SNPs #' in the same LD block as that SNP. These SNPs will be **excluded** from the gene-by-gene interaction covariance matrix. -#' - `gxg/`: For each focal SNP ``, this dataset contains indices of SNPs to **include** in the +#' - `gxg/`: For each focal SNP ``, this dataset contains indices of SNPs to **include** in the #' the gene-by-gene interaction covariance matrix for focal SNP ``. #' -#' **Important**: All indices in the mask file data are **zero-based**, matching the zero-based indices of the PLINK `.bim` file. +#' **Important**: All indices in the mask file data are **zero-based**, matching the zero-based indices of the PLINK `.bim` file. #' #' @examples -#' plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", package="mmer")) -#' pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") +#' plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", package="sme")) +#' pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") #' mask_file <- "" #' #' # Parameter inputs @@ -119,7 +119,7 @@ #' n_snps <- 100 #' snp_indices <- 1:n_snps #' -#' mme_result <- mme( +#' sme_result <- sme( #' plink_file, #' pheno_file, #' mask_file, @@ -129,9 +129,9 @@ #' n_blocks, #' n_threads #' ) -#' head(mme_result$summary) +#' head(sme_result$summary) #' -#' @useDynLib mmer +#' @useDynLib sme #' @import Rcpp #' @import RcppEigen #' @import dplyr @@ -139,7 +139,7 @@ #' @importFrom tidyr pivot_longer #' @importFrom utils read.delim #' @export -mme <- +sme <- function(plink_file, pheno_file, mask_file = NULL, @@ -154,7 +154,7 @@ mme <- log_level = "WARNING") { logging::logReset() logging::basicConfig(level = log_level) - log <- logging::getLogger("mme") + log <- logging::getLogger("sme") n_gxg_indices <- length(gxg_indices) log$debug("Number of gxg indices: %d", n_gxg_indices) @@ -211,7 +211,7 @@ mme <- for (i in seq_along(chunks)) { chunk <- chunks[[i]] result <- - mme_cpp( + sme_cpp( plink_file, pheno_file, mask_file, diff --git a/README.Rmd b/README.Rmd index 184ca21..0a306df 100644 --- a/README.Rmd +++ b/README.Rmd @@ -2,8 +2,8 @@ output: github_document --- - ```{r, include = FALSE} @@ -15,36 +15,36 @@ knitr::opts_chunk$set( ) ``` -# The Multimodal Marginal Epistasis test +# The Sparse Marginal Epistasis test -The `mmer` package implements a computationally and statistically efficient method -for detecting marginal epistasis in genome-wide association studies (GWAS). -Find the full package documentation including examples and articles here: -[Multimodal Marginal Epistasis test Documentation](https://lcrawlab.github.io/mmer/). +The `sme` package implements a computationally and statistically efficient method +for detecting marginal epistasis in genome-wide association studies (GWAS). +Find the full package documentation including examples and articles here: +[Sparse Marginal Epistasis test Documentation](https://lcrawlab.github.io/sme/). ## Key Features - Hutchinson's stochastic trace estimator: efficient and scalable computation - Mailman algorithm: fast vector-by-matrix operation - Linear mixed model: controls for population structure -- Multimodal Input: incorporates additional data from HDF5 files to improve power in +- Multimodal Input: incorporates additional data from HDF5 files to improve power in detecting gene-by-gene interactions. -- Optimize for Memory Constraints: Highly configurable block wise processing of the - data allows to make the most of available resources. See also - [How To Optimize the Memory Requirements of MME](articles/tutorial-memory-optimization.html). +- Optimize for Memory Constraints: Highly configurable block wise processing of the + data allows to make the most of available resources. See also + [How To Optimize the Memory Requirements of SME](articles/tutorial-memory-optimization.html). - Parallelization: Utilizes OpenMP for multi-threaded processing. ## Installation -You can install the development version of mmer from [GitHub](https://github.com/) +You can install the development version of sme from [GitHub](https://github.com/) with: ``` r install.packages("devtools") -devtools::install_github("lcrawlab/mmer") +devtools::install_github("lcrawlab/sme") ``` ## Dependencies @@ -56,7 +56,7 @@ System requirements of the package: - Rhdf5lib (from BioConductor) - OpenMP (optional) -To install `Rhdf5lib`, first install the tool `BiocManager` from CRAN, then install +To install `Rhdf5lib`, first install the tool `BiocManager` from CRAN, then install the library using this tool. ```{r, eval = FALSE} @@ -65,12 +65,12 @@ if (!require("BiocManager", quietly = TRUE)) BiocManager::install("Rhdf5lib") ``` -The full list of R dependencies can be found in the -[DESCRIPTION file](https://github.com/lcrawlab/mmer/blob/main/DESCRIPTION). +The full list of R dependencies can be found in the +[DESCRIPTION file](https://github.com/lcrawlab/sme/blob/main/DESCRIPTION). ### OpenMP -For OS X and Linux, the OpenMP library can be installed via one of the (shell) +For OS X and Linux, the OpenMP library can be installed via one of the (shell) commands specified below: | System | Command | @@ -79,7 +79,7 @@ commands specified below: |**Debian-based systems (including Ubuntu)**| `sudo apt-get install libomp-dev` | -To enable openMP, it may be necessary to configure the compiler flags +To enable openMP, it may be necessary to configure the compiler flags `SHLIB_OPENMP_CXXFLAGS` and `LDFLAGS` in the `~/.R/Makevars` file. | System | Required Flags | @@ -89,26 +89,26 @@ To enable openMP, it may be necessary to configure the compiler flags ## Known Issues -Compiling the package requires the compiler to find the libraries for the -dependencies. For unix systems, the libraries are typically installed at -`/usr/local/lib` and `/usr/local/include`. For users using OS X and homebrew, the +Compiling the package requires the compiler to find the libraries for the +dependencies. For unix systems, the libraries are typically installed at +`/usr/local/lib` and `/usr/local/include`. For users using OS X and homebrew, the libraries are typically installed at `/opt/homebrew/lib` and `/opt/homebrew/include`. -Non-standard library paths need to be configured. The `src/Makevars` file -configures the compiler flags and considers the `LDFLAGS` and `CPPFLAGS` from the +Non-standard library paths need to be configured. The `src/Makevars` file +configures the compiler flags and considers the `LDFLAGS` and `CPPFLAGS` from the `~/.R/Makevars` file. ## References -- Stamp J, Crawford L (2024). mvMAPIT: Multivariate Genome Wide Marginal Epistasis - Test. R package version 2.0.3, https://lcrawlab.github.io/mvMAPIT/, +- Stamp J, Crawford L (2024). mvMAPIT: Multivariate Genome Wide Marginal Epistasis + Test. R package version 2.0.3, https://lcrawlab.github.io/mvMAPIT/, https://github.com/lcrawlab/mvMAPIT. -- Stamp et al. (2023): Leveraging genetic correlation between traits for epistasis +- Stamp et al. (2023): Leveraging genetic correlation between traits for epistasis detection in GWAS. G3: Genes, Genomes, Genetics. -- Fu, B., Pazokitoroudi, A., Xue, A., Anand, A., Anand, P., Zaitlen, N., & - Sankararaman, S. (2023). A biobank-scale test of marginal epistasis reveals +- Fu, B., Pazokitoroudi, A., Xue, A., Anand, A., Anand, P., Zaitlen, N., & + Sankararaman, S. (2023). A biobank-scale test of marginal epistasis reveals genome-wide signals of polygenic epistasis. bioRxiv. -- Crawford et al. (2017): Detecting epistasis with the marginal epistasis test. +- Crawford et al. (2017): Detecting epistasis with the marginal epistasis test. PLoS Genetics. -- Devresse et al. (2024): HighFive - Header-only C++ HDF5 interface. +- Devresse et al. (2024): HighFive - Header-only C++ HDF5 interface. https://zenodo.org/records/13120799 diff --git a/README.md b/README.md index 68889e0..0391ce5 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,16 @@ up-to-date. `devtools::build_readme()` is handy for this. --> -# The Multimodal Marginal Epistasis test +# The Sparse Marginal Epistasis test -The `mmer` package implements a computationally and statistically +The `sme` package implements a computationally and statistically efficient method for detecting marginal epistasis in genome-wide association studies (GWAS). Find the full package documentation -including examples and articles here: [Multimodal Marginal Epistasis -test Documentation](https://lcrawlab.github.io/mmer/). +including examples and articles here: [Sparse Marginal Epistasis +test Documentation](https://lcrawlab.github.io/sme/). ## Key Features @@ -26,17 +26,17 @@ test Documentation](https://lcrawlab.github.io/mmer/). - Optimize for Memory Constraints: Highly configurable block wise processing of the data allows to make the most of available resources. See also [How To Optimize the Memory Requirements of - MME](articles/tutorial-memory-optimization.html). + SME](articles/tutorial-memory-optimization.html). - Parallelization: Utilizes OpenMP for multi-threaded processing. ## Installation -You can install the development version of mmer from +You can install the development version of sme from [GitHub](https://github.com/) with: ``` r install.packages("devtools") -devtools::install_github("lcrawlab/mmer") +devtools::install_github("lcrawlab/sme") ``` ## Dependencies @@ -58,7 +58,7 @@ BiocManager::install("Rhdf5lib") ``` The full list of R dependencies can be found in the [DESCRIPTION -file](https://github.com/lcrawlab/mmer/blob/main/DESCRIPTION). +file](https://github.com/lcrawlab/sme/blob/main/DESCRIPTION). ### OpenMP diff --git a/_pkgdown.yml b/_pkgdown.yml index 349f29f..978f927 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,4 +1,4 @@ -url: https://lcrawlab.github.io/mmer/ +url: https://lcrawlab.github.io/sme/ template: bootstrap: 5 @@ -13,11 +13,11 @@ template: reference: -- title: "Multimodal Marginal Epistasis Analysis" +- title: "Sparse Marginal Epistasis Analysis" desc: > Functions for the marginal epistasis analysis. contents: - - mme + - sme - title: "Simulate Quantitative Traits" desc: > Functions for simulating quantitative traits with pairwise epistasis. @@ -31,7 +31,7 @@ reference: - create_hdf5_file - read_hdf5_dataset - write_hdf5_dataset - + - title: "Simulated Data Examples" desc: "RDA data files for illustration purposes." contents: diff --git a/data-raw/getting_started.R b/data-raw/getting_started.R index f73cf5c..7321825 100644 --- a/data-raw/getting_started.R +++ b/data-raw/getting_started.R @@ -1,7 +1,7 @@ set.seed(123) library(dplyr) library(genio) -library(mmer) +library(sme) plink_file <- tempfile() n_samples <- 5000 @@ -70,7 +70,7 @@ rand_seed <- 123 n_threads <- 5 log_level <- "DEBUG" -getting_started <- mme( +getting_started <- sme( plink_file, pheno_file, mask_file, diff --git a/inst/logo/logo.R b/inst/logo/logo.R index 66defce..e5576e2 100644 --- a/inst/logo/logo.R +++ b/inst/logo/logo.R @@ -9,7 +9,7 @@ r <- hexSticker::sticker( s_y = 1.25, s_width = 1.25, s_height = 1.25, - package = "mmeR", + package = "sme", p_x = 1, p_y = 0.6, p_size = 25, diff --git a/inst/profiling/local/compile-runner.sh b/inst/profiling/local/compile-runner.sh index 6832606..4684b64 100644 --- a/inst/profiling/local/compile-runner.sh +++ b/inst/profiling/local/compile-runner.sh @@ -5,7 +5,7 @@ clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/in clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c compute_covariance_q.cpp -o compute_covariance_q.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c compute_mom_components.cpp -o compute_mom_components.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c count_data.cpp -o count_data.o -clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c mme.cpp -o mme.o +clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c sme.cpp -o sme.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c genotype.cpp -o genotype.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c initialize_random_vectors.cpp -o initialize_random_vectors.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c read_covariates.cpp -o read_covariates.o @@ -13,4 +13,4 @@ clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/in clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c read_genotype_mask.cpp -o read_genotype_mask.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c read_phenotypes.cpp -o read_phenotypes.o clang++ -arch arm64 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include/ -I/opt/R/arm64/include -I/opt/homebrew/include -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/BH/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/Rcpp/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library/testthat/include' -I/opt/R/arm64/include -I/opt/homebrew/include -Xclang -fopenmp -fPIC -falign-functions=64 -Wall -g -O2 -c set_metadata.cpp -o set_metadata.o -clang++ -arch arm64 -std=gnu++17 -L/Library/Frameworks/R.framework/Resources/lib -L/opt/R/arm64/lib -L/opt/homebrew/lib -o runner runner.cpp allocate_memory.o computation.o compute_covariance_q.o compute_mom_components.o count_data.o mme.o genotype.o initialize_random_vectors.o read_covariates.o read_genotypes.o read_genotype_mask.o read_phenotypes.o set_metadata.o -lhdf5 -lomp -L/opt/R/arm64/lib -L/opt/homebrew/lib -Xclang -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation -I'/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library/Rcpp/include' -I"/Library/Frameworks/R.framework/Resources/include" -I/opt/R/arm64/include -I/opt/homebrew/include +clang++ -arch arm64 -std=gnu++17 -L/Library/Frameworks/R.framework/Resources/lib -L/opt/R/arm64/lib -L/opt/homebrew/lib -o runner runner.cpp allocate_memory.o computation.o compute_covariance_q.o compute_mom_components.o count_data.o sme.o genotype.o initialize_random_vectors.o read_covariates.o read_genotypes.o read_genotype_mask.o read_phenotypes.o set_metadata.o -lhdf5 -lomp -L/opt/R/arm64/lib -L/opt/homebrew/lib -Xclang -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation -I'/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library/RcppEigen/include' -I'/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library/Rcpp/include' -I"/Library/Frameworks/R.framework/Resources/include" -I/opt/R/arm64/include -I/opt/homebrew/include diff --git a/inst/profiling/local/runner.cpp b/inst/profiling/local/runner.cpp index aa212bf..d48afd2 100644 --- a/inst/profiling/local/runner.cpp +++ b/inst/profiling/local/runner.cpp @@ -1,4 +1,4 @@ -#include "../../../mmer.Rcheck/00_pkg_src/mmer/src/mme.h" +#include "../../../sme.Rcheck/00_pkg_src/sme/src/sme.h" #include int main() { @@ -25,7 +25,7 @@ int main() { 8, 9, 10}; - Rcpp::List results = mme_cpp(plink_file, pheno_file, + Rcpp::List results = sme_cpp(plink_file, pheno_file, mask_file, plink_file, n_randvecs, n_blocks, rand_seed, index_vector, n_threads, gxg_h5_group, ld_h5_group); return 0; diff --git a/inst/profiling/oscar/compile-runner.sh b/inst/profiling/oscar/compile-runner.sh index 779d6e4..08a3f2e 100644 --- a/inst/profiling/oscar/compile-runner.sh +++ b/inst/profiling/oscar/compile-runner.sh @@ -3,7 +3,7 @@ /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c compute_covariance_q.cpp -o compute_covariance_q.o /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c compute_mom_components.cpp -o compute_mom_components.o /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c count_data.cpp -o count_data.o -/usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c mme.cpp -o mme.o -fopenmp +/usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c sme.cpp -o sme.o -fopenmp /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c genotype.cpp -o genotype.o /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c initialize_random_vectors.cpp -o initialize_random_vectors.o /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c read_covariates.cpp -o read_covariates.o @@ -11,4 +11,4 @@ /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c read_genotype_mask.cpp -o read_genotype_mask.o /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c read_phenotypes.cpp -o read_phenotypes.o /usr/bin/g++ -std=gnu++17 -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/testthat/include' -I/usr/local/include -fpic -g -O2 -c set_metadata.cpp -o set_metadata.o -/usr/bin/g++ -std=gnu++17 -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -Wl,-rpath,/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -o runner runner.cpp allocate_memory.o computation.o compute_covariance_q.o compute_mom_components.o count_data.o mme.o genotype.o initialize_random_vectors.o read_covariates.o read_genotypes.o read_genotype_mask.o read_phenotypes.o set_metadata.o -lhdf5 -lomp -fopenmp -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -Wl,-rpath,/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -lR -L'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/libs' -L'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/libs' -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I/usr/local/include +/usr/bin/g++ -std=gnu++17 -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -Wl,-rpath,/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -o runner runner.cpp allocate_memory.o computation.o compute_covariance_q.o compute_mom_components.o count_data.o sme.o genotype.o initialize_random_vectors.o read_covariates.o read_genotypes.o read_genotype_mask.o read_phenotypes.o set_metadata.o -lhdf5 -lomp -fopenmp -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -Wl,-rpath,/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -L/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/lib -lR -L'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/libs' -L'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/libs' -I"/oscar/rt/9.2/software/0.20-generic/0.20.1/opt/spack/linux-rhel9-x86_64_v3/gcc-11.3.1/r-4.4.0-yycctsjvszuj5o2q4gfbaehsq7rkl4bz/rlib/R/include" -DNDEBUG -I../inst/include/ -I/usr/local/include -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/oscar/home/jstamp1/R/x86_64-pc-linux-gnu-library/4.4/RcppEigen/include' -I/usr/local/include diff --git a/inst/profiling/oscar/runner.cpp b/inst/profiling/oscar/runner.cpp index b497bee..13f244b 100644 --- a/inst/profiling/oscar/runner.cpp +++ b/inst/profiling/oscar/runner.cpp @@ -1,4 +1,4 @@ -#include "mme.h" +#include "sme.h" #include int main() { @@ -32,7 +32,7 @@ int main() { // 15, }; Rcpp::List results = - mme_cpp(plink_file, pheno_file, mask_file, plink_file, n_randvecs, n_blocks, + sme_cpp(plink_file, pheno_file, mask_file, plink_file, n_randvecs, n_blocks, rand_seed, index_vector, n_threads, gxg_h5_group, ld_h5_group); return 0; } diff --git a/inst/profiling/profiling.R b/inst/profiling/profiling.R index 03d818b..a3dd30a 100644 --- a/inst/profiling/profiling.R +++ b/inst/profiling/profiling.R @@ -1,4 +1,4 @@ -library(mmer) +library(sme) library(tidyr) plink_file <- "/Users/jds/data/ukbb/c12_100k-samples_020k-snps" @@ -29,7 +29,7 @@ duration$average_duration <- rep(0, nrow(parameter_grid)) for (i in 1:nrow(parameter_grid)) { # i <- 2 - result <- mme(plink_file, + result <- sme(plink_file, pheno_file, covariate_file, parameter_grid$mask_file[i], diff --git a/man/approximate_memory_requirements.Rd b/man/approximate_memory_requirements.Rd index 4ca2a5b..6271361 100644 --- a/man/approximate_memory_requirements.Rd +++ b/man/approximate_memory_requirements.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/approximate_memory_requirements.R \name{approximate_memory_requirements} \alias{approximate_memory_requirements} -\title{Estimate Memory Requirements for MME Routine} +\title{Estimate Memory Requirements for SME Routine} \usage{ approximate_memory_requirements( n_samples, @@ -27,16 +27,16 @@ trace estimation. Affects memory for operations involving random vectors.} } \value{ Numeric. The approximate memory requirement (in gigabytes) for the -MME routine. +SME routine. } \description{ This function provides an approximate estimate of the memory requirements -(in gigabytes) for running the Multimodal Marginal Epistasis (MME) routine +(in gigabytes) for running the Sparse Marginal Epistasis (SME) routine based on input parameters such as the number of samples, SNPs, and other configurations. } \details{ The function calculates memory usage by summing the contributions from -various components used in the MME routine, including: +various components used in the SME routine, including: \itemize{ \item Variance component estimates (\code{vc_estimates}) \item Phenotype-related matrices @@ -55,10 +55,10 @@ n_snps <- 1e6 n_blocks <- 100 n_randvecs <- 100 chunksize <- 10 -approximate_memory_requirements(n_samples, - n_snps, - n_blocks, - n_randvecs, +approximate_memory_requirements(n_samples, + n_snps, + n_blocks, + n_randvecs, chunksize) } diff --git a/man/figures/README-logo.png b/man/figures/README-logo.png index 015a2f085d377548672cd07fd5b99b28332cace5..267131ad9e51b4af8cecf440323ed0363938f7f7 100644 GIT binary patch literal 51378 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 gWTEubPp&_pd;j! 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
GPXO z`cIk{ErCcxY7d^Ql@RguA%53+rPY?7u`uHFhT0UmnLv5yYUjS7xJk}vg2L`f02@H@ zwCrOjYXasDzr+Lmqm4+oK6H1oJB(e`%_QxP>)7jZ9j^l+?iUkb55VI<>HlPYb?fNM z$cSKX-uH5X|6zW}*n7~|lak4oaaRc)G=npKjlE-1&4d1WDYyD%h3p^q`8dli<@Z%}c;qIGY5FUaGxF zURl31x!GV~*>rwrEmtZ%z{z)1a_CO5i`y1zo3myN;2T^G%7eLiqG&@8Iy9z7^e)iQ}!J>Azlzw*jLV`y4o4PO5YpMO8}wFGu9Duh6BdFIe9^bGjkC|X4{-+F>cPd zf1wJ>Z}|x{etf2_j*`+u@}jYxK|FZ7y+!8p|DZ=U@A&3{kgr>U(Cf<{U!yadJ&;M# zOh_gr`rdI(u>fu-2t7hLBDnobvI^Y`3$;P}T&U{;?x30|XMEDGsPuveG<&vMFHDQ4 z-j%+8O@0`6>wZKCP+W-{6`=q2A}BC^*^jzt$v&w5qkq*n0YU2oe@LYM`jPMa<9<); zc2Ysh@Axy$wHPnKX-5kY;<)268dhCktc5PIA(7YjbvYxDOLj;BM#0(i9`yaJUeG)L z)dhXOkKmw-|I$C2v&S$PMeUr6_Y`tAI6x27@&0na0X3P#pw3?&gDWh7;O;R~L+Iwc zH&ELk%&Sg&p4FRTM{kXa>F=@&;=a2rwm2P{`*$co^34!4R9u?BGkXjdUDZLiaElGU zoUi5}^Megm%+GYOfeteyjYsAPyBZMjrOV_ixU1NVHC!nG3({OKnM7da13y34(z}`j zkgo9-!R>xSm5q$~#)H;G58bcbvh#OfbO~1DUIkmclJ@EJQD^+9E8-memSD(4z2zJm zW40!wJ)*RO!8UFEJ%a?%XKYe-tYo;kEilR}aSa)QsBY?2*V*^9=`kKCG!LSH&IIVx-4Mj!Zs9k~b z^e0E~RFPQ6k10P`b0ZyDYQ4p{#F<3rgx?25Ax1jxIzIx95kLbtR3Ab_$Wnlo{QkNP z9_r(Fsj;xTuQi`iK}?6|8&~8#dhi-K2$=sfT_1?rvcPH>tcT%c5w5#wl8QUpFXWK1 z&!FKLxTi;}N;sq`WaF{JcE^V}hQhf-uP;ldZ5P6k@j$IbYQ`lpQ(G@Yn|1Tu7Pn7W gE1{E*gi~EodfUdC#N2ezf`OlwnyzX+()P*!0Ui;HU;qFB literal 113172 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 o5B}MMf4Is&9O?fzzIOg#@eRGzUz>% diff --git a/man/figures/logo.png b/man/figures/logo.png index f4473ce370dd97a2b81eccf8f158faf9fd478e7d..267131ad9e51b4af8cecf440323ed0363938f7f7 100644 GIT binary patch literal 51378 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 gWTEubPp&_pd;j! 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
GPXO z`cIk{ErCcxY7d^Ql@RguA%53+rPY?7u`uHFhT0UmnLv5yYUjS7xJk}vg2L`f02@H@ zwCrOjYXasDzr+Lmqm4+oK6H1oJB(e`%_QxP>)7jZ9j^l+?iUkb55VI<>HlPYb?fNM z$cSKX-uH5X|6zW}*n7~|lak4oaaRc)G=npKjlE-1&4d1WDYyD%h3p^q`8dli<@Z%}c;qIGY5FUaGxF zURl31x!GV~*>rwrEmtZ%z{z)1a_CO5i`y1zo3myN;2T^G%7eLiqG&@8Iy9z7^e)iQ}!J>Azlzw*jLV`y4o4PO5YpMO8}wFGu9Duh6BdFIe9^bGjkC|X4{-+F>cPd zf1wJ>Z}|x{etf2_j*`+u@}jYxK|FZ7y+!8p|DZ=U@A&3{kgr>U(Cf<{U!yadJ&;M# zOh_gr`rdI(u>fu-2t7hLBDnobvI^Y`3$;P}T&U{;?x30|XMEDGsPuveG<&vMFHDQ4 z-j%+8O@0`6>wZKCP+W-{6`=q2A}BC^*^jzt$v&w5qkq*n0YU2oe@LYM`jPMa<9<); zc2Ysh@Axy$wHPnKX-5kY;<)268dhCktc5PIA(7YjbvYxDOLj;BM#0(i9`yaJUeG)L z)dhXOkKmw-|I$C2v&S$PMeUr6_Y`tAI6x27@&0na0X3P#pw3?&gDWh7;O;R~L+Iwc zH&ELk%&Sg&p4FRTM{kXa>F=@&;=a2rwm2P{`*$co^34!4R9u?BGkXjdUDZLiaElGU zoUi5}^Megm%+GYOfeteyjYsAPyBZMjrOV_ixU1NVHC!nG3({OKnM7da13y34(z}`j zkgo9-!R>xSm5q$~#)H;G58bcbvh#OfbO~1DUIkmclJ@EJQD^+9E8-memSD(4z2zJm zW40!wJ)*RO!8UFEJ%a?%XKYe-tYo;kEilR}aSa)QsBY?2*V*^9=`kKCG!LSH&IIVx-4Mj!Zs9k~b z^e0E~RFPQ6k10P`b0ZyDYQ4p{#F<3rgx?25Ax1jxIzIx95kLbtR3Ab_$Wnlo{QkNP z9_r(Fsj;xTuQi`iK}?6|8&~8#dhi-K2$=sfT_1?rvcPH>tcT%c5w5#wl8QUpFXWK1 z&!FKLxTi;}N;sq`WaF{JcE^V}hQhf-uP;ldZ5P6k@j$IbYQ`lpQ(G@Yn|1Tu7Pn7W gE1{E*gi~EodfUdC#N2ezf`OlwnyzX+()P*!0Ui;HU;qFB literal 25448 zcmc$GhdY)H*tbL(DVs`2*+TXfk-f9BA|u&*kFrT*?`+xGdt`5qk-c{|WsC2;-tYYr zzT@~hjvhU_-S;)l@mp6xit-XTSP!sJP*8BBB*m2B>plv~4PuO2@Fxx72Q~18@|~oz z914mn4GN04FAB;ze9L<3pGSRG3b^O6M5}CwUg}R{QB2< zxM%VkCpw2-(@hizBlQSO-ax9Tz7 zcb5tHNjXjqUaChqsp42t=G8O4-5+#*zVxzhA`SPR*zT>PJHgW^{pYJ#sa>d^#QGnV z&CzYwncT|j^R4#pJx9|Hy3cJ$oz8LFZ%&i`{uApQ{8jTUEutIYA=0@DFJkBjzG9qj zpO7=|$vm%?zjH%fv_rf=j3X+0M8lW%qXgk7-KB+e6t2c=ozWfsSpBiT%xTkMH9J>E;lH04~1ouCS;=EW?tCkfBF*C^-qU`&|+|c@dlmo>rz}>?n)2Pf!onzXQzvHZ|du))1 z*w!;ZYss4kYp$QoB+33ivelz|{xK)dSn1GTHWNjW_!qs<6#Gq6_>t}vP!TCxyMDSyw5%#)gxkoNK{pHB!#J*Ag2p5kzNycc} zs&k_5&z;}7n(ei}&R$v!pUs2&6c>Mc zxU=_OvTpyD^I3I_)6tN_qP97{mX~11$Jrr6I? zt!Vtct?-whsHJ1mMLpcONhsixev?jR(H4DKn?zmWO?keI^PnQ?2e%AUqOJVy-ZJZ@ zE|)6}iteC{_2=tEIK52e4pcW6Y5kaR<)+ib4nIp3B}%lrO6OrLL;s|0E6p&skfwf9 zUQ!74fim#6L%kH`n;bkunzbV_-?YU90~e$#y1sV~QI-9J>%l^dlchFT5<2}X7yU3tzJvt2NQ zKNg1W*K?CAjc-~5u4ib;G&bNH4laa_Xo{8XHY+CqyE_bE<$RqC9W;XP^1wFk4CUN9%O z3@^jOUPNIMScsG2%;ZPevS@caxO$(XB-|Fp?D2qLN&xqEfEV$VhLV&*|61{*oXIOU zLXv?jl&Fb1TpsLFvPBOgTLGVy?xd5@$<3{wxci)JTn0oxOY(UL{z|fTv7*0J%sY-= z#cH82yX87u;`U@}hWvA4fQpOyb@me~ZGmq+$Dy5PW*79s%BAMpj-nE||C*_&-TkDf ze@_~(6}s2gv!p5OV^n{>dyK3&DB#FU#(;Yqx&IMm~FbrpU&>`$~=?F+|# zEaH%eEVaL#g6`_gz-D1SySDybK_ldi{cnO-4gQ|v_5HhR+292 zO)ano(K_zx1Z8uG{iP%fWBj_9x|wk`XRFBCLGAd?_RYC37*BOP^52sIX?Vj(D-;b@UYPrE8y{hsO-arh`;uV z4|b_$d|1y*dq3u88a-C$rhQXUERmCvhBkUArut*QGdOtCe9>?Po$J~*>id)RZbtp- z^uW}p9#qZ5J({#i{c0(~R_7&VcFzrIG%`Z_R|j|YSyH=-&R|?N_yoO@ySXu3_Z+9? zgMo>9Nh<{-gJygU*(tj)6FV~>=1^8wSSsPAgpE>=JJWZkz6pthDDiJq+g}fhJpEFq zu${Hr7|`VCne?$-@Rhhw6YE0;!S>}h7g|r@hn?UJms_MqPzdhsr zX*N+IA}Ufyc6SR$yLkTCcYkEL_S0CQq8!i-y#Hcnve-sBP8Mu z^_vR0EtO~AS^!0%R-<0y!-kZ{+78C%o?lIMnZDfbeB#8sD)bn#}F2hyne#�-eY?(+B~dt_rq|O(=rwF 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
  • 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 EKf9&CPyhe` diff --git a/man/figures/mme-runtime.png b/man/figures/sme-runtime.png similarity index 100% rename from man/figures/mme-runtime.png rename to man/figures/sme-runtime.png diff --git a/man/figures/mme-schematic-dhs.png b/man/figures/sme-schematic-dhs.png similarity index 100% rename from man/figures/mme-schematic-dhs.png rename to man/figures/sme-schematic-dhs.png diff --git a/man/figures/mme-schematic-manhattan.png b/man/figures/sme-schematic-manhattan.png similarity index 100% rename from man/figures/mme-schematic-manhattan.png rename to man/figures/sme-schematic-manhattan.png diff --git a/man/figures/mme-shared-rvs.png b/man/figures/sme-shared-rvs.png similarity index 100% rename from man/figures/mme-shared-rvs.png rename to man/figures/sme-shared-rvs.png diff --git a/man/getting_started.Rd b/man/getting_started.Rd index 18b091e..80e3980 100644 --- a/man/getting_started.Rd +++ b/man/getting_started.Rd @@ -5,7 +5,7 @@ \alias{getting_started} \title{Simulated Dataset for Genome-Wide Interaction Analysis} \format{ -A list with results from \code{mme()}, including the following components: +A list with results from \code{sme()}, including the following components: \describe{ \item{\code{summary}}{A data frame summarizing the analysis results, including p-values for SNP associations (\code{p}).} @@ -25,7 +25,7 @@ data("getting_started") } \description{ \code{getting_started} is a simulated dataset created to demonstrate the use of -the \code{mme()} function for genome-wide interaction analyses. It contains +the \code{sme()} function for genome-wide interaction analyses. It contains results from a simulated analysis involving additive genetic effects and gene-by-gene (GxG) interactions. } @@ -44,7 +44,7 @@ interactions. The simulated data was saved in PLINK-compatible \code{.bed}, \code{.fam}, and \code{.bim} files. \item \strong{Interaction Analysis}: -The \code{mme()} function was used to perform genome-wide interaction analyses +The \code{sme()} function was used to perform genome-wide interaction analyses on a subset of SNP indices, including the GxG SNP groups and 100 additional additive SNPs. Memory-efficient computation parameters (e.g., \code{chun_ksize}, \code{n_randvecs}, and \code{n_blocks}) were applied. @@ -72,6 +72,6 @@ head(getting_started$summary) } \seealso{ -\link[mme]{mme} +\link[sme]{sme} } \keyword{datasets} diff --git a/man/simulate_traits.Rd b/man/simulate_traits.Rd index 84121b5..785a1b1 100644 --- a/man/simulate_traits.Rd +++ b/man/simulate_traits.Rd @@ -66,7 +66,7 @@ The output file is in PLINK-compatible phenotype format with three columns: Family ID (\code{FID}), Individual ID (\code{IID}), and the simulated trait (\code{TRAIT}). } \examples{ -plink_file <- gsub("\\\\.bed", "", system.file("testdata", "test.bed", package = "mmer")) +plink_file <- gsub("\\\\.bed", "", system.file("testdata", "test.bed", package = "sme")) out_file <- tempfile() additive_heritability <- 0.3 gxg_heritability <- 0.1 diff --git a/man/mme.Rd b/man/sme.Rd similarity index 96% rename from man/mme.Rd rename to man/sme.Rd index 2b049d2..44a6b72 100644 --- a/man/mme.Rd +++ b/man/sme.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/mme.R -\name{mme} -\alias{mme} -\title{Multimodal Marginal Epistasis Test (MME)} +% Please edit documentation in R/sme.R +\name{sme} +\alias{sme} +\title{Sparse Marginal Epistasis Test (SME)} \usage{ -mme( +sme( plink_file, pheno_file, mask_file = NULL, @@ -93,7 +93,7 @@ A list containing: } } \description{ -MME fits a linear mixed model in order to test for marginal epistasis. It +SME fits a linear mixed model in order to test for marginal epistasis. It concentrates the scans for epistasis to regions of the genome that have known functional enrichment for a trait of interest. } @@ -133,8 +133,8 @@ the gene-by-gene interaction covariance matrix for focal SNP \verb{}. \strong{Important}: All indices in the mask file data are \strong{zero-based}, matching the zero-based indices of the PLINK \code{.bim} file. } \examples{ -plink_file <- gsub("\\\\.bed", "", system.file("testdata", "test.bed", package="mmer")) -pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") +plink_file <- gsub("\\\\.bed", "", system.file("testdata", "test.bed", package="sme")) +pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") mask_file <- "" # Parameter inputs @@ -147,7 +147,7 @@ n_threads <- 1 n_snps <- 100 snp_indices <- 1:n_snps -mme_result <- mme( +sme_result <- sme( plink_file, pheno_file, mask_file, @@ -157,7 +157,7 @@ mme_result <- mme( n_blocks, n_threads ) -head(mme_result$summary) +head(sme_result$summary) } \references{ diff --git a/src/RcppExports.cpp b/src/RcppExports.cpp index 822cd0e..c0e080a 100644 --- a/src/RcppExports.cpp +++ b/src/RcppExports.cpp @@ -13,7 +13,7 @@ Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get(); // check_openmp bool check_openmp(); -RcppExport SEXP _mmer_check_openmp() { +RcppExport SEXP _sme_check_openmp() { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; @@ -23,7 +23,7 @@ END_RCPP } // count_samples int count_samples(std::string filename); -RcppExport SEXP _mmer_count_samples(SEXP filenameSEXP) { +RcppExport SEXP _sme_count_samples(SEXP filenameSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; @@ -34,7 +34,7 @@ END_RCPP } // count_fam int count_fam(std::string filename); -RcppExport SEXP _mmer_count_fam(SEXP filenameSEXP) { +RcppExport SEXP _sme_count_fam(SEXP filenameSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; @@ -45,7 +45,7 @@ END_RCPP } // count_snps_bim int count_snps_bim(std::string filename); -RcppExport SEXP _mmer_count_snps_bim(SEXP filenameSEXP) { +RcppExport SEXP _sme_count_snps_bim(SEXP filenameSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; @@ -56,7 +56,7 @@ END_RCPP } // createH5File void createH5File(const std::string& filename); -RcppExport SEXP _mmer_createH5File(SEXP filenameSEXP) { +RcppExport SEXP _sme_createH5File(SEXP filenameSEXP) { BEGIN_RCPP Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const std::string& >::type filename(filenameSEXP); @@ -66,7 +66,7 @@ END_RCPP } // readH5File std::vector readH5File(const std::string& filename, const std::string& datasetName); -RcppExport SEXP _mmer_readH5File(SEXP filenameSEXP, SEXP datasetNameSEXP) { +RcppExport SEXP _sme_readH5File(SEXP filenameSEXP, SEXP datasetNameSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; @@ -78,7 +78,7 @@ END_RCPP } // replaceH5Dataset void replaceH5Dataset(const std::string& filename, const std::string& datasetName, const std::vector& newData); -RcppExport SEXP _mmer_replaceH5Dataset(SEXP filenameSEXP, SEXP datasetNameSEXP, SEXP newDataSEXP) { +RcppExport SEXP _sme_replaceH5Dataset(SEXP filenameSEXP, SEXP datasetNameSEXP, SEXP newDataSEXP) { BEGIN_RCPP Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const std::string& >::type filename(filenameSEXP); @@ -88,9 +88,25 @@ BEGIN_RCPP return R_NilValue; END_RCPP } -// mme_cpp -Rcpp::List mme_cpp(std::string plink_file, std::string pheno_file, std::string genotype_mask_file, int n_randvecs, int n_blocks, int rand_seed, std::vector gxg_indices, int n_threads, std::string gxg_h5_dataset, std::string ld_h5_dataset); -RcppExport SEXP _mmer_mme_cpp(SEXP plink_fileSEXP, SEXP pheno_fileSEXP, SEXP genotype_mask_fileSEXP, SEXP n_randvecsSEXP, SEXP n_blocksSEXP, SEXP rand_seedSEXP, SEXP gxg_indicesSEXP, SEXP n_threadsSEXP, SEXP gxg_h5_datasetSEXP, SEXP ld_h5_datasetSEXP) { +// simulate_traits_cpp +Rcpp::List simulate_traits_cpp(std::string plink_file, float additive_heritability, float gxg_heritability, std::vector additive_snps, std::vector gxg_group_1, std::vector gxg_group_2); +RcppExport SEXP _sme_simulate_traits_cpp(SEXP plink_fileSEXP, SEXP additive_heritabilitySEXP, SEXP gxg_heritabilitySEXP, SEXP additive_snpsSEXP, SEXP gxg_group_1SEXP, SEXP gxg_group_2SEXP) { +BEGIN_RCPP + Rcpp::RObject rcpp_result_gen; + Rcpp::RNGScope rcpp_rngScope_gen; + Rcpp::traits::input_parameter< std::string >::type plink_file(plink_fileSEXP); + Rcpp::traits::input_parameter< float >::type additive_heritability(additive_heritabilitySEXP); + Rcpp::traits::input_parameter< float >::type gxg_heritability(gxg_heritabilitySEXP); + Rcpp::traits::input_parameter< std::vector >::type additive_snps(additive_snpsSEXP); + Rcpp::traits::input_parameter< std::vector >::type gxg_group_1(gxg_group_1SEXP); + Rcpp::traits::input_parameter< std::vector >::type gxg_group_2(gxg_group_2SEXP); + rcpp_result_gen = Rcpp::wrap(simulate_traits_cpp(plink_file, additive_heritability, gxg_heritability, additive_snps, gxg_group_1, gxg_group_2)); + return rcpp_result_gen; +END_RCPP +} +// sme_cpp +Rcpp::List sme_cpp(std::string plink_file, std::string pheno_file, std::string genotype_mask_file, int n_randvecs, int n_blocks, int rand_seed, std::vector gxg_indices, int n_threads, std::string gxg_h5_dataset, std::string ld_h5_dataset); +RcppExport SEXP _sme_sme_cpp(SEXP plink_fileSEXP, SEXP pheno_fileSEXP, SEXP genotype_mask_fileSEXP, SEXP n_randvecsSEXP, SEXP n_blocksSEXP, SEXP rand_seedSEXP, SEXP gxg_indicesSEXP, SEXP n_threadsSEXP, SEXP gxg_h5_datasetSEXP, SEXP ld_h5_datasetSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; @@ -104,23 +120,7 @@ BEGIN_RCPP Rcpp::traits::input_parameter< int >::type n_threads(n_threadsSEXP); Rcpp::traits::input_parameter< std::string >::type gxg_h5_dataset(gxg_h5_datasetSEXP); Rcpp::traits::input_parameter< std::string >::type ld_h5_dataset(ld_h5_datasetSEXP); - rcpp_result_gen = Rcpp::wrap(mme_cpp(plink_file, pheno_file, genotype_mask_file, n_randvecs, n_blocks, rand_seed, gxg_indices, n_threads, gxg_h5_dataset, ld_h5_dataset)); - return rcpp_result_gen; -END_RCPP -} -// simulate_traits_cpp -Rcpp::List simulate_traits_cpp(std::string plink_file, float additive_heritability, float gxg_heritability, std::vector additive_snps, std::vector gxg_group_1, std::vector gxg_group_2); -RcppExport SEXP _mmer_simulate_traits_cpp(SEXP plink_fileSEXP, SEXP additive_heritabilitySEXP, SEXP gxg_heritabilitySEXP, SEXP additive_snpsSEXP, SEXP gxg_group_1SEXP, SEXP gxg_group_2SEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< std::string >::type plink_file(plink_fileSEXP); - Rcpp::traits::input_parameter< float >::type additive_heritability(additive_heritabilitySEXP); - Rcpp::traits::input_parameter< float >::type gxg_heritability(gxg_heritabilitySEXP); - Rcpp::traits::input_parameter< std::vector >::type additive_snps(additive_snpsSEXP); - Rcpp::traits::input_parameter< std::vector >::type gxg_group_1(gxg_group_1SEXP); - Rcpp::traits::input_parameter< std::vector >::type gxg_group_2(gxg_group_2SEXP); - rcpp_result_gen = Rcpp::wrap(simulate_traits_cpp(plink_file, additive_heritability, gxg_heritability, additive_snps, gxg_group_1, gxg_group_2)); + rcpp_result_gen = Rcpp::wrap(sme_cpp(plink_file, pheno_file, genotype_mask_file, n_randvecs, n_blocks, rand_seed, gxg_indices, n_threads, gxg_h5_dataset, ld_h5_dataset)); return rcpp_result_gen; END_RCPP } @@ -128,20 +128,20 @@ END_RCPP RcppExport SEXP run_testthat_tests(SEXP); static const R_CallMethodDef CallEntries[] = { - {"_mmer_check_openmp", (DL_FUNC) &_mmer_check_openmp, 0}, - {"_mmer_count_samples", (DL_FUNC) &_mmer_count_samples, 1}, - {"_mmer_count_fam", (DL_FUNC) &_mmer_count_fam, 1}, - {"_mmer_count_snps_bim", (DL_FUNC) &_mmer_count_snps_bim, 1}, - {"_mmer_createH5File", (DL_FUNC) &_mmer_createH5File, 1}, - {"_mmer_readH5File", (DL_FUNC) &_mmer_readH5File, 2}, - {"_mmer_replaceH5Dataset", (DL_FUNC) &_mmer_replaceH5Dataset, 3}, - {"_mmer_mme_cpp", (DL_FUNC) &_mmer_mme_cpp, 10}, - {"_mmer_simulate_traits_cpp", (DL_FUNC) &_mmer_simulate_traits_cpp, 6}, + {"_sme_check_openmp", (DL_FUNC) &_sme_check_openmp, 0}, + {"_sme_count_samples", (DL_FUNC) &_sme_count_samples, 1}, + {"_sme_count_fam", (DL_FUNC) &_sme_count_fam, 1}, + {"_sme_count_snps_bim", (DL_FUNC) &_sme_count_snps_bim, 1}, + {"_sme_createH5File", (DL_FUNC) &_sme_createH5File, 1}, + {"_sme_readH5File", (DL_FUNC) &_sme_readH5File, 2}, + {"_sme_replaceH5Dataset", (DL_FUNC) &_sme_replaceH5Dataset, 3}, + {"_sme_simulate_traits_cpp", (DL_FUNC) &_sme_simulate_traits_cpp, 6}, + {"_sme_sme_cpp", (DL_FUNC) &_sme_sme_cpp, 10}, {"run_testthat_tests", (DL_FUNC) &run_testthat_tests, 1}, {NULL, NULL, 0} }; -RcppExport void R_init_mmer(DllInfo *dll) { +RcppExport void R_init_sme(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } diff --git a/src/allocate_memory.h b/src/allocate_memory.h index fcb2579..70bd5d9 100644 --- a/src/allocate_memory.h +++ b/src/allocate_memory.h @@ -2,11 +2,11 @@ // Created by Julian Stamp on 3/29/24. // -#ifndef MMER_ALLOCATE_MEMORY_H -#define MMER_ALLOCATE_MEMORY_H +#ifndef SME_ALLOCATE_MEMORY_H +#define SME_ALLOCATE_MEMORY_H #include "genotype.h" -#include "mme.h" +#include "sme.h" void allocate_memory(int n_randvecs, const genotype &genotype_block, double *&partialsums, double *&sum_op, double *&yint_e, @@ -16,4 +16,4 @@ void deallocate_memory(double *partialsums, double *sum_op, double *yint_e, double *yint_m, double **y_e, double **y_m, const genotype &genotype_block); -#endif // MMER_ALLOCATE_MEMORY_H +#endif // SME_ALLOCATE_MEMORY_H diff --git a/src/computation.h b/src/computation.h index aa20494..9f4cf82 100644 --- a/src/computation.h +++ b/src/computation.h @@ -1,5 +1,5 @@ #pragma once -#include "mme.h" +#include "sme.h" MatrixXdr compute_XXz(const MatrixXdr &Z_b, const MatrixXdr &phenotype_mask, const int &n_randvecs, const genotype &genotype_block); diff --git a/src/compute_covariance_q.h b/src/compute_covariance_q.h index d477d1e..0bc2029 100644 --- a/src/compute_covariance_q.h +++ b/src/compute_covariance_q.h @@ -2,13 +2,13 @@ // Created by Julian Stamp on 4/2/24. // -#ifndef MMER_COMPUTE_COVARIANCE_Q_H -#define MMER_COMPUTE_COVARIANCE_Q_H +#ifndef SME_COMPUTE_COVARIANCE_Q_H +#define SME_COMPUTE_COVARIANCE_Q_H -#include "mme.h" +#include "sme.h" void compute_covariance_q(int n_variance_components, const MatrixXdr &collect_UVy, const MatrixXdr &point_est, MatrixXdr &cov_q); -#endif // MMER_COMPUTE_COVARIANCE_Q_H +#endif // SME_COMPUTE_COVARIANCE_Q_H diff --git a/src/compute_mom_components.h b/src/compute_mom_components.h index 04da23e..8c7be85 100644 --- a/src/compute_mom_components.h +++ b/src/compute_mom_components.h @@ -2,9 +2,9 @@ // Created by Julian Stamp on 4/2/24. // -#ifndef MMER_COMPUTE_MOM_COMPONENTS_H -#define MMER_COMPUTE_MOM_COMPONENTS_H -#include "mme.h" +#ifndef SME_COMPUTE_MOM_COMPONENTS_H +#define SME_COMPUTE_MOM_COMPONENTS_H +#include "sme.h" #include void compute_mom_components(int n_randvecs, int n_variance_components, @@ -15,4 +15,4 @@ void compute_mom_components(int n_randvecs, int n_variance_components, const std::vector &n_snps_variance_component, int n_samples_mask, MatrixXdr &S, MatrixXdr &q); -#endif // MMER_COMPUTE_MOM_COMPONENTS_H +#endif // SME_COMPUTE_MOM_COMPONENTS_H diff --git a/src/genotype.h b/src/genotype.h index 9d3ae0b..5f779cf 100644 --- a/src/genotype.h +++ b/src/genotype.h @@ -1,7 +1,7 @@ #pragma once #ifndef GENOTYPE_H #define GENOTYPE_H -#include "mme.h" +#include "sme.h" #include #include #include diff --git a/src/initialize_random_vectors.h b/src/initialize_random_vectors.h index 3dc5064..34e9912 100644 --- a/src/initialize_random_vectors.h +++ b/src/initialize_random_vectors.h @@ -1,13 +1,13 @@ // // Created by Julian Stamp on 3/29/24. // -#include "mme.h" +#include "sme.h" -#ifndef MMER_INITIALIZE_RANDOM_VECTORS_H -#define MMER_INITIALIZE_RANDOM_VECTORS_H +#ifndef SME_INITIALIZE_RANDOM_VECTORS_H +#define SME_INITIALIZE_RANDOM_VECTORS_H MatrixXdr &initialize_random_vectors(int n_randvecs, int rand_seed, const MatrixXdr &pheno_mask, MatrixXdr &random_vectors, int n_samples); -#endif // MMER_INITIALIZE_RANDOM_VECTORS_H +#endif // SME_INITIALIZE_RANDOM_VECTORS_H diff --git a/src/read_covariates.h b/src/read_covariates.h index 4312659..b27b3e0 100644 --- a/src/read_covariates.h +++ b/src/read_covariates.h @@ -1,4 +1,4 @@ -#include "mme.h" +#include "sme.h" #include #include #include diff --git a/src/read_genotype_mask.h b/src/read_genotype_mask.h index c0cd719..7024adf 100644 --- a/src/read_genotype_mask.h +++ b/src/read_genotype_mask.h @@ -2,7 +2,7 @@ #include #include -#include "mme.h" +#include "sme.h" void read_genotype_mask(const std::string &genotype_mask_file, int n_snps, int gxg_i, const std::string &gxg_h5_dataset, diff --git a/src/read_genotypes.h b/src/read_genotypes.h index 34e747d..0b28631 100644 --- a/src/read_genotypes.h +++ b/src/read_genotypes.h @@ -2,7 +2,7 @@ #include #include -#include "mme.h" +#include "sme.h" #include "set_metadata.h" using namespace std; diff --git a/src/read_phenotypes.h b/src/read_phenotypes.h index dd962ed..646ae38 100644 --- a/src/read_phenotypes.h +++ b/src/read_phenotypes.h @@ -1,4 +1,4 @@ -#include "mme.h" +#include "sme.h" #include #include diff --git a/src/simulate_traits.cpp b/src/simulate_traits.cpp index 559363c..f56a729 100644 --- a/src/simulate_traits.cpp +++ b/src/simulate_traits.cpp @@ -1,5 +1,5 @@ #include "simulate_traits.h" -#include "mme.h" +#include "sme.h" std::vector draw_random_ints(std::vector numbers, int x) { diff --git a/src/simulate_traits.h b/src/simulate_traits.h index ae73339..b302043 100644 --- a/src/simulate_traits.h +++ b/src/simulate_traits.h @@ -13,10 +13,10 @@ #include "count_data.h" #include "genotype.h" #include "read_genotypes.h" -#ifndef MMER_SIMULATE_TRAITS_H -#define MMER_SIMULATE_TRAITS_H +#ifndef SME_SIMULATE_TRAITS_H +#define SME_SIMULATE_TRAITS_H -#endif // MMER_SIMULATE_TRAITS_H +#endif // SME_SIMULATE_TRAITS_H std::vector draw_random_ints(std::vector numbers, int x); diff --git a/src/mme.cpp b/src/sme.cpp similarity index 97% rename from src/mme.cpp rename to src/sme.cpp index d7afc9b..1b2653f 100644 --- a/src/mme.cpp +++ b/src/sme.cpp @@ -1,12 +1,12 @@ -/** mmer: An R Package implementation of the Multimodal Marginal Epistasis test +/** sme: An R Package implementation of the Sparse Marginal Epistasis test * with Rcpp Copyright (C) 2024 Julian Stamp This code is licensed under MIT * license (see LICENSE.md for details) - * - * @brief C++ routine of the Multimodal Marginal Epistasis (MME) test. * - * This function implements the Multimodal Marginal Epistasis test using OpenMP for - * parallel processing, Rcpp to interface with R, and Eigen for matrix operations. - * It processes genotype and phenotype data to compute variance components + * @brief C++ routine of the Sparse Marginal Epistasis (SME) test. + * + * This function implements the Sparse Marginal Epistasis test using OpenMP for + * parallel processing, Rcpp to interface with R, and Eigen for matrix operations. + * It processes genotype and phenotype data to compute variance components * and epistatic interactions, enabling statistical inference in genetic studies. * * @param plink_file The base path to PLINK binary files (without extensions) containing genotype data. @@ -19,7 +19,7 @@ * @param n_threads The number of threads to use for parallel computation. * @param gxg_h5_dataset The HDF5 dataset path for gene-gene interaction data. * @param ld_h5_dataset The HDF5 dataset path for linkage disequilibrium data. - * @return An Rcpp::List containing the estimated variance components, their standard errors, and + * @return An Rcpp::List containing the estimated variance components, their standard errors, and * additional metrics for epistatic interactions. * * The returned list includes: @@ -27,7 +27,7 @@ * - `covariance_matrix`: The covariance matrix of the estimates. * - `additional_metrics`: Intermediate statistics computed during the analysis. * - * @note + * @note * - Requires PLINK binary files (.bim, .bed, .fam) for genotype data. * - The phenotype file should be in a plain-text format compatible with the function. * - Utilizes OpenMP for parallelism; ensure OpenMP is supported on your platform. @@ -47,13 +47,13 @@ #include "compute_mom_components.h" #include "count_data.h" #include "initialize_random_vectors.h" -#include "mme.h" +#include "sme.h" #include "read_genotype_mask.h" #include "read_genotypes.h" #include "read_phenotypes.h" // [[Rcpp::export]] -Rcpp::List mme_cpp(std::string plink_file, std::string pheno_file, +Rcpp::List sme_cpp(std::string plink_file, std::string pheno_file, std::string genotype_mask_file, int n_randvecs, int n_blocks, int rand_seed, std::vector gxg_indices, int n_threads, std::string gxg_h5_dataset, std::string ld_h5_dataset) { diff --git a/src/mme.h b/src/sme.h similarity index 93% rename from src/mme.h rename to src/sme.h index 5cae2dd..7988826 100644 --- a/src/mme.h +++ b/src/sme.h @@ -28,7 +28,7 @@ typedef Eigen::Matrix MatrixXdr; -Rcpp::List mme_cpp(std::string plink_file, std::string pheno_file, +Rcpp::List sme_cpp(std::string plink_file, std::string pheno_file, std::string genotype_mask_file, int n_randvecs, int n_blocks, int rand_seed, std::vector gxg_indices, int n_threads, std::string gxg_h5_dataset, std::string ld_h5_dataset); diff --git a/src/testing_utils.cpp b/src/testing_utils.cpp index 1e6cffd..490cc75 100644 --- a/src/testing_utils.cpp +++ b/src/testing_utils.cpp @@ -2,7 +2,7 @@ // this should come from one configuration file std::string testdata_dir = "../../inst/testdata/"; -std::string checkdata_dir = "../../mmer/testdata/"; +std::string checkdata_dir = "../../sme/testdata/"; std::string test_bed = testdata_dir + "test.bed"; std::string test_csv = testdata_dir + "test.csv"; diff --git a/src/testing_utils.h b/src/testing_utils.h index 609da54..65a26ca 100644 --- a/src/testing_utils.h +++ b/src/testing_utils.h @@ -1,7 +1,7 @@ -#ifndef MMER_TESTING_UTILS_H -#define MMER_TESTING_UTILS_H +#ifndef SME_TESTING_UTILS_H +#define SME_TESTING_UTILS_H -#endif // MMER_TESTING_UTILS_H +#endif // SME_TESTING_UTILS_H #include "allocate_memory.h" #include "computation.h" @@ -9,7 +9,7 @@ #include "compute_mom_components.h" #include "genotype.h" #include "initialize_random_vectors.h" -#include "mme.h" +#include "sme.h" #include "read_genotype_mask.h" #include "read_genotypes.h" #include "read_phenotypes.h" diff --git a/tests/testthat.R b/tests/testthat.R index dcfb44b..830a8e5 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -7,6 +7,6 @@ # * https://testthat.r-lib.org/articles/special-files.html library(testthat) -library(mmer) +library(sme) -test_check("mmer") +test_check("sme") diff --git a/tests/testthat/test-cpp.R b/tests/testthat/test-cpp.R index f526b7d..8d8262f 100644 --- a/tests/testthat/test-cpp.R +++ b/tests/testthat/test-cpp.R @@ -1,6 +1,6 @@ # TODO: enable C++ tests. Currently they only work with devtools::test() -# the problem seems to be the test-mqs and test-genotype-masking files import +# the problem seems to be the test-mqs and test-genotype-masking files import # test_utils. change this pattern test_that("C++ tests", { - run_cpp_tests("mmer") + run_cpp_tests("sme") }) diff --git a/tests/testthat/test-mme.R b/tests/testthat/test-mme.R index 5df1a71..94248b2 100644 --- a/tests/testthat/test-mme.R +++ b/tests/testthat/test-mme.R @@ -1,8 +1,8 @@ -test_that("mme end-to-end no mask", { +test_that("sme end-to-end no mask", { # given plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", - package="mmer")) - pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") + package="sme")) + pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") mask_file <- "" gxg_h5_group <- "gxg" ld_h5_group <- "ld" @@ -58,7 +58,7 @@ test_that("mme end-to-end no mask", { "vc_se", vc_names[2:4]) # when - result <- mme(plink_file, + result <- sme(plink_file, pheno_file, mask_file, snp_indices, @@ -78,12 +78,12 @@ test_that("mme end-to-end no mask", { expect_equal(observed_se, se_df, tolerance = 1e-1) }) -test_that("mme end-to-end with mask", { +test_that("sme end-to-end with mask", { # given plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", - package="mmer")) - pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") - mask_file <- system.file("testdata", "test.h5", package="mmer") + package="sme")) + pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") + mask_file <- system.file("testdata", "test.h5", package="sme") gxg_h5_group <- "gxg" ld_h5_group <- "ld" chunksize <- 3 @@ -138,7 +138,7 @@ test_that("mme end-to-end with mask", { "vc_se", vc_names[2:4]) # when - result <- mme(plink_file, + result <- sme(plink_file, pheno_file, mask_file, snp_indices, @@ -157,11 +157,11 @@ test_that("mme end-to-end with mask", { expect_equal(observed_se, se_df, tolerance = 1e-1) }) -test_that("mme end-to-end no mask only one gxg idx", { +test_that("sme end-to-end no mask only one gxg idx", { # given plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", - package="mmer")) - pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") + package="sme")) + pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") gxg_h5_group <- "gxg" ld_h5_group <- "ld" mask_file <- "" @@ -199,7 +199,7 @@ test_that("mme end-to-end no mask only one gxg idx", { "vc_se", vc_names[2:4]) # when - result <- mme(plink_file, + result <- sme(plink_file, pheno_file, mask_file, snp_indices, @@ -219,11 +219,11 @@ test_that("mme end-to-end no mask only one gxg idx", { expect_equal(observed_se, se_df, tolerance = 1e-1) }) -test_that("mme end-to-end no mask - chunksize 1", { +test_that("sme end-to-end no mask - chunksize 1", { # given plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", - package="mmer")) - pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") + package="sme")) + pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") mask_file <- "" gxg_h5_group <- "gxg" ld_h5_group <- "ld" @@ -279,7 +279,7 @@ test_that("mme end-to-end no mask - chunksize 1", { "vc_se", vc_names[2:4]) # when - result <- mme(plink_file, + result <- sme(plink_file, pheno_file, mask_file, snp_indices, @@ -299,12 +299,12 @@ test_that("mme end-to-end no mask - chunksize 1", { expect_equal(observed_se, se_df, tolerance = 1e-1) }) -test_that("mme end-to-end but with mask - chunksize 1", { +test_that("sme end-to-end but with mask - chunksize 1", { # given plink_file <- gsub("\\.bed", "", system.file("testdata", "test.bed", - package="mmer")) - pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="mmer") - mask_file <- system.file("testdata", "test.h5", package="mmer") + package="sme")) + pheno_file <- system.file("testdata", "test_h2_0.5.pheno", package="sme") + mask_file <- system.file("testdata", "test.h5", package="sme") gxg_h5_group <- "gxg" ld_h5_group <- "ld" chunksize <- 1 @@ -359,7 +359,7 @@ test_that("mme end-to-end but with mask - chunksize 1", { "vc_se", vc_names[2:4]) # when - result <- mme(plink_file, + result <- sme(plink_file, pheno_file, mask_file, snp_indices, diff --git a/tests/testthat/test-simulate_traits.R b/tests/testthat/test-simulate_traits.R index c301fdb..a734059 100644 --- a/tests/testthat/test-simulate_traits.R +++ b/tests/testthat/test-simulate_traits.R @@ -3,13 +3,13 @@ test_that("simulate_traits works", { plink_file <- gsub("\\.bed", "", - system.file("testdata", "test.bed", package = "mmer")) + system.file("testdata", "test.bed", package = "sme")) out_file <- tempfile() additive_heritability <- 0.3 gxg_heritability <- 0.1 additive_snps <- sort(sample(1:100, 50, replace = F)) gxg_group_1 <- sort(sample(additive_snps, 10, replace = F)) - gxg_group_2 <- sort(sample(setdiff(additive_snps, gxg_group_1), 10, + gxg_group_2 <- sort(sample(setdiff(additive_snps, gxg_group_1), 10, replace = F)) target_mean <- 0 target_var <- 1 @@ -36,7 +36,7 @@ test_that("simulate_traits works for zero gxg heritability", { plink_file <- gsub("\\.bed", "", - system.file("testdata", "test.bed", package = "mmer")) + system.file("testdata", "test.bed", package = "sme")) out_file <- tempfile() additive_heritability <- 0.3 gxg_heritability <- 0.0 diff --git a/vignettes/mmer.Rmd b/vignettes/sme.Rmd similarity index 75% rename from vignettes/mmer.Rmd rename to vignettes/sme.Rmd index b607e01..165ab89 100644 --- a/vignettes/mmer.Rmd +++ b/vignettes/sme.Rmd @@ -1,8 +1,8 @@ --- -title: "How To Use the Multimodal Marginal Epistasis Test" +title: "How To Use the Sparse Marginal Epistasis Test" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{How To Use the Multimodal Marginal Epistasis Test} + %\VignetteIndexEntry{How To Use the Sparse Marginal Epistasis Test} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -11,76 +11,76 @@ vignette: > knitr::opts_chunk$set( collapse = TRUE, comment = "#>", - message = FALSE, + message = FALSE, warning = FALSE ) ``` -The multimodal marginal epistasis (MME) test performs a genome-wide search for -SNPs involved in genetic interactions while conditioning on information derived +The multimodal marginal epistasis (SME) test performs a genome-wide search for +SNPs involved in genetic interactions while conditioning on information derived from functional genomic data. -By examining one SNP at a time, MME fits a linear mixed model to test for +By examining one SNP at a time, SME fits a linear mixed model to test for marginal epistasis. -It explicitly models the combined additive effects from all SNPs a marginal +It explicitly models the combined additive effects from all SNPs a marginal epistatic effect that represents pairwise interactions involving a test SNP. -The key to the MME formulation is that the interaction between the test SNP and +The key to the SME formulation is that the interaction between the test SNP and other SNPs may be masked depending on additional information. Masking interactions that do not contribute to trait variance both maximizes the -power of the inference as well as realizes the computational efficiency needed +power of the inference as well as realizes the computational efficiency needed to analyze human Biobank scale data. -This pages presents a toy example to show case what insights the implementation +This pages presents a toy example to show case what insights the implementation of the test provides. - -**Figure 1. ** MME performs a genome-wide search for SNPs involved in genetic -interactions while conditioning on information derived from functional genomic -data. MME has improved power to detect marginal epistasis and runs 10x to 90x + +**Figure 1. ** SME performs a genome-wide search for SNPs involved in genetic +interactions while conditioning on information derived from functional genomic +data. SME has improved power to detect marginal epistasis and runs 10x to 90x faster than state-of-the-art methods. -## Run MME with PLINK data +## Run SME with PLINK data ```{r setup} -library(mmer) +library(sme) library(dplyr) library(ggplot2) ``` ### Data Requirements and File Formats -MME is implemented in R and requires your genetic data to be in PLINK format, +SME is implemented in R and requires your genetic data to be in PLINK format, which consists of three files: - `.bim`: Contains SNP information - `.bed`: Contains genetic data - `.fam`: Contains sample information -**Note:** `mme()` cannot handle missing genotypes. Prior to running `mme()`, +**Note:** `sme()` cannot handle missing genotypes. Prior to running `sme()`, use PLINK to remove variants with missing genotypes or impute them. Additionally, your phenotype (trait) data should be in a separate file following PLINK's phenotype format. -The `mme()` function includes parameters that let you control memory usage and +The `sme()` function includes parameters that let you control memory usage and computational resources. For detailed guidance on optimizing these settings for -your system, please see our tutorial -[How To Optimize the Memory Requirements of MME](articles/tutorial-memory-optimization.html). +your system, please see our tutorial +[How To Optimize the Memory Requirements of SME](articles/tutorial-memory-optimization.html). ### Specifying SNPs for Analysis -When selecting which SNPs to analyze, you must provide their positions as -**1-based indices**. These indices correspond to the row numbers in your +When selecting which SNPs to analyze, you must provide their positions as +**1-based indices**. These indices correspond to the row numbers in your `.bim` file, where the first SNP is index 1, the second is index 2, and so on. -For complete details about all function parameters, please refer to the -documentation of the `mme()` function. +For complete details about all function parameters, please refer to the +documentation of the `sme()` function. -```{r run_mme, eval = FALSE} +```{r run_sme, eval = FALSE} # File inputs plink_file <- "path/to/plink/file" pheno_file <- "path/to/pheno/file" @@ -96,7 +96,7 @@ n_threads <- 5 n_snps <- 100 snp_indices <- 1:n_snps -mme_result <- mme( +sme_result <- sme( plink_file, pheno_file, mask_file, @@ -110,34 +110,34 @@ mme_result <- mme( ``` ```{r assign_data, include = FALSE} -mme_result <- getting_started +sme_result <- getting_started ``` -This analysis uses simulated data for demonstration purposes. +This analysis uses simulated data for demonstration purposes. We simulated synthetic phenotypes from 5000 synthetic genotypes with 6000 SNPs. -If you would like to learn how to simulate data, please refer to our tutorial +If you would like to learn how to simulate data, please refer to our tutorial [How To Simulate Traits](articles/tutorial-simulate-traits.html). ### Understanding the Results -When you call the `mme()` function, it returns a list containing multiple -elements. The most important one is called `summary`, which contains the main -analysis results. These results are formatted as tidy data, making them -compatible with popular R packages like `ggplot2` and `dplyr` for further +When you call the `sme()` function, it returns a list containing multiple +elements. The most important one is called `summary`, which contains the main +analysis results. These results are formatted as tidy data, making them +compatible with popular R packages like `ggplot2` and `dplyr` for further analysis and visualization. ### Visualizing Genomic Associations -We use Manhattan plots to visualize genome-wide analyses because they -effectively highlight strong associations between genetic variants and -traits. In this case, the Manhattan plot specifically shows statistical +We use Manhattan plots to visualize genome-wide analyses because they +effectively highlight strong associations between genetic variants and +traits. In this case, the Manhattan plot specifically shows statistical epistasis (interactions between genes). For reference, we've marked the -true causal SNPs (Single Nucleotide Polymorphisms) in green on the +true causal SNPs (Single Nucleotide Polymorphisms) in green on the plot - these are the genetic variants we included in our simulation as having real effects. ```{r manhattan_plot, fig.alt="Manhattan plot to illustrate the multimodal marginal epistasis test"} -mme_result$summary %>% +sme_result$summary %>% ggplot(aes( x = index, y = -log10(p), @@ -150,7 +150,7 @@ mme_result$summary %>% ### Understanding Variance Components and Effect Sizes -MME estimates how much of the total trait variation can be explained by genetic +SME estimates how much of the total trait variation can be explained by genetic interactions. In this simulation, we set the Phenotypic Variance Explained (PVE) to 5% for each SNP involved in epistatic interactions. @@ -165,11 +165,11 @@ The dashed line marks the true 5% PVE level we used in the simulation, allowing you to see how accurately the method estimated the actual effect sizes. ```{r pve_plot, fig.alt="PVE plot to illustrate the multimodal marginal epistasis test"} -mme_result$summary %>% +sme_result$summary %>% ggplot(aes(x = true_gxg_snp, y = pve, fill = true_gxg_snp)) + geom_boxplot() + geom_hline(yintercept = 0.05, color = "grey40", linetype = "dashed") + - annotate("text", x = 0.8, y = 0.055, + annotate("text", x = 0.8, y = 0.055, label = "True per SNP epistatic PVE", color = "black") + xlab("Epistatic SNP") + ylab("Phenotypic Variance Explained") + @@ -178,7 +178,7 @@ mme_result$summary %>% ### Narrow Sense Heritability Estimates -The MME method uses a linear mixed model to separate different sources of trait +The SME method uses a linear mixed model to separate different sources of trait variation. One key component it estimates is narrow sense heritability ($h^2$), which measures how much trait variation can be explained by additive genetic effects. @@ -191,22 +191,22 @@ The plot below breaks down the estimated sources of trait variation: In our simulation, we set the true narrow sense heritability to 30%, shown as a dashed line in the plot. This reference line helps you evaluate how accurately -MME estimated the genetic components of trait variation. +SME estimated the genetic components of trait variation. ```{r h2_plot, fig.alt="h2 plot to illustrate the multimodal marginal epistasis test"} -mme_result$vc_estimate %>% +sme_result$vc_estimate %>% ggplot(aes(x = component, y = vc_estimate, fill = component)) + geom_boxplot() + geom_hline(yintercept = 0.3, color = "grey40", linetype = "dashed") + - annotate("text", x = 0.7, y = 0.33, + annotate("text", x = 0.7, y = 0.33, label = expression("True " * h^2), color = "black") + xlab("Component") + ylab("Variance Component Estimate") + theme(legend.position = "none") ``` -The estimate of the narrow-sense heritability $h^2$ is much less variable +The estimate of the narrow-sense heritability $h^2$ is much less variable because it is always informed by the same genetic relatedness matrix. In this small data example it overestimates the heritability but it is unbiased in general. diff --git a/vignettes/study-erythroid-differentiation-data.Rmd b/vignettes/study-erythroid-differentiation-data.Rmd index 848c4e4..3aebb80 100644 --- a/vignettes/study-erythroid-differentiation-data.Rmd +++ b/vignettes/study-erythroid-differentiation-data.Rmd @@ -11,19 +11,19 @@ vignette: > knitr::opts_chunk$set( collapse = TRUE, comment = "#>", - message = FALSE, + message = FALSE, warning = FALSE ) ``` ```{r setup} library(GenomicRanges) -library(mmer) +library(sme) ``` # DNAse I hypersensitive sites of erythroid differentiation reveal statistical epistasis in human hematology traits -We apply MME to hematology traits of white British individuals from the +We apply SME to hematology traits of white British individuals from the UK Biobank. After quality control, the remaining data are 349,411 individuals and 543,813 SNPs of common variants. We select the traits mean corpuscular hemoglobin (MCH), mean corpuscular hemoglobin concentration, mean @@ -45,9 +45,9 @@ HCT, is not informed by functional data of erythropoiesis. ## Mask File Preparation -The external data sources used in this study represented genomic intervals +The external data sources used in this study represented genomic intervals of DHS regions and LD blocks. In the following we mock this data to illustrate -how to create a mask file for `mme()`. +how to create a mask file for `sme()`. See [How To Create a Mask File](articles/tutorial-create-mask-file.html) for more details. @@ -106,7 +106,7 @@ dhs_data <- dhs_data[!duplicated(dhs_data$index), ] Of the 543,813 SNPs in our data, 4,932 are located in the DHS regions. The DHS regions in this data are distributed along the whole genome. To test for -marginal epistasis with MME we consider the variants in the DHS regions +marginal epistasis with SME we consider the variants in the DHS regions important. Next we map the `PLINK` data to the LD blocks. @@ -125,8 +125,8 @@ ld_overlaps <- findOverlaps(query = bim_gr, subject = ld_gr) With these objects, we can create the mask file. With larger data, we recommend splitting the `PLINK` variants that are analyzed into -batches, create one mask file per batch, and submit one job per batch on a -High Peformance Cluster. +batches, create one mask file per batch, and submit one job per batch on a +High Peformance Cluster. ```{r write_mask} output_file <- tempfile() @@ -140,22 +140,22 @@ create_hdf5_file(output_file) for (j in bim_data$index - 1) { # 0-base index for C++ # Write DHS mask gxg_ds <- sprintf("%s/%d", gxg_group, j) - write_hdf5_dataset(file_name = output_file, - dataset_name = gxg_ds, + write_hdf5_dataset(file_name = output_file, + dataset_name = gxg_ds, gxg_variants) - + # Find LD block of focal SNP focal_gr <- ld_gr[subjectHits(ld_overlaps[j,])] - + # Find variants in LD block of focal SNP focal_ld <- findOverlaps(query = bim_gr, subject = focal_gr) ld_data <- bim_data[queryHits(focal_ld),] ld_variants <- ld_data$index - 1 # 0-base index for C++ - + # Write LD mask ld_ds <- sprintf("%s/%d", ld_group, j) - write_hdf5_dataset(file_name = output_file, - dataset_name = ld_ds, + write_hdf5_dataset(file_name = output_file, + dataset_name = ld_ds, ld_variants) } @@ -163,10 +163,10 @@ dhs_indices <- read_hdf5_dataset(file_name = output_file, dataset_name = gxg_ds) print(sprintf("DHS indices: %s", paste(dhs_indices, collapse = ", "))) ``` -With this mask file we can run MME. +With this mask file we can run SME. -```{r run_mme, eval = FALSE} -mme_result <- mme( +```{r run_sme, eval = FALSE} +sme_result <- sme( plink_file = "/path/to/plink/data", pheno_file = "/path/to/pheno/data", mask_file = "/path/to/mask/file", @@ -186,8 +186,8 @@ previously discovered for non-additive gene action related to erythropoiesis and RBC traits. -# Erythroid differentiation DHS sites MME analysis -**Figure 1.** Manhattan plot of the MME analysis. The dashed blue line is the +# Erythroid differentiation DHS sites SME analysis +**Figure 1.** Manhattan plot of the SME analysis. The dashed blue line is the significance threshold after Bonferroni correction. The strongest association in the trait MCH, SNP rs4711092 ($P = @@ -196,7 +196,7 @@ gene secretagogin (\textit{SCGN}). The gene \textit{SCGN} regulates exocytosis by interacting with two soluble NSF adaptor proteins (\textit{SNAP-25} and \textit{SNAP-23}) and is critical for cell growth in some tissues. -A total of five SNPs which MME significantly associates +A total of five SNPs which SME significantly associates with MCH (strongest association with rs9366624 $P = \num{1.8e-9}$, PVE 1.1\%) are in the gene capping protein regulator and myosin 1 linker 1 (\textit{CARMIL1}). @@ -214,7 +214,7 @@ The strongest association in the trait MCV, SNP rs9276 ($P = \num{9.09e-10}$, PVE 0.24\%) maps to the gene \textit{HLA-DBP1} of the major histocompatibility complex. With the SNP rs9366624 ($P = \num{1.86e-8}$, PVE 0.8\%), also the gene \textit{CARMIL1} is significantly associated with the trait for marginal -epistasis. The complete list of significant associations produced by MME is +epistasis. The complete list of significant associations produced by SME is reported in Tab. 1. @@ -234,9 +234,9 @@ reported in Tab. 1. -Fitting the linear mixed model of MME also produces narrow-sense heritability +Fitting the linear mixed model of SME also produces narrow-sense heritability estimates equivalent to RHE regression. The heritability -estimates of MME for the four traits in this study are similar +estimates of SME for the four traits in this study are similar to heritability estimates found in the literature(Tab. 2). | **Trait** | **$h^2$** | @@ -245,14 +245,14 @@ to heritability estimates found in the literature(Tab. 2). | MCH | 0.56 (0.03) | | MCHC | 0.14 (0.01) | | MCV | 0.52 (0.03) | -**Table 2.** Narrow-sense heritability ($h^2$) estimates in the MME analysis. +**Table 2.** Narrow-sense heritability ($h^2$) estimates in the SME analysis. # References -- Stamp J, Pattilo-Smith S, Weinreich D & Crawford L (2024). Integration of +- Stamp J, Pattilo-Smith S, Weinreich D & Crawford L (2024). Integration of functional genomic maps enables genome-wide detection of epistasis in human complex traits. bioRXiv. -- Georgolopoulos, G. GEO Data Set: Discrete regulatory modules instruct - hematopoietic lineage commitment and differentiation +- Georgolopoulos, G. GEO Data Set: Discrete regulatory modules instruct + hematopoietic lineage commitment and differentiation (2024). # SessionInfo diff --git a/vignettes/tutorial-cite-us.Rmd b/vignettes/tutorial-cite-us.Rmd index abac79a..581d5d9 100644 --- a/vignettes/tutorial-cite-us.Rmd +++ b/vignettes/tutorial-cite-us.Rmd @@ -17,24 +17,24 @@ knitr::opts_chunk$set( If you use this software in your research, please cite the references listed below. -## The Multimodal Marginal Epistasis Test (MME) +## The Sparse Marginal Epistasis Test (SME) -Stamp J, Pattilo-Smith S, Weinreich D & Crawford L (2024). Integration of +Stamp J, Pattilo-Smith S, Weinreich D & Crawford L (2024). Integration of functional genomic maps enables genome-wide detection of epistasis in human complex traits. bioRXiv. -Stamp J & Crawford L (2024). mmer: Multimodal Marginal Epistasis Test. -, +Stamp J & Crawford L (2024). sme: Sparse Marginal Epistasis Test. +, ## The multivariate Marginal Epistasis Test (mvMAPIT) -Stamp J, DenAdel A, Weinreich D, Crawford, L (2023). Leveraging the Genetic -Correlation between Traits Improves the Detection of Epistasis in Genome-wide -Association Studies. G3 Genes|Genomes|Genetics 13(8), +Stamp J, DenAdel A, Weinreich D, Crawford, L (2023). Leveraging the Genetic +Correlation between Traits Improves the Detection of Epistasis in Genome-wide +Association Studies. G3 Genes|Genomes|Genetics 13(8), jkad118; doi: -Stamp J, Crawford L (2022). mvMAPIT: Multivariate Genome Wide Marginal +Stamp J, Crawford L (2022). mvMAPIT: Multivariate Genome Wide Marginal Epistasis Test. , diff --git a/vignettes/tutorial-create-mask-file.Rmd b/vignettes/tutorial-create-mask-file.Rmd index 60463de..37e7325 100644 --- a/vignettes/tutorial-create-mask-file.Rmd +++ b/vignettes/tutorial-create-mask-file.Rmd @@ -15,19 +15,19 @@ knitr::opts_chunk$set( ``` ```{r setup} -library(mmer) +library(sme) ``` -The Multimodal Marginal Epistasis test (MME) requires a HDF5 file containing +The Sparse Marginal Epistasis test (SME) requires a HDF5 file containing binary masking data. The effectiveness of the test relies on how informative the mask is for a specific trait. For instance, to test for marginal epistasis related to transcriptional activity, DNase I hypersensitivity sites data can be used to condition the detection on accessible chromatin regions. - +alt="Sparse Marginal Epistasis test (SME) schematic DHS data" /> **Figure 1.** The illustration shows open chromatin data. DNase I hypersensitive sites indicate transcriptional activity. The DNase-seq signal is converted to a binary mask, where genetic variants in inaccessible chromatin regions are @@ -36,7 +36,7 @@ excluded from the covariance matrix for marginal epistasis. ## Mask File Format -The `mme()` function expects the mask data to be in an HDF5 file. The HDF5 +The `sme()` function expects the mask data to be in an HDF5 file. The HDF5 format includes two primary object types: - Datasets - typed multidimensional arrays @@ -53,15 +53,15 @@ The mask data should be organized into the following groups and datasets: - `gxg`: Contains indices of SNPs used to condition the marginal epistasis test, which will be **included**. -The required group names can be configured as input parameters of `mme()`. +The required group names can be configured as input parameters of `sme()`. The defaults are `ld` and `gxg`. **Datasets**: - `ld/`: For each focal SNP ``, this dataset contains indices of SNPs in - the same LD block as that SNP. These SNPs will be **excluded** from the + the same LD block as that SNP. These SNPs will be **excluded** from the gene-by-gene interaction covariance matrix. -- `gxg/`: For each focal SNP ``, this dataset contains indices of SNPs to +- `gxg/`: For each focal SNP ``, this dataset contains indices of SNPs to **include** in the the gene-by-gene interaction covariance matrix for focal SNP ``. @@ -70,13 +70,13 @@ correspond to the zero-based row indices of the PLINK `.bim` file. This includes the dataset index (`` in `gxg/`) and the data itself. This zero-based indexing is necessary because the mask data is read by a C++ subroutine in -`mme()`, which uses zero-based indexing, unlike R's one-based indexing for SNP +`sme()`, which uses zero-based indexing, unlike R's one-based indexing for SNP indices in the function call. ## Creating and Using Mask Files The package provides utility functions to create, write, and read valid mask -files for `mme()`. +files for `sme()`. ```{r} diff --git a/vignettes/tutorial-memory-optimization.Rmd b/vignettes/tutorial-memory-optimization.Rmd index 630241e..3ee5c78 100644 --- a/vignettes/tutorial-memory-optimization.Rmd +++ b/vignettes/tutorial-memory-optimization.Rmd @@ -1,8 +1,8 @@ --- -title: "How To Optimize the Memory Requirements of MME" +title: "How To Optimize the Memory Requirements of SME" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{How To Optimize the Memory Requirements of MME} + %\VignetteIndexEntry{How To Optimize the Memory Requirements of SME} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -11,23 +11,23 @@ vignette: > knitr::opts_chunk$set( collapse = TRUE, comment = "#>", - message = FALSE, + message = FALSE, warning = FALSE ) ``` ```{r setup} -library(mmer) +library(sme) library(tidyr) library(dplyr) library(knitr) ``` -This tutorial outlines the factors that affect memory usage when running the -`mme()` function and how to adjust parameters to optimize memory consumption +This tutorial outlines the factors that affect memory usage when running the +`sme()` function and how to adjust parameters to optimize memory consumption based on your available resources. To estimate memory requirements, use the `approximate_memory_requirements()` function, which provides a rough estimate -of the C++ objects stored in memory during the `mme()` function call, though it +of the C++ objects stored in memory during the `sme()` function call, though it may not reflect exact memory usage. ## Genotype Data Size and Number of Blocks @@ -38,7 +38,7 @@ large datasets, like Biobank-scale data (350k samples and 500k SNPs), loading the entire dataset into memory requires about 1.4TB (assuming double precision for the data matrix), which exceeds most machines' capacities. -To manage large datasets more efficiently, `mme()` reads the genotype data in +To manage large datasets more efficiently, `sme()` reads the genotype data in smaller blocks. The parameter `n_blocks` controls the number of blocks. For instance, with 500k SNPs, setting `n_blocks = 100` will load 5000 SNPs into memory at a time, reducing the memory load and allowing computations to proceed @@ -46,7 +46,7 @@ block by block. ## Number of Random Vectors -The `mme()` function uses a stochastic trace estimator to approximate the trace +The `sme()` function uses a stochastic trace estimator to approximate the trace of matrix products efficiently. The number of random vectors impacts both the accuracy of trace estimates and memory and computational efficiency. @@ -66,14 +66,14 @@ For each set of SNPs analyzed together (in a "chunk"), intermediate results must be stored. Consequently, the memory requirement grows with the chunk size, calculated as: `chunk_size x (sample_size x n_randvecs)`. - + **Figure 1.** Schematic overview illustrating the compuational speedup resulting -from sharing random vectors. +from sharing random vectors. **(a)** In the randomized trace estimates we can identify reusable matrix by vector products. Computing the exact trace of a product of two covariance matrices is prohibitively computationally expensive. Instead, the multimodal -marginal epistasis (MME) test approximates the traces using random vectors $z$. +marginal epistasis (SME) test approximates the traces using random vectors $z$. For the full MQS computation of the point estimates of the variance components, we see that the matrix-by-vector products of the form $Az$ with $A \in \{K, G\}$ appear repeatedly. **(b)** The genetic relatedness matrix $K$ is the same for @@ -122,10 +122,10 @@ parameters <- crossing( estimated_memory <- parameters %>% mutate(memory_gb = round( - approximate_memory_requirements(n_samples, - n_snps, - n_blocks, - n_randvecs, + approximate_memory_requirements(n_samples, + n_snps, + n_blocks, + n_randvecs, chunk_size), 2 )) @@ -133,10 +133,10 @@ estimated_memory <- parameters %>% kable(estimated_memory) ``` -## A Note on the Runtime of MME +## A Note on the Runtime of SME -Despite the computational efficiency of MME, genome-wide testing requires -considerable resources. We recommend to analyze data in batches, and to launch +Despite the computational efficiency of SME, genome-wide testing requires +considerable resources. We recommend to analyze data in batches, and to launch multiple processes simultaneously on a high-performance cluster (HPC). In [this study](articles/study-erythroid-differentiation-data.html), we analyzed 544k SNPs genotype in 350k individuals. We launched 544 slurm jobs @@ -145,9 +145,9 @@ chunk sizes of 250 SNPs. Genome-wide testing of a single trait on an HPC with 960 CPUs and 6840GB of memory available took about 3.5 days. -Multimodal Marginal Epistasis test (MME) runtime -**Figure 2. ** MME has improved power to detect marginal epistasis and runs +Sparse Marginal Epistasis test (SME) runtime +**Figure 2. ** SME has improved power to detect marginal epistasis and runs 10x to 90x faster than state-of-the-art methods. The CPU time was measured on 350,000 individuals. diff --git a/vignettes/tutorial-simulate-traits.Rmd b/vignettes/tutorial-simulate-traits.Rmd index 16fbc26..8fff6e6 100644 --- a/vignettes/tutorial-simulate-traits.Rmd +++ b/vignettes/tutorial-simulate-traits.Rmd @@ -11,13 +11,13 @@ vignette: > knitr::opts_chunk$set( collapse = TRUE, comment = "#>", - message = FALSE, + message = FALSE, warning = FALSE ) ``` ```{r setup} -library(mmer) +library(sme) library(genio) ``` @@ -72,7 +72,7 @@ write_plink( To simulate traits, we need to specify the genetic architecture. E.g., the -function requires us to specify +function requires us to specify - the narrow sense heritability $h^2$ - the indices SNPs contributing to the narrow sense heritability @@ -90,7 +90,7 @@ n_snps_gxg_group <- 5 n_snps_additive <- 100 additive_snps <- sort(sample(1:n_snps, n_snps_additive, replace = F)) gxg_group_1 <- sort(sample(additive_snps, n_snps_gxg_group, replace = F)) -gxg_group_2 <- sort(sample(setdiff(additive_snps, gxg_group_1), +gxg_group_2 <- sort(sample(setdiff(additive_snps, gxg_group_1), n_snps_gxg_group, replace = F)) simulate_traits( @@ -105,7 +105,7 @@ simulate_traits( ``` The variance components of the traits are constructed to match the input. -See Crawford et al. (2017) and +See Crawford et al. (2017) and [mvMAPIT Documentation: Simulate Traits](https://lcrawlab.github.io/mvMAPIT/articles/tutorial-simulations.html) for a full description of the simulation scheme.