Contents


Package: RAIDS
Authors: Pascal Belleau [cre, aut] (https://orcid.org/0000-0002-0802-1071), Astrid Deschênes [aut] (https://orcid.org/0000-0001-7846-6749), David A. Tuveson [aut] (https://orcid.org/0000-0002-8017-2712), Alexander Krasnitz [aut]
Version: 1.0.0
Compiled date: 2023-10-24
License: Apache License (>= 2)

Licensing

The RAIDS package and the underlying RAIDS code are distributed under
the https://opensource.org/licenses/Apache-2.0 license. You are free to use and redistribute this software.



Citing

If you use the RAIDS package for a publication, we would ask you to cite the following:

Pascal Belleau, Astrid Deschênes, Nyasha Chambwe, David A. Tuveson, Alexander Krasnitz; Genetic Ancestry Inference from Cancer-Derived Molecular Data across Genomic and Transcriptomic Platforms. Cancer Res 1 January 2023; 83 (1): 49–58. https://doi.org/10.1158/0008-5472.CAN-22-0682

Introduction

Multiple methods have been implemented to infer ancestry from germline DNA sequence (Price et al. 2006; Pritchard, Stephens, and Donnelly 2000; Alexander, Novembre, and Lange 2009). However, genotyping of DNA from matched normal specimens is not part of standard clinical practice and is not performed routinely outside academic clinical centers. In sum, matched germline DNA sequence is often missing for cancer-derived molecular data. In such cases, having the possibility to infer ancestry from tumor-derived data would be beneficial.

The RAIDS package implements an inference procedure that has been specifically developed to accurately infer genetic ancestry from cancer-derived sequences. The current version can handle cancer-derived sequences of:

The RAIDS package implements a data synthesis method that, for any given cancer-derived sequence profile, enables on the one hand, profile-specific inference parameter optimization and on the other hand, a profile-specific inference accuracy estimate.



Installation

To install this package from Bioconductor, start R (version 4.3 or later) and enter:

if (!requireNamespace("BiocManager", quietly = TRUE))
        install.packages("BiocManager")

BiocManager::install("RAIDS")



Main Steps

This is an overview of genetic ancestry inference from cancer-derived molecular data:

An overview of the genetic ancestry inference process.

Figure 1: An overview of the genetic ancestry inference process

The main steps are:

Step 1. Format reference data from the population reference dataset (optional)

Step 2.1 Optimize ancestry inference parameters

Step 2.2 Infer ancestry for the subjects of the external study

These steps are described in detail in the following. Steps 2.1 and 2.2 can be run together using one wrapper function.



Main Step - Ancestry Inference

A wrapper function encapsulates multiple steps of the workflow.

Final step - The wrapper function encapsulates multiple steps of the workflow.

Figure 2: Final step - The wrapper function encapsulates multiple steps of the workflow

In summary, the wrapper function generates the synthetic dataset and uses it to selected the optimal parameters before calling the genetic ancestry on the current profiles.

According to the type of input data (RNA or DNA), a specific wrapper function is available.


DNA Data - Wrapper function to run ancestry inference on DNA data

The wrapper function, called runExomeAncestry(), requires 4 files as input:

  • The population reference GDS file
  • The population reference SNV Annotation GDS file
  • The Profile SNP file (one per sample present in the study)
  • The Profile PED RDS file (one file with information for all profiles in the study)

In addition, a data.frame containing the general information about the study is also required. The data.frame must contain those 3 columns:

  • study.id: The study identifier (example: TCGA-BRCA).
  • study.desc: The description of the study.
  • study.platform: The type of sequencing (example: RNA-seq).


Population reference files

For demonstration purpose, a small population reference GDS file (called ex1_good_small_1KG.gds) and a small population reference SNV Annotation GDS file (called ex1_good_small_1KG_Annot.gds) are included in this package. Beware that those two files should not be used to run a real ancestry inference.The results obtained with those files won’t be reliable.

The required population reference GDS file and population reference SNV Annotation GDS file should be stored in the same directory. In the example below, this directory is referred to as pathReference.


Profile SNP file

The Profile SNP file can be either in a VCF format or in a generic format.

The Profile SNP VCF file follows the VCF standard with at least those genotype fields: GT, AD and DP. The identifier of the genotype in the VCF file must correspond to the profile identifier Name.ID. The SNVs must be germline variants and should include the genotype of the wild-type homozygous at the selected positions in the reference. One file per profile is need and the VCF file must be gzipped.

Note that the name assigned to the Profile SNP VCF file has to correspond to the profile identifier Name.ID in the following analysis. For example, a SNP file called “Sample.01.vcf.gz” would be associated to the “Sample.01” profile.

A generic SNP file can replace the VCF file. The Profile SNP Generic file format is coma separated and the mandatory columns are:

  • Chromosome: The name of the chromosome
  • Position: The position on the chromosome
  • Ref: The reference nucleotide
  • Alt: The aternative nucleotide
  • Count: The total count
  • File1R: The count for the reference nucleotide
  • File1A: The count for the alternative nucleotide

Beware that the starting position in the population reference GDS File is zero (like BED files). The Profile SNP Generic file should also start at position zero.

Note that the name assigned to the Profile SNP Generic file has to correspond to the profile identifier Name.ID in the following analysis. For example, a SNP file called “Sample.01.generic.txt.gz” would be associated to the “Sample.01” profile.


Profile PED RDS file

The Profile PED RDS file must contain a data.frame describing all the profiles to be analyzed. These 5 mandatory columns:

  • Name.ID: The unique sample identifier. The associated profile SNP file should be called “Name.ID.txt.gz”.
  • Case.ID: The patient identifier associated to the sample.
  • Sample.Type: The information about the profile tissue source (primary tumor, metastatic tumor, normal, etc..).
  • Diagnosis: The donor’s diagnosis.
  • Source: The source of the profile sequence data (example: dbGAP_XYZ).

Important: The row names of the data.frame must be the profiles Name.ID.

This file is referred to as the Profile PED RDS file (PED for pedigree). Alternatively, the PED information can be saved in another type of file (CVS, etc..) as long as the data.frame information can be regenerated in R (with read.csv() or else).


Example

This example run an ancestry inference on an exome sample. Both population reference files are demonstration files and should not be used for a real ancestry inference. Beware that running an ancestry inference on real data will take longer to run.

#############################################################################
## Load required packages
#############################################################################
library(RAIDS)    
library(gdsfmt)

## Path to the demo 1KG GDS file is located in this package
dataDir <- system.file("extdata", package="RAIDS")

#############################################################################
## Load the information about the profile
#############################################################################
data(demoPedigreeEx1)
head(demoPedigreeEx1)
##     Name.ID Case.ID   Sample.Type Diagnosis     Source
## ex1     ex1     ex1 Primary Tumor    Cancer Databank B
#############################################################################
## The population reference GDS file and SNV Annotation GDS file
## need to be located in the same directory.
## Note that the population reference GDS file used for this example is a
## simplified version and CANNOT be used for any real analysis
#############################################################################
pathReference <- file.path(dataDir, "tests")

fileGDS <- file.path(pathReference, "ex1_good_small_1KG.gds")
fileAnnotGDS <- file.path(pathReference, "ex1_good_small_1KG_Annot.gds")

#############################################################################
## A data frame containing general information about the study
## is also required. The data frame must have
## those 3 columns: "study.id", "study.desc", "study.platform"
#############################################################################
studyDF <- data.frame(study.id="MYDATA",
                   study.desc="Description",
                   study.platform="PLATFORM",
                   stringsAsFactors=FALSE)

#############################################################################
## The Sample SNP VCF files (one per sample) need
## to be all located in the same directory.
#############################################################################
pathGeno <- file.path(dataDir, "example", "snpPileup")

#############################################################################
## Fix RNG seed to ensure reproducible results
#############################################################################
set.seed(3043)

#############################################################################
## Select the profiles from the population reference GDS file for 
## the synthetic data.
## Here we select 2 profiles from the simplified 1KG GDS for each 
## subcontinental-level.
## Normally, we use 30 profile for each 
## subcontinental-level but it is too big for the example.
## The 1KG files in this example only have 6 profiles for each 
## subcontinental-level (for demo purpose only).
#############################################################################
gds1KG <- snpgdsOpen(fileGDS)
dataRef <- select1KGPop(gds1KG, nbProfiles=2L)
closefn.gds(gds1KG)

## GenomeInfoDb and BSgenome are required libraries to run this example
if (requireNamespace("GenomeInfoDb", quietly=TRUE) &&
      requireNamespace("BSgenome.Hsapiens.UCSC.hg38", quietly=TRUE)) {

    ## Chromosome length information
    ## chr23 is chrX, chr24 is chrY and chrM is 25
    chrInfo <- GenomeInfoDb::seqlengths(BSgenome.Hsapiens.UCSC.hg38::Hsapiens)[1:25]

    ###########################################################################
    ## The path where the Sample GDS files (one per sample)
    ## will be created needs to be specified.
    ###########################################################################
    pathProfileGDS <- file.path(tempdir(), "exampleDNA", "out.tmp")

    ###########################################################################
    ## The path where the result files will be created needs to 
    ## be specified
    ###########################################################################
    pathOut <- file.path(tempdir(), "exampleDNA", "res.out")

    ## Example can only be run if the current directory is in writing mode
    if (!dir.exists(file.path(tempdir(), "exampleDNA"))) {

        dir.create(file.path(tempdir(), "exampleDNA"))
        dir.create(pathProfileGDS)
        dir.create(pathOut)
    
        #########################################################################
        ## The wrapper function generates the synthetic dataset and uses it 
        ## to selected the optimal parameters before calling the genetic 
        ## ancestry on the current profiles.
        ## All important information, for each step, are saved in 
        ## multiple output files.
        ## The 'genoSource' parameter has 2 options depending on how the 
        ##   SNP files have been generated: 
        ##   SNP VCF files have been generated: 
        ##  "VCF" or "generic" (other software)
        ##
        #########################################################################
        runExomeAncestry(pedStudy=demoPedigreeEx1, studyDF=studyDF,
                 pathProfileGDS=pathProfileGDS,
                 pathGeno=pathGeno,
                 pathOut=pathOut,
                 fileReferenceGDS=fileGDS,
                 fileReferenceAnnotGDS=fileAnnotGDS,
                 chrInfo=chrInfo,
                 syntheticRefDF=dataRef,
                 genoSource="VCF")
        list.files(pathOut)
        list.files(file.path(pathOut, demoPedigreeEx1$Name.ID[1]))

        #######################################################################
        ## The file containing the ancestry inference (SuperPop column) and 
        ## optimal number of PCA component (D column)
        ## optimal number of neighbours (K column)
        #######################################################################
        resAncestry <- read.csv(file.path(pathOut, 
                        paste0(demoPedigreeEx1$Name.ID[1], ".Ancestry.csv")))
        print(resAncestry)

        ## Remove temporary files created for this demo
        unlink(pathProfileGDS, recursive=TRUE, force=TRUE)
        unlink(pathOut, recursive=TRUE, force=TRUE)
        unlink(file.path(tempdir(), "exampleDNA"), recursive=TRUE, force=TRUE)
    }
}
##   sample.id D  K SuperPop
## 1       ex1 6 13      EAS



The runExomeAncestry() function generates 3 types of files in the pathOut directory.

  • The ancestry inference CSV file (“.Ancestry.csv” file)
  • The inference information RDS file (“.infoCall.rds” file)
  • The parameter information RDS files from the synthetic inference ("KNN.synt.*.rds" files in a sub-directory)

In addition, a sub-directory (named using the profile ID) is also created.

The inferred ancestry is stored in the ancestry inference CSV file (“.Ancestry.csv” file) which also contains those columns:

  • sample.id: The unique identifier of the sample
  • D: The optimal PCA dimension value used to infer the ancestry
  • k: The optimal number of neighbors value used to infer the ancestry
  • SuperPop: The inferred ancestry



RNA data - Wrapper function to run ancestry inference on RNA data

The process is the same as for the DNA but use the wrapper function called runRNAAncestry(). Internally the data is process differently. It requires 4 files as input:

  • The population reference GDS file
  • The population reference SNV Annotation GDS file
  • The Profile SNP file (one per sample present in the study)
  • The Profile PED RDS file (one file with information for all profiles in the study)

A data.frame containing the general information about the study is also required. The data.frame must contain those 3 columns:

  • study.id: The study identifier (example: TCGA-BRCA).
  • study.desc: The description of the study.
  • study.platform: The type of sequencing (example: RNA-seq).


Population reference files

For demonstration purpose, a small population reference GDS file (called ex1_good_small_1KG.gds) and a small population reference SNV Annotation GDS file (called ex1_good_small_1KG_Annot.gds) are included in this package. Beware that those two files should not be used to run a real ancestry inference.The results obtained with those files won’t be reliable.

The required population reference GDS file and population reference SNV Annotation GDS file should be stored in the same directory. In the example below, this directory is referred to as pathReference.


Profile SNP file

The Profile SNP file can be either in a VCF format or in a generic format.

The Profile SNP VCF file follows the VCF standard with at least those genotype fields: GT, AD and DP. The identifier of the genotype in the VCF file must correspond to the profile identifier Name.ID. The SNVs must be germline variants and should include the genotype of the wild-type homozygous at the selected positions in the reference. One file per profile is need and the VCF file must be gzipped.

Note that the name assigned to the Profile SNP VCF file has to correspond to the profile identifier Name.ID in the following analysis. For example, a SNP file called “Sample.01.vcf.gz” would be associated to the “Sample.01” profile.

A generic SNP file can replace the VCF file. The Profile SNP Generic file format is coma separated and the mandatory columns are:

  • Chromosome: The name of the chromosome
  • Position: The position on the chromosome
  • Ref: The reference nucleotide
  • Alt: The aternative nucleotide
  • Count: The total count
  • File1R: The count for the reference nucleotide
  • File1A: The count for the alternative nucleotide

Beware that the starting position in the population reference GDS File is zero (like BED files). The Profile SNP Generic file should also start at position zero.

Note that the name assigned to the Profile SNP Generic file has to correspond to the profile identifier Name.ID in the following analysis. For example, a SNP file called “Sample.01.generic.txt.gz” would be associated to the “Sample.01” profile.


Profile PED RDS file

The Profile PED RDS file must contain a data.frame describing all the profiles to be analyzed. These 5 mandatory columns:

  • Name.ID: The unique sample identifier. The associated profile SNP file
    should be called “Name.ID.txt.gz”.
  • Case.ID: The patient identifier associated to the sample.
  • Sample.Type: The information about the profile tissue source (primary tumor, metastatic tumor, normal, etc..).
  • Diagnosis: The donor’s diagnosis.
  • Source: The source of the profile sequence data (example: dbGAP_XYZ).

Important: The row names of the data.frame must be the profiles Name.ID.

This file is referred to as the Profile PED RDS file (PED for pedigree). Alternatively, the PED information can be saved in another type of file (CVS, etc..) as long as the data.frame information can be regenerated in R (with read.csv() or else).


Example

This example run an ancestry inference on an RNA sample. Both population reference files are demonstration files and should not be used for a real ancestry inference. Beware that running an ancestry inference on real data will take longer to run.

#############################################################################
## Load required packages
#############################################################################
library(RAIDS)    
library(gdsfmt)

## Path to the demo 1KG GDS file is located in this package
dataDir <- system.file("extdata", package="RAIDS")

#############################################################################
## Load the information about the profile
#############################################################################
data(demoPedigreeEx1)
head(demoPedigreeEx1)
##     Name.ID Case.ID   Sample.Type Diagnosis     Source
## ex1     ex1     ex1 Primary Tumor    Cancer Databank B
#############################################################################
## The population reference GDS file and SNV Annotation GDS file
## need to be located in the same directory.
## Note that the population reference GDS file used for this example is a
## simplified version and CANNOT be used for any real analysis
#############################################################################
pathReference <- file.path(dataDir, "tests")

fileGDS <- file.path(pathReference, "ex1_good_small_1KG.gds")
fileAnnotGDS <- file.path(pathReference, "ex1_good_small_1KG_Annot.gds")

#############################################################################
## A data frame containing general information about the study
## is also required. The data frame must have
## those 3 columns: "study.id", "study.desc", "study.platform"
#############################################################################
studyDF <- data.frame(study.id="MYDATA",
                   study.desc="Description",
                   study.platform="PLATFORM",
                   stringsAsFactors=FALSE)

#############################################################################
## The Sample SNP VCF files (one per sample) need
## to be all located in the same directory.
#############################################################################
pathGeno <- file.path(dataDir, "example", "snpPileupRNA")

#############################################################################
## Fix RNG seed to ensure reproducible results
#############################################################################
set.seed(3043)

#############################################################################
## Select the profiles from the population reference GDS file for 
## the synthetic data.
## Here we select 2 profiles from the simplified 1KG GDS for each 
## subcontinental-level.
## Normally, we use 30 profile for each 
## subcontinental-level but it is too big for the example.
## The 1KG files in this example only have 6 profiles for each 
## subcontinental-level (for demo purpose only).
#############################################################################
gds1KG <- snpgdsOpen(fileGDS)
dataRef <- select1KGPop(gds1KG, nbProfiles=2L)
closefn.gds(gds1KG)

## GenomeInfoDb and BSgenome are required libraries to run this example
if (requireNamespace("GenomeInfoDb", quietly=TRUE) &&
      requireNamespace("BSgenome.Hsapiens.UCSC.hg38", quietly=TRUE)) {

  ## Chromosome length information
  ## chr23 is chrX, chr24 is chrY and chrM is 25
  chrInfo <- GenomeInfoDb::seqlengths(BSgenome.Hsapiens.UCSC.hg38::Hsapiens)[1:25]

  #############################################################################
  ## The path where the Sample GDS files (one per sample)
  ## will be created needs to be specified.
  #############################################################################
  pathProfileGDS <- file.path(tempdir(), "exampleRNA", "outRNA.tmp")

  #############################################################################
  ## The path where the result files will be created needs to 
  ## be specified
  #############################################################################
  pathOut <- file.path(tempdir(), "exampleRNA", "resRNA.out")

  ## Example can only be run if the current directory is in writing mode
  if (!dir.exists(file.path(tempdir(), "exampleRNA"))) {

      dir.create(file.path(tempdir(), "exampleRNA"))
      dir.create(pathProfileGDS)
      dir.create(pathOut)
    
      #########################################################################
      ## The wrapper function generates the synthetic dataset and uses it 
      ## to selected the optimal parameters before calling the genetic 
      ## ancestry on the current profiles.
      ## All important information, for each step, are saved in 
      ## multiple output files.
      ## The 'genoSource' parameter has 2 options depending on how the 
      ##   SNP files have been generated: 
      ##   SNP VCF files have been generated: 
      ##  "VCF" or "generic" (other software)
      #########################################################################
      runRNAAncestry(pedStudy=demoPedigreeEx1, studyDF=studyDF,
                    pathProfileGDS=pathProfileGDS,
                    pathGeno=pathGeno,
                    pathOut=pathOut,
                    fileReferenceGDS=fileGDS,
                    fileReferenceAnnotGDS=fileAnnotGDS,
                    chrInfo=chrInfo,
                    syntheticRefDF=dataRef,
                    blockTypeID="GeneS.Ensembl.Hsapiens.v86",
                    genoSource="VCF")
    
      list.files(pathOut)
      list.files(file.path(pathOut, demoPedigreeEx1$Name.ID[1]))

      #########################################################################
      ## The file containing the ancestry inference (SuperPop column) and 
      ## optimal number of PCA component (D column)
      ## optimal number of neighbours (K column)
      #########################################################################
      resAncestry <- read.csv(file.path(pathOut, 
                        paste0(demoPedigreeEx1$Name.ID[1], ".Ancestry.csv")))
      print(resAncestry)

      ## Remove temporary files created for this demo
      unlink(pathProfileGDS, recursive=TRUE, force=TRUE)
      unlink(pathOut, recursive=TRUE, force=TRUE)
      unlink(file.path(tempdir(), "example"), recursive=TRUE, force=TRUE)
  }
}
##   sample.id D  K SuperPop
## 1       ex1 6 13      EAS



The runRNAAncestry() function generates 3 types of files in the pathOut directory.

  • The ancestry inference CSV file (“.Ancestry.csv” file)
  • The inference information RDS file (“.infoCall.rds” file)
  • The parameter information RDS files from the synthetic inference ("KNN.synt.*.rds" files in a sub-directory)

In addition, a sub-directory (named using the profile ID) is also created.

The inferred ancestry is stored in the ancestry inference CSV file (“.Ancestry.csv” file) which also contains those columns:

  • sample.id: The unique identifier of the sample
  • D: The optimal PCA dimension value used to infer the ancestry
  • k: The optimal number of neighbors value used to infer the ancestry
  • SuperPop: The inferred ancestry



Format population reference dataset (optional)

Step 1 - Formatting the information from the population reference dataset (optional)

Figure 3: Step 1 - Formatting the information from the population reference dataset (optional)

A population reference dataset with known ancestry is required to infer ancestry. The population must be large enough to ensure ???

Three important reference files, containing formatted information about the reference dataset, are required:

  • The population reference GDS File
  • The population reference SNV Annotation GDS file
  • The population reference SNV Retained VCF file

The format of those files are described the Population reference dataset GDS files vignette.

The reference files associated to the Cancer Research associated paper are available. Note that these pre-processed files are for 1000 Genomes (1KG), in hg38. The files are available here:

https://labshare.cshl.edu/shares/krasnitzlab/aicsPaper

The size of the 1KG GDS file is 15GB.

The 1KG GDS file is mapped on hg38 (Lowy-Gallego et al. 2019).

This section can be skipped if you choose to use the pre-processed files.



Session info

Here is the output of sessionInfo() in the environment in which this document was compiled:

## R version 4.3.1 (2023-06-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.3 LTS
## 
## Matrix products: default
## BLAS:   /home/biocbuild/bbs-3.18-bioc/R/lib/libRblas.so 
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_GB              LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: America/New_York
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] Matrix_1.6-1.1       XVector_0.42.0       GenomicRanges_1.54.0
##  [4] IRanges_2.36.0       S4Vectors_0.40.0     RAIDS_1.0.0         
##  [7] GENESIS_2.32.0       SNPRelate_1.36.0     gdsfmt_1.38.0       
## [10] knitr_1.44           BiocStyle_2.30.0    
## 
## loaded via a namespace (and not attached):
##   [1] jsonlite_1.8.7                    shape_1.4.6                      
##   [3] magrittr_2.0.3                    TH.data_1.1-2                    
##   [5] estimability_1.4.1                jomo_2.7-6                       
##   [7] GenomicFeatures_1.54.0            logistf_1.26.0                   
##   [9] nloptr_2.0.3                      rmarkdown_2.25                   
##  [11] BiocIO_1.12.0                     zlibbioc_1.48.0                  
##  [13] vctrs_0.6.4                       memoise_2.0.1                    
##  [15] minqa_1.2.6                       Rsamtools_2.18.0                 
##  [17] RCurl_1.98-1.12                   quantsmooth_1.68.0               
##  [19] htmltools_0.5.6.1                 S4Arrays_1.2.0                   
##  [21] progress_1.2.2                    curl_5.1.0                       
##  [23] broom_1.0.5                       pROC_1.18.4                      
##  [25] SparseArray_1.2.0                 mitml_0.4-5                      
##  [27] sass_0.4.7                        bslib_0.5.1                      
##  [29] plyr_1.8.9                        sandwich_3.0-2                   
##  [31] emmeans_1.8.9                     zoo_1.8-12                       
##  [33] cachem_1.0.8                      GenomicAlignments_1.38.0         
##  [35] lifecycle_1.0.3                   iterators_1.0.14                 
##  [37] pkgconfig_2.0.3                   R6_2.5.1                         
##  [39] fastmap_1.1.1                     GenomeInfoDbData_1.2.11          
##  [41] MatrixGenerics_1.14.0             digest_0.6.33                    
##  [43] GWASTools_1.48.0                  AnnotationDbi_1.64.0             
##  [45] RSQLite_2.3.1                     filelock_1.0.2                   
##  [47] fansi_1.0.5                       httr_1.4.7                       
##  [49] abind_1.4-5                       mgcv_1.9-0                       
##  [51] compiler_4.3.1                    bit64_4.0.5                      
##  [53] backports_1.4.1                   BiocParallel_1.36.0              
##  [55] DBI_1.1.3                         pan_1.9                          
##  [57] biomaRt_2.58.0                    MASS_7.3-60                      
##  [59] quantreg_5.97                     rappdirs_0.3.3                   
##  [61] DelayedArray_0.28.0               rjson_0.2.21                     
##  [63] DNAcopy_1.76.0                    tools_4.3.1                      
##  [65] lmtest_0.9-40                     nnet_7.3-19                      
##  [67] glue_1.6.2                        restfulr_0.0.15                  
##  [69] nlme_3.1-163                      grid_4.3.1                       
##  [71] generics_0.1.3                    operator.tools_1.6.3             
##  [73] BSgenome_1.70.0                   class_7.3-22                     
##  [75] formula.tools_1.7.1               ensembldb_2.26.0                 
##  [77] tidyr_1.3.0                       data.table_1.14.8                
##  [79] hms_1.1.3                         xml2_1.3.5                       
##  [81] utf8_1.2.4                        BiocGenerics_0.48.0              
##  [83] GWASExactHW_1.01                  stringr_1.5.0                    
##  [85] foreach_1.5.2                     pillar_1.9.0                     
##  [87] splines_4.3.1                     dplyr_1.1.3                      
##  [89] BiocFileCache_2.10.0              lattice_0.22-5                   
##  [91] survival_3.5-7                    rtracklayer_1.62.0               
##  [93] bit_4.0.5                         SparseM_1.81                     
##  [95] BSgenome.Hsapiens.UCSC.hg38_1.4.5 tidyselect_1.2.0                 
##  [97] SeqVarTools_1.40.0                Biostrings_2.70.0                
##  [99] bookdown_0.36                     ProtGenerics_1.34.0              
## [101] SummarizedExperiment_1.32.0       stats4_4.3.1                     
## [103] xfun_0.40                         Biobase_2.62.0                   
## [105] matrixStats_1.0.0                 stringi_1.7.12                   
## [107] lazyeval_0.2.2                    yaml_2.3.7                       
## [109] boot_1.3-28.1                     evaluate_0.22                    
## [111] codetools_0.2-19                  tibble_3.2.1                     
## [113] BiocManager_1.30.22               cli_3.6.1                        
## [115] rpart_4.1.21                      xtable_1.8-4                     
## [117] jquerylib_0.1.4                   Rcpp_1.0.11                      
## [119] GenomeInfoDb_1.38.0               dbplyr_2.3.4                     
## [121] coda_0.19-4                       png_0.1-8                        
## [123] XML_3.99-0.14                     parallel_4.3.1                   
## [125] MatrixModels_0.5-2                blob_1.2.4                       
## [127] prettyunits_1.2.0                 AnnotationFilter_1.26.0          
## [129] bitops_1.0-7                      lme4_1.1-34                      
## [131] glmnet_4.1-8                      SeqArray_1.42.0                  
## [133] mvtnorm_1.2-3                     VariantAnnotation_1.48.0         
## [135] purrr_1.0.2                       crayon_1.5.2                     
## [137] rlang_1.1.1                       KEGGREST_1.42.0                  
## [139] multcomp_1.4-25                   mice_3.16.0



References

Alexander, D. H., J. Novembre, and K. Lange. 2009. “Fast Model-Based Estimation of Ancestry in Unrelated Individuals.” Genome Res 19 (9): 1655–64. https://doi.org/10.1101/gr.094052.109.

Lowy-Gallego, Ernesto, Susan Fairley, Xiangqun Zheng-Bradley, Magali Ruffier, Laura Clarke, and Paul Flicek. 2019. “Variant calling on the grch38 assembly with the data from phase three of the 1000 genomes project [version 2; peer review: 1 approved, 1 not approved].” Wellcome Open Research 4: 1–42. https://doi.org/10.12688/wellcomeopenres.15126.1.

Price, A. L., N. J. Patterson, R. M. Plenge, M. E. Weinblatt, N. A. Shadick, and D. Reich. 2006. “Principal Components Analysis Corrects for Stratification in Genome-Wide Association Studies.” Nat Genet 38 (8): 904–9. https://doi.org/10.1038/ng1847.

Pritchard, J. K., M. Stephens, and P. Donnelly. 2000. “Inference of Population Structure Using Multilocus Genotype Data.” Genetics 155 (2): 945–59. https://www.ncbi.nlm.nih.gov/pubmed/10835412.