Skip to contents

Meta analysis using GXwasR

Here we will present a tutorial showing how to perform meta analysis utilizing the R package GXwasR.

The example data sets for performing the tutorial can be accessed from “data” folder of the package.

Example Datasets

Example datasets are provided with the package and can be accessed by calling the data() function.

Load the example datasets to perform this tutorial.

## Load library
library(GXwasR)
  1. Two sets of summary GWAS summary statistics in .Rda files will be required to perform this tutorial.
  • Summary_Stat_Ex1.Rda
  • Summary_Stat_Ex2.Rda

Check one of the summary statistics data

data(Summary_Stat_Ex1)
## Visualize three rows and all the columns
Summary_Stat_Ex1[1:3, ]
CHR SNP BP A1 TEST NMISS BETA SE L95 U95 STAT P
1 1 rs143773730 73841 T ADD 125 -0.0789 0.2643 -0.5968 0.439 -0.2986 0.7653
4 1 rs147281566 775125 T ADD 125 -0.3959 1.2380 -2.8230 2.031 -0.3197 0.7492
6 1 rs35854196 863863 A ADD 125 1.0500 0.8858 -0.6864 2.786 1.1850 0.2360

Among these 12 columns, some columns are mandatory for this tutorial, such as: ‘SNP’ (i.e., SNP identifier), ‘BETA’ (i.e., effect-size or logarithm of odds ratio), ‘SE’ (i.e., standard error of BETA), ‘P’ (i.e., p-values) and ‘NMISS’ (i.e., effective sample size). The other columns are, ‘CHR’ (i.e., chromosome code), ‘BP’ (i.e., base pair position), A1 (i.e., disease allele), TEST (i.e., association test type), L95 (i.e., lower limit of 95 percentile confidence interval), U95 (i.e., upper limit of 95 percentile confidence interval) and STAT (i.e., test statistic).

  1. UniqueLoci.Rda: .Rda file with a single column containing SNP names. These could be LD clumped SNPs or any other list of chosen SNPs for Meta analysis.

  2. SNPsPlot.Rda: .Rda file with a single column containing SNP names for the forest plots.

## Call some other libraries for this vignette
library(printr)
library(rmarkdown)

The function for meta analysis:

MetaGWAS()

help(MetaGWAS, package = GXwasR)
#> MetaGWAS: Combining summary-level results from two or more GWA studies
#> into a single estimate.
#> 
#> Description:
#> 
#>      This function combine K sets of GWAS association statistics on
#>      same (or at least similar) phenotype. This function employs
#>      PLINK's (Purcell et al. 2007) inverse variance-based analysis to
#>      run a number of models, including a) Fixed-effect model and b)
#>      Random-effect model, assuming there may be variation between the
#>      genuine underlying effects, i.e., effect size beta. 'This function
#>      also calculates weighted Z-score-based p-values after METAL
#>      (Willer et al. 2010). For more information about the algorithms,
#>      please see the associated paper.
#> 
#> Usage:
#> 
#>      MetaGWAS(
#>        DataDir,
#>        SummData = c(""),
#>        ResultDir = tempdir(),
#>        SNPfile = NULL,
#>        useSNPposition = TRUE,
#>        UseA1 = FALSE,
#>        GCse = TRUE,
#>        plotname = "Meta_Analysis.plot",
#>        pval_filter = "R",
#>        top_snp_pval = 1e-08,
#>        max_top_snps = 6,
#>        chosen_snps_file = NULL,
#>        byCHR = FALSE,
#>        pval_threshold_manplot = 1e-05
#>      )
#>      
#> Arguments:
#> 
#>  DataDir: A character string for the file path of the input files
#>           needed for 'SummData' and 'SNPfile' arguments.
#> 
#> SummData: Vector value containing the name(s) of the .Rda file(s) with
#>           GWAS summary statistics, with ‘SNP’ (i.e., SNP identifier),
#>           ‘BETA’ (i.e., effect-size or logarithm of odds ratio), ‘SE’
#>           (i.e., standard error of BETA), ‘P’ (i.e., p-values), 'NMISS'
#>           (i.e., effective sample size), 'L95' (i.e., lower limit of
#>           95% confidence interval) and 'U95' (i.e., upper limit of 95%
#>           confidence interval) are in mandatory column headers. These
#>           files needed to be in DataDir. If the numbers of cases and
#>           controls are unequal, effective sample size should be 4 /
#>           (1/<# of cases> + 1/<# of controls>). A smaller "effective"
#>           sample size may be used for samples that include related
#>           individuals, however simulations indicate that small changes
#>           in the effective sample size have relatively little effect on
#>           the final p-value (Willer et al. 2010). Columns, such as,
#>           'CHR' (Chromosome code), 'BP' (Basepair position), 'A1'
#>           (First allele code), 'A2' (Second allele code) columns are
#>           optional. If these are present, setting 'useSNPposition' to
#>           'FALSE', causes 'CHR', 'BP' and 'A1' to be ignored and
#>           setting 'UseA1' to be 'FALSE' causes 'A1' to be ignored. If,
#>           both these arguments are 'TRUE', this function takes care of
#>           A1/A2 allele flips properly. Otherwise, A1 mismatches are
#>           thrown out. Values of CHR/BP are allowed to vary.
#> 
#> ResultDir: A character string for the file path where all output files
#>           will be stored. The default is 'tempdir()'.
#> 
#>  SNPfile: Character string specifying the name of the plain-text file
#>           with a column of SNP names. These could be LD clumped SNPs or
#>           any other list of chosen SNPs for Meta analysis. This file
#>           needs to be in 'DataDir'.
#> 
#> useSNPposition: Boolean value, 'TRUE' or 'FALSE' for using 'CHR', 'BP',
#>           and 'A1' or not. The default is 'FALSE.' Note: if this is
#>           'FALSE' then there will be no Manhattan and QQ plot will be
#>           generated.
#> 
#>    UseA1: Boolean value, 'TRUE' or 'FALSE' for 'A1' to be used or not.
#>           The default is 'FALSE'.
#> 
#>     GCse: Boolean value, 'TRUE' or 'FALSE' for applying study specific
#>           genomic control to adjust each study for potential population
#>           structure for all the SNPs. The default is 'TRUE'. If users
#>           would want to apply genomic control separately for directly
#>           genotyped and imputed SNPs prior using the function, set this
#>           parameter as 'FALSE'.
#> 
#> plotname: Character string, specifying the plot name of the file
#>           containing forest plots for the SNPs. The default is
#>           “Meta_Analysis.plot”.
#> 
#> pval_filter: Character value as "R","F" or "W", specifying whether
#>           p-value threshold should be chosen based on “Random”, “Fixed”
#>           or “Weighted” effect model for the SNPs to be included in the
#>           forest plots.
#> 
#> top_snp_pval: Numeric value, specifying the threshold to be used to
#>           filter the SNPs for the forest plots. The default is 1e-08.
#> 
#> max_top_snps: Integer value, specifying the maximum number of top SNPs
#>           (SNPs with the lowest p-values) to be ploted in the forest
#>           plot file. The default is 6.
#> 
#> chosen_snps_file: Character string specifying the name of the
#>           plain-text file with a column of SNP names for the forest
#>           plots. The default is NULL.
#> 
#>    byCHR: Boolean value, 'TRUE' or 'FALSE', specifying whether the meta
#>           analysis will be performed chromosome wise or not. The
#>           default is 'FALSE'.
#> 
#> pval_threshold_manplot: Numeric value, specifying the p-value threshold
#>           for plotting Manhattan plots.
#> 
#> Value:
#> 
#>      A list object containing five dataframes. The first three
#>      dataframes, such as Mfixed, Mrandom and Mweighted contain results
#>      for fixed effect, random effect and weighted model. Each of these
#>      dataframes can have maximum 12 columns, such as:
#> 
#>         • 'CHR' (Chromosome code)
#> 
#>         • 'BP' (Basepair position)
#> 
#>         • 'SNP' (SNP identifier)
#> 
#>         • 'A1' (First allele code)
#> 
#>         • 'A2' (Second allele code)
#> 
#>         • 'Q' (p-value for Cochrane's Q statistic)
#> 
#>         • 'I' (I^2 heterogeneity index (0-100))
#> 
#>         • 'P' (P-value from mata analysis)
#> 
#>         • 'ES' (Effect-size estimate from mata analysis)
#> 
#>         • 'SE' (Standard Error from mata analysis)
#> 
#>         • 'CI_L' (Lower limit of confidence interval)
#> 
#>         • 'CI_U' (Uper limit of confidence interval)
#> 
#>      The fourth dataframe contains the same columns 'CHR', 'BP', 'SNP',
#>      'A1', 'A2', 'Q', 'I'", with column 'N'' ( Number of valid studies
#>      for this SNP), P (Fixed-effects meta-analysis p-value), and other
#>      columns as 'Fx...' (Study x (0-based input file indices) effect
#>      estimate, Examples: F0, F1 etc.).
#> 
#>      The fifth dataframe, ProblemSNP has three columns, such as
#> 
#>         • 'File' (file name of input data),
#> 
#>         • 'SNP' (Problematic SNPs that are thrown)
#> 
#>         • 'Problem' (Problem code)
#> 
#>      Problem codes are:
#> 
#>         • BAD_CHR (Invalid chromosome code)
#> 
#>         • BAD_BP (Invalid base-position code), BAD_ES (Invalid
#>           effect-size)
#> 
#>         • BAD_SE (Invalid standard error), MISSING_A1 (Missing allele 1
#>           label)
#> 
#>         • MISSING_A2 (Missing allele 2 label)
#> 
#>         • ALLELE_MISMATCH (Mismatching allele codes across files)
#> 
#>      A .pdf file comprising the forest plots of the SNPs is produced in
#>      the ResultDir with Plotname as prefix. If 'useSNPposition' is set
#>      'TRUE', a .jpeg file with Manhattan Plot and Q-Q plot will be in
#>      the 'ResultDir' with Plotname as prefix.
#> 
#> References:
#> 
#>      Purcell S, Neale B, Todd-Brown K, Thomas L, Ferreira MAR, Bender
#>      D, Maller J, Sklar P, de Bakker PIW, Daly MJ, others (2007).
#>      "PLINK: A Tool Set for Whole-Genome Association and
#>      Population-Based Linkage Analyses." _The American Journal of Human
#>      Genetics_, *81*(3), 559-575. doi:10.1086/519795
#>      <https://doi.org/10.1086/519795>.
#> 
#>      Willer CJ, Li Y, Abecasis GR (2010). "METAL: fast and efficient
#>      meta-analysis of genomewide association scans." _Bioinformatics_,
#>      *26*(17), 2190-2191. doi:10.1093/bioinformatics/btq340
#>      <https://doi.org/10.1093/bioinformatics/btq340>,
#>      <http://www.ncbi.nlm.nih.gov/pubmed/20616382>.
#> 
#> Examples:
#> 
#>      data("Summary_Stat_Ex1", package = "GXwasR")
#>      data("Summary_Stat_Ex2", package = "GXwasR")
#>      DataDir <- GXwasR:::GXwasR_data()
#>      ResultDir <- tempdir()
#>      SummData <- list(Summary_Stat_Ex1, Summary_Stat_Ex2)
#>      SNPfile <- "UniqueLoci"
#>      useSNPposition <- FALSE
#>      UseA1 <- TRUE
#>      GCse <- TRUE
#>      byCHR <- FALSE
#>      pval_filter <- "R"
#>      top_snp_pval <- 1e-08
#>      max_top_snps <- 10
#>      chosen_snps_file <- NULL
#>      pval_threshold_manplot <- 1e-05
#>      plotname <- "Meta_Analysis.plot"
#>      x <- MetaGWAS(
#>          DataDir = DataDir, SummData = SummData, ResultDir = ResultDir,
#>          SNPfile = NULL, useSNPposition = TRUE, UseA1 = UseA1, GCse = GCse,
#>          plotname = "Meta_Analysis.plot", pval_filter, top_snp_pval, max_top_snps,
#>          chosen_snps_file = NULL, byCHR, pval_threshold_manplot
#>      )

Running MetaGWAS

data(Summary_Stat_Ex1)
data(Summary_Stat_Ex2)
DataDir <- GXwasR:::GXwasR_data()
ResultDir <- tempdir()
SummData <- list(Summary_Stat_Ex1, Summary_Stat_Ex2)
SNPfile <- "UniqueLoci"
useSNPposition <- FALSE
UseA1 <- TRUE
GCse <- TRUE
byCHR <- FALSE
pval_filter <- "R"
top_snp_pval <- 1e-08
max_top_snps <- 10
chosen_snps_file <- NULL
pval_threshold_manplot <- 1e-05
plotname <- "Meta_Analysis.plot"

x <- MetaGWAS(DataDir = DataDir, SummData = SummData, ResultDir = ResultDir, SNPfile = NULL, useSNPposition = TRUE, UseA1 = UseA1, GCse = GCse, plotname = "Meta_Analysis.plot", pval_filter, top_snp_pval, max_top_snps, chosen_snps_file = NULL, byCHR, pval_threshold_manplot)
#> ℹ Processing file number 1
#> ℹ Processing file number 2
#> ℹ Applying study-specific genomic control.
#> ℹ Applying study-specific genomic control.
#> Processing chromosome

plot of chunk metaGWAS-1plot of chunk metaGWAS-1plot of chunk metaGWAS-1

#> ✔ Forest plot files for Meta_Analysis.plot SNPs have been created.
#> ℹ You can find them in the directory: /var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T//RtmpcRh9ZZ
#> ✔ Forest plot files for Meta_Analysis.plot SNPs have been created.
#> ℹ You can find them in the directory: /var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T//RtmpcRh9ZZ

Random effect result

# Dataframe with the fixed effect result
x1 <- x$Resultrandom
x2 <- x1[order(x1$P), ]
knitr::kable(x2[1:10, ], caption = "Top ten associations from random effect model.")
Top ten associations from random effect model.
CHR BP SNP A1 A2 Q I P ES SE CI_L CI_U
1054 23 4184349 rs6529954 A ? 0.1162 59.48 0.0000002 -1.7980 0.3441459 -2.4725260 -1.1234740
1053 23 4137114 rs5962098 A ? 0.1753 45.56 0.0000010 1.1488 0.2351018 0.6880004 1.6095996
1043 23 3376304 rs6420571 A ? 0.3068 4.26 0.0000015 -1.1667 0.2426946 -1.6423814 -0.6910186
1055 23 4214861 rs12858640 C ? 0.0725 69.00 0.0000062 -1.7572 0.3887229 -2.5190968 -0.9953032
559 2 2579014 rs10186455 G ? 0.4490 0.00 0.0000476 1.2694 0.3121061 0.6576721 1.8811279
1052 23 4119808 rs10521557 A ? 0.8021 0.00 0.0000631 1.4884 0.3720121 0.7592563 2.2175437
6 1 1127860 rs148527527 G ? 0.5778 0.00 0.0008237 1.3978 0.4179142 0.5786881 2.2169119
558 2 2535670 rs13430614 C ? 0.6681 0.00 0.0010230 0.6358 0.1935981 0.2563478 1.0152522
1382 23 45563626 rs1207312 T ? 0.5388 0.00 0.0046670 0.6138 0.2169547 0.1885689 1.0390311
1383 23 45565805 rs1780835 A ? 0.5206 0.00 0.0064620 0.5404 0.1984308 0.1514757 0.9293243

Fixed effect result

# Dataframe with the fixed effect result
x1 <- x$Resultfixed
x2 <- x1[order(x1$P), ]
knitr::kable(x2[1:10, ], caption = "Top ten associations from fixed effect model.")
Top ten associations from fixed effect model.
CHR BP SNP A1 A2 Q I P ES SE CI_L CI_U
1054 23 4184349 rs6529954 A ? 0.1162 59.48 0.0000000 -1.7127 0.2025697 -2.1097365 -1.3156635
1055 23 4214861 rs12858640 C ? 0.0725 69.00 0.0000000 -1.6364 0.1955735 -2.0197240 -1.2530760
1053 23 4137114 rs5962098 A ? 0.1753 45.56 0.0000000 1.1030 0.1618941 0.7856876 1.4203124
1043 23 3376304 rs6420571 A ? 0.3068 4.26 0.0000009 -1.1647 0.2371161 -1.6294476 -0.6999524
559 2 2579014 rs10186455 G ? 0.4490 0.00 0.0000476 1.2694 0.3121061 0.6576721 1.8811279
1052 23 4119808 rs10521557 A ? 0.8021 0.00 0.0000631 1.4884 0.3720121 0.7592563 2.2175437
6 1 1127860 rs148527527 G ? 0.5778 0.00 0.0008237 1.3978 0.4179142 0.5786881 2.2169119
558 2 2535670 rs13430614 C ? 0.6681 0.00 0.0010230 0.6358 0.1935981 0.2563478 1.0152522
638 2 8181194 rs7370955 A ? 0.2403 27.48 0.0024130 0.7752 0.2555007 0.2744187 1.2759813
1382 23 45563626 rs1207312 T ? 0.5388 0.00 0.0046670 0.6138 0.2169547 0.1885689 1.0390311

Weighted effect result

# Dataframe with the fixed effect result
x1 <- x$Resultweighted
x2 <- x1[order(x1$P), ]
knitr::kable(x2[1:10, ], caption = "Top ten associations from weighted effect model.")
Top ten associations from weighted effect model.
CHR BP SNP A1 A2 Q I P ES SE CI_L CI_U
1054 23 4184349 rs6529954 A ? 0.1162 59.48 0.0000000 -8.340 0.0000000 -8.3400000 -8.340000
1055 23 4214861 rs12858640 C ? 0.0725 69.00 0.0000000 -8.306 0.0000000 -8.3060000 -8.306000
1053 23 4137114 rs5962098 A ? 0.1753 45.56 0.0000000 6.741 1.0000820 4.7808392 8.701161
1043 23 3376304 rs6420571 A ? 0.3068 4.26 0.0000010 -4.883 1.0000062 -6.8430122 -2.922988
559 2 2579014 rs10186455 G ? 0.4490 0.00 0.0000723 3.969 1.0000874 2.0088287 5.929171
1052 23 4119808 rs10521557 A ? 0.8021 0.00 0.0000955 3.902 1.0000837 1.9418359 5.862164
6 1 1127860 rs148527527 G ? 0.5778 0.00 0.0010750 3.270 0.9999618 1.3100749 5.229925
558 2 2535670 rs13430614 C ? 0.6681 0.00 0.0014260 3.189 0.9998946 1.2292065 5.148794
638 2 8181194 rs7370955 A ? 0.2403 27.48 0.0032420 2.944 1.0000649 0.9838728 4.904127
1382 23 45563626 rs1207312 T ? 0.5388 0.00 0.0048350 2.818 1.0000617 0.8578790 4.778121

Metadata of the meta analysis

# Dataframe with the metadata
x1 <- x$Metadata
x2 <- x1[order(x1$Q), ]
knitr::kable(x2[1:10, ], caption = "Metadata of the top ten associations based on Cochrane’s Q statistics.")
Metadata of the top ten associations based on Cochrane’s Q statistics.
CHR BP SNP A1 A2 N Q I F0 F1
812 2 21385538 rs575905 T ? 2 0.0010 90.73 -0.5218 0.6472
1110 23 9277424 rs2214279 G ? 2 0.0015 90.09 0.5001 -0.5365
655 2 9913645 rs1106144 A ? 2 0.0020 89.48 0.5909 -0.8972
663 2 10210922 rs11678624 T ? 2 0.0021 89.45 -0.3659 0.7374
1207 23 23909933 rs2428144 A ? 2 0.0031 88.55 0.5344 -0.4081
1253 23 29189630 rs225456 C ? 2 0.0031 88.56 0.3208 -1.1170
1248 23 28763567 rs12008039 G ? 2 0.0032 88.48 -0.3187 0.5565
810 2 21275825 rs12468735 A ? 2 0.0036 88.19 -0.5095 0.5175
664 2 10343419 rs759347 C ? 2 0.0041 87.88 0.9790 -0.3894
1251 23 29104124 rs16988439 C ? 2 0.0042 87.81 0.3208 -1.0730

Problematic SNPs

# Dataframe with the problematic SNPs
x1 <- x$ProblemSNP
knitr::kable(x1[1:10, ], caption = "Top ten problematic SNPs.")
Top ten problematic SNPs.
File SNP Problem
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs2803333 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs672606 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs7519955 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs1538466 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs61777960 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs2865211 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs10917217 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs196402 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs6662038 ALLELE_MISMATCH
/private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/SNPdata_2 rs3845484 ALLELE_MISMATCH

Including Plots

Manhattan Plots and QQ plots:

plot of chunk meta-manhattan_plot

plot of chunk meta-manhattan_plot

All Forest plots

Now, let’s see all the Forest plots.

plot of chunk meta-forest_plot1

plot of chunk meta-forest_plot1

plot of chunk meta-forest_plot2

plot of chunk meta-forest_plot2

plot of chunk meta-forest_plot3

plot of chunk meta-forest_plot3

Reproducibility

The GXwasR package (Bose, Blostein, Kim et al., 2025) was made possible thanks to:

This package was developed using biocthis.

R session information.

#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.5.1 (2025-06-13)
#>  os       macOS Sequoia 15.6
#>  system   aarch64, darwin24.4.0
#>  ui       unknown
#>  language (EN)
#>  collate  en_US.UTF-8
#>  ctype    en_US.UTF-8
#>  tz       America/New_York
#>  date     2025-08-08
#>  pandoc   3.6.3 @ /Applications/Positron.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown)
#>  quarto   1.7.33 @ /usr/local/bin/quarto
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  package              * version    date (UTC) lib source
#>  abind                  1.4-8      2024-09-12 [2] CRAN (R 4.5.0)
#>  backports              1.5.0      2024-05-23 [2] CRAN (R 4.5.1)
#>  bibtex                 0.5.1      2023-01-26 [2] CRAN (R 4.5.0)
#>  bigassertr             0.1.7      2025-06-27 [2] CRAN (R 4.5.1)
#>  bigparallelr           0.3.2      2021-10-02 [2] CRAN (R 4.5.0)
#>  bigsnpr                1.12.18    2024-11-26 [2] CRAN (R 4.5.1)
#>  bigsparser             0.7.3      2024-09-06 [2] CRAN (R 4.5.1)
#>  bigstatsr              1.6.2      2025-07-29 [2] CRAN (R 4.5.1)
#>  Biobase                2.68.0     2025-04-15 [2] Bioconduc~
#>  BiocGenerics           0.54.0     2025-04-15 [2] Bioconduc~
#>  BiocIO                 1.18.0     2025-04-15 [2] Bioconduc~
#>  BiocManager            1.30.26    2025-06-05 [2] CRAN (R 4.5.0)
#>  BiocParallel           1.42.1     2025-06-01 [2] Bioconductor 3.21 (R 4.5.0)
#>  BiocStyle              2.36.0     2025-04-15 [2] Bioconduc~
#>  Biostrings             2.76.0     2025-04-15 [2] Bioconduc~
#>  bit                    4.6.0      2025-03-06 [2] CRAN (R 4.5.1)
#>  bit64                  4.6.0-1    2025-01-16 [2] CRAN (R 4.5.1)
#>  bitops                 1.0-9      2024-10-03 [2] CRAN (R 4.5.0)
#>  brio                   1.1.5      2024-04-24 [2] CRAN (R 4.5.1)
#>  broom                  1.0.9      2025-07-28 [2] CRAN (R 4.5.1)
#>  BSgenome               1.76.0     2025-04-15 [2] Bioconduc~
#>  cachem                 1.1.0      2024-05-16 [2] CRAN (R 4.5.0)
#>  calibrate              1.7.7      2020-06-19 [2] CRAN (R 4.5.0)
#>  callr                  3.7.6      2024-03-25 [2] CRAN (R 4.5.0)
#>  car                    3.1-3      2024-09-27 [2] CRAN (R 4.5.0)
#>  carData                3.0-5      2022-01-06 [2] CRAN (R 4.5.0)
#>  cli                    3.6.5      2025-04-23 [2] CRAN (R 4.5.0)
#>  codetools              0.2-20     2024-03-31 [4] CRAN (R 4.5.1)
#>  cowplot                1.2.0      2025-07-07 [2] CRAN (R 4.5.1)
#>  crayon                 1.5.3      2024-06-20 [2] CRAN (R 4.5.0)
#>  curl                   6.4.0      2025-06-22 [2] CRAN (R 4.5.1)
#>  data.table             1.17.8     2025-07-10 [2] CRAN (R 4.5.1)
#>  DelayedArray           0.34.1     2025-04-17 [2] Bioconduc~
#>  devtools             * 2.4.5      2022-10-11 [3] CRAN (R 4.5.0)
#>  digest                 0.6.37     2024-08-19 [2] CRAN (R 4.5.0)
#>  doParallel             1.0.17     2022-02-07 [2] CRAN (R 4.5.0)
#>  doRNG                  1.8.6.2    2025-04-02 [2] CRAN (R 4.5.0)
#>  doSNOW                 1.0.20     2022-02-04 [2] CRAN (R 4.5.0)
#>  dplyr                  1.1.4      2023-11-17 [2] CRAN (R 4.5.0)
#>  ellipsis               0.3.2      2021-04-29 [3] CRAN (R 4.5.0)
#>  evaluate               1.0.4      2025-06-18 [2] CRAN (R 4.5.1)
#>  farver                 2.1.2      2024-05-13 [2] CRAN (R 4.5.0)
#>  fastmap                1.2.0      2024-05-15 [2] CRAN (R 4.5.0)
#>  flock                  0.7        2016-11-12 [2] CRAN (R 4.5.1)
#>  foreach                1.5.2      2022-02-02 [2] CRAN (R 4.5.0)
#>  Formula                1.2-5      2023-02-24 [2] CRAN (R 4.5.0)
#>  fs                     1.6.6      2025-04-12 [2] CRAN (R 4.5.0)
#>  gdsfmt                 1.44.1     2025-07-09 [2] Bioconduc~
#>  generics               0.1.4      2025-05-09 [2] CRAN (R 4.5.0)
#>  GenomeInfoDb           1.44.1     2025-07-23 [2] Bioconduc~
#>  GenomeInfoDbData       1.2.14     2025-04-21 [2] Bioconductor
#>  GenomicAlignments      1.44.0     2025-04-15 [2] Bioconduc~
#>  GenomicRanges          1.60.0     2025-04-15 [2] Bioconduc~
#>  ggplot2                3.5.2      2025-04-09 [2] CRAN (R 4.5.0)
#>  ggpubr                 0.6.1      2025-06-27 [2] CRAN (R 4.5.1)
#>  ggrepel                0.9.6      2024-09-07 [2] CRAN (R 4.5.1)
#>  ggsignif               0.6.4      2022-10-13 [2] CRAN (R 4.5.0)
#>  glue                   1.8.0      2024-09-30 [2] CRAN (R 4.5.0)
#>  gridExtra              2.3        2017-09-09 [2] CRAN (R 4.5.0)
#>  gtable                 0.3.6      2024-10-25 [2] CRAN (R 4.5.0)
#>  GXwasR               * 0.99.0     2025-08-08 [1] Bioconductor
#>  hms                    1.1.3      2023-03-21 [2] CRAN (R 4.5.0)
#>  htmltools              0.5.8.1    2024-04-04 [2] CRAN (R 4.5.0)
#>  htmlwidgets            1.6.4      2023-12-06 [2] CRAN (R 4.5.0)
#>  httpuv                 1.6.16     2025-04-16 [2] CRAN (R 4.5.1)
#>  httr                   1.4.7      2023-08-15 [2] CRAN (R 4.5.0)
#>  IRanges                2.42.0     2025-04-15 [2] Bioconduc~
#>  iterators              1.0.14     2022-02-05 [2] CRAN (R 4.5.0)
#>  jsonlite               2.0.0      2025-03-27 [2] CRAN (R 4.5.0)
#>  knitr                  1.50       2025-03-16 [2] CRAN (R 4.5.0)
#>  labeling               0.4.3      2023-08-29 [2] CRAN (R 4.5.0)
#>  later                  1.4.2      2025-04-08 [2] CRAN (R 4.5.1)
#>  lattice                0.22-7     2025-04-02 [4] CRAN (R 4.5.1)
#>  lifecycle              1.0.4      2023-11-07 [2] CRAN (R 4.5.0)
#>  lubridate              1.9.4      2024-12-08 [2] CRAN (R 4.5.1)
#>  magrittr             * 2.0.3      2022-03-30 [2] CRAN (R 4.5.0)
#>  MASS                   7.3-65     2025-02-28 [4] CRAN (R 4.5.1)
#>  mathjaxr               1.8-0      2025-04-30 [2] CRAN (R 4.5.1)
#>  Matrix                 1.7-3      2025-03-11 [4] CRAN (R 4.5.1)
#>  MatrixGenerics         1.20.0     2025-04-15 [2] Bioconduc~
#>  matrixStats            1.5.0      2025-01-07 [2] CRAN (R 4.5.0)
#>  memoise                2.0.1      2021-11-26 [2] CRAN (R 4.5.0)
#>  mgcv                   1.9-3      2025-04-04 [4] CRAN (R 4.5.1)
#>  mime                   0.13       2025-03-17 [2] CRAN (R 4.5.0)
#>  miniUI                 0.1.2      2025-04-17 [3] CRAN (R 4.5.0)
#>  nlme                   3.1-168    2025-03-31 [4] CRAN (R 4.5.1)
#>  pillar                 1.11.0     2025-07-04 [2] CRAN (R 4.5.1)
#>  pkgbuild               1.4.8      2025-05-26 [2] CRAN (R 4.5.0)
#>  pkgconfig              2.0.3      2019-09-22 [2] CRAN (R 4.5.0)
#>  pkgdev                 0.1.0.9060 2025-08-04 [2] Github (dieghernan/pkgdev@e56f2a8)
#>  pkgload                1.4.0      2024-06-28 [2] CRAN (R 4.5.0)
#>  plyr                   1.8.9      2023-10-02 [2] CRAN (R 4.5.1)
#>  plyranges              1.28.0     2025-04-15 [2] Bioconduc~
#>  polynom                1.4-1      2022-04-11 [2] CRAN (R 4.5.0)
#>  poolr                  1.2-0      2025-05-07 [2] CRAN (R 4.5.0)
#>  prettyunits            1.2.0      2023-09-24 [2] CRAN (R 4.5.0)
#>  printr               * 0.3        2023-03-08 [2] CRAN (R 4.5.0)
#>  processx               3.8.6      2025-02-21 [2] CRAN (R 4.5.1)
#>  profvis                0.4.0      2024-09-20 [3] CRAN (R 4.5.0)
#>  progress               1.2.3      2023-12-06 [2] CRAN (R 4.5.0)
#>  promises               1.3.3      2025-05-29 [2] CRAN (R 4.5.0)
#>  ps                     1.9.1      2025-04-12 [2] CRAN (R 4.5.1)
#>  purrr                  1.1.0      2025-07-10 [2] CRAN (R 4.5.1)
#>  qqman                  0.1.9      2023-08-23 [2] CRAN (R 4.5.0)
#>  R.methodsS3            1.8.2      2022-06-13 [2] CRAN (R 4.5.0)
#>  R.oo                   1.27.1     2025-05-02 [2] CRAN (R 4.5.0)
#>  R.utils                2.13.0     2025-02-24 [2] CRAN (R 4.5.0)
#>  R6                     2.6.1      2025-02-15 [2] CRAN (R 4.5.0)
#>  ragg                   1.4.0      2025-04-10 [3] CRAN (R 4.5.0)
#>  rbibutils              2.3        2024-10-04 [2] CRAN (R 4.5.1)
#>  RColorBrewer           1.1-3      2022-04-03 [2] CRAN (R 4.5.0)
#>  Rcpp                   1.1.0      2025-07-02 [2] CRAN (R 4.5.1)
#>  RCurl                  1.98-1.17  2025-03-22 [2] CRAN (R 4.5.0)
#>  Rdpack                 2.6.4      2025-04-09 [2] CRAN (R 4.5.0)
#>  RefManageR           * 1.4.0      2022-09-30 [2] CRAN (R 4.5.1)
#>  regioneR               1.40.1     2025-06-01 [2] Bioconductor 3.21 (R 4.5.0)
#>  remotes                2.5.0      2024-03-17 [2] CRAN (R 4.5.0)
#>  restfulr               0.0.16     2025-06-27 [2] CRAN (R 4.5.1)
#>  rjson                  0.2.23     2024-09-16 [2] CRAN (R 4.5.0)
#>  rlang                  1.1.6      2025-04-11 [2] CRAN (R 4.5.0)
#>  rmarkdown            * 2.29       2024-11-04 [2] CRAN (R 4.5.0)
#>  rmio                   0.4.0      2022-02-17 [2] CRAN (R 4.5.0)
#>  rngtools               1.5.2      2021-09-20 [2] CRAN (R 4.5.0)
#>  rprojroot              2.1.0      2025-07-12 [2] CRAN (R 4.5.1)
#>  Rsamtools              2.24.0     2025-04-15 [2] Bioconduc~
#>  rstatix                0.7.2      2023-02-01 [2] CRAN (R 4.5.0)
#>  rtracklayer            1.68.0     2025-04-15 [2] Bioconduc~
#>  S4Arrays               1.8.1      2025-06-01 [2] Bioconductor 3.21 (R 4.5.0)
#>  S4Vectors              0.46.0     2025-04-15 [2] Bioconduc~
#>  scales                 1.4.0      2025-04-24 [2] CRAN (R 4.5.0)
#>  seqminer               9.7        2024-10-02 [2] CRAN (R 4.5.1)
#>  sessioninfo          * 1.2.3      2025-02-05 [2] CRAN (R 4.5.1)
#>  shiny                  1.11.1     2025-07-03 [2] CRAN (R 4.5.1)
#>  snow                   0.4-4      2021-10-27 [2] CRAN (R 4.5.0)
#>  SNPRelate              1.42.0     2025-04-15 [2] Bioconduc~
#>  SparseArray            1.8.1      2025-07-23 [2] Bioconduc~
#>  stringi                1.8.7      2025-03-27 [2] CRAN (R 4.5.0)
#>  stringr                1.5.1      2023-11-14 [2] CRAN (R 4.5.0)
#>  sumFREGAT              1.2.5      2022-06-07 [2] CRAN (R 4.5.1)
#>  SummarizedExperiment   1.38.1     2025-04-30 [2] Bioconductor 3.21 (R 4.5.0)
#>  sys                    3.4.3      2024-10-04 [2] CRAN (R 4.5.0)
#>  systemfonts            1.2.3      2025-04-30 [2] CRAN (R 4.5.0)
#>  testthat             * 3.2.3      2025-01-13 [2] CRAN (R 4.5.1)
#>  textshaping            1.0.1      2025-05-01 [3] CRAN (R 4.5.0)
#>  tibble                 3.3.0      2025-06-08 [2] CRAN (R 4.5.0)
#>  tidyr                  1.3.1      2024-01-24 [2] CRAN (R 4.5.1)
#>  tidyselect             1.2.1      2024-03-11 [2] CRAN (R 4.5.0)
#>  timechange             0.3.0      2024-01-18 [2] CRAN (R 4.5.1)
#>  tzdb                   0.5.0      2025-03-15 [2] CRAN (R 4.5.1)
#>  UCSC.utils             1.4.0      2025-04-15 [2] Bioconduc~
#>  urlchecker             1.0.1      2021-11-30 [3] CRAN (R 4.5.0)
#>  usethis              * 3.1.0      2024-11-26 [2] CRAN (R 4.5.0)
#>  vctrs                  0.6.5      2023-12-01 [2] CRAN (R 4.5.0)
#>  vroom                  1.6.5      2023-12-05 [2] CRAN (R 4.5.1)
#>  withr                  3.0.2      2024-10-28 [2] CRAN (R 4.5.0)
#>  xfun                   0.52       2025-04-02 [2] CRAN (R 4.5.0)
#>  XML                    3.99-0.18  2025-01-01 [2] CRAN (R 4.5.0)
#>  xml2                   1.3.8      2025-03-14 [2] CRAN (R 4.5.1)
#>  xtable                 1.8-4      2019-04-21 [2] CRAN (R 4.5.0)
#>  XVector                0.48.0     2025-04-15 [2] Bioconduc~
#>  yaml                   2.3.10     2024-07-26 [2] CRAN (R 4.5.0)
#> 
#>  [1] /private/var/folders/d6/gtwl3_017sj4pp14fbfcbqjh0000gp/T/RtmpcRh9ZZ/temp_libpath4e4d53c96c8f
#>  [2] /Users/mayerdav/Library/R/arm64/4.5/library
#>  [3] /opt/homebrew/lib/R/4.5/site-library
#>  [4] /opt/homebrew/Cellar/r/4.5.1/lib/R/library
#>  * ── Packages attached to the search path.
#> 
#> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Bibliography

This vignette was generated using BiocStyle (Oleś, 2025) with knitr (Xie, 2025) and rmarkdown (Allaire, Xie, Dervieux et al., 2024) running behind the scenes.

Citations made with RefManageR (McLean, 2017).

[1] J. Allaire, Y. Xie, C. Dervieux, et al. rmarkdown: Dynamic Documents for R. R package version 2.29. 2024. URL: https://github.com/rstudio/rmarkdown.

[2] B. Bose, F. Blostein, J. Kim, et al. “GXwasR: A Toolkit for Investigating Sex-Differentiated Genetic Effects on Complex Traits”. In: medRxiv 2025.06.10.25329327 (2025). DOI: 10.1101/2025.06.10.25329327.

[3] M. W. McLean. “RefManageR: Import and Manage BibTeX and BibLaTeX References in R”. In: The Journal of Open Source Software (2017). DOI: 10.21105/joss.00338.

[4] A. Oleś. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.36.0. 2025. DOI: 10.18129/B9.bioc.BiocStyle. URL: https://bioconductor.org/packages/BiocStyle.

[5] R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. Vienna, Austria, 2025. URL: https://www.R-project.org/.

[6] H. Wickham. “testthat: Get Started with Testing”. In: The R Journal 3 (2011), pp. 5–10. URL: https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf.

[7] H. Wickham, W. Chang, R. Flight, et al. sessioninfo: R Session Information. R package version 1.2.3. 2025. DOI: 10.32614/CRAN.package.sessioninfo. URL: https://CRAN.R-project.org/package=sessioninfo.

[8] Y. Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.50. 2025. URL: https://yihui.org/knitr/.