We will start off with our example dataset pulled from the ISGlobal Exposome Data Challenge 2021 (Maitre et al., 2022).
# Load example data
data("tidyexposomics_example")
# Create exposomic set object
expom <- create_exposomicset(
codebook = tidyexposomics_example$annotated_cb,
exposure = tidyexposomics_example$meta,
omics = list(
"Gene Expression" = tidyexposomics_example$exp_filt,
"Methylation" = tidyexposomics_example$methyl_filt
),
row_data = list(
"Gene Expression" = tidyexposomics_example$exp_fdata,
"Methylation" = tidyexposomics_example$methyl_fdata
)
)## Ensuring all omics datasets are matrices with column names.
## Creating SummarizedExperiment objects.
## Creating MultiAssayExperiment object.
## MultiAssayExperiment created successfully.
We will focus on a few exposure variable categories.
As in the main vignette, we will impute exposure data using
missforest.
# Impute missing values
expom <- run_impute_missing(
exposomicset = expom,
exposure_impute_method = "missforest",
exposure_cols = exp_vars
)## Imputing exposure data using method: missforest
And we will transform our exposure data to ensure it is more normally
distributed using the boxcox_best method.
# Transform variables
expom <- transform_exposure(
exposomicset = expom,
transform_method = "boxcox_best",
exposure_cols = exp_vars
)## Applying the boxcox_best transformation.
We can calculate exposome scores, which are a summary measure of
exposure. The run_exposome_score function is used to
calculate the exposome score. The exposure_cols argument is
used to set the columns to use for the exposome score. The
score_type argument is used to set the type of score to
calculate. Here we could use:
median: Calculates the median of the exposure
variables.
mean: Calculates the mean of the exposure
variables.
sum: Calculates the sum of the exposure
variables.
pca: Calculates the first principal component of the
exposure variables.
irt: Uses Item Response Theory to calculate the
exposome score.
quantile: Calculates the quantile of the exposure
variables.
var: Calculates the variance of the exposure
variables.
The score_column_name argument is used to set the name
of the column to store the exposome score in. Here we will define a
score for aerosols using a variety of different methods and demonstrate
their use in association with asthma status.
# determine which aerosol variables to use
aerosols <- c("h_pm25_ratio_preg_None", "h_pm10_ratio_preg_None")
# Create exposome scores
expom <- expom |>
run_exposome_score(
exposure_cols = aerosols,
score_type = "median",
score_column_name = "exposome_median_score"
) |>
run_exposome_score(
exposure_cols = aerosols,
score_type = "pca",
score_column_name = "exposome_pca_score"
) |>
run_exposome_score(
exposure_cols = aerosols,
score_type = "quantile",
score_column_name = "exposome_quantile_score"
) |>
run_exposome_score(
exposure_cols = aerosols,
score_type = "var",
score_column_name = "exposome_var_score"
)## Extracting exposure data...
## Extracting exposure data...
## Extracting exposure data...
## Extracting exposure data...
## Calculating median exposure scores...
## Calculating PCA exposure scores...
## Calculating quantile exposure scores...
## Calculating variance exposure scores...
We can then associate these exposome scores with asthma status using
the run_association function, just like we did before.
However, this time we specify our feature_set to be the
exposome scores we just calculated.
# Associate exposome scores with outcome
expom <- run_association(
exposomicset = expom,
outcome = "hs_asthma",
source = "exposures",
feature_set = c(
"exposome_median_score",
"exposome_pca_score",
"exposome_quantile_score",
"exposome_var_score"
),
action = "add",
family = "binomial"
)## Running GLMs.
# Plot the association forest plot
plot_association(
exposomicset = expom,
source = "exposures",
terms = c(
"exposome_median_score",
"exposome_pca_score",
"exposome_quantile_score",
"exposome_var_score"
),
filter_col = "p.value",
filter_thresh = 0.05,
r2_col = "r2"
)Associations of aerosol exposome scores with asthma status. The variance-based score has the strongest association with asthma status.
sessionInfo()
## R version 4.6.1 (2026-06-24)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 26.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.32.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [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: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] tidyexposomics_1.1.2 MultiAssayExperiment_1.39.1
## [3] SummarizedExperiment_1.43.0 Biobase_2.73.2
## [5] GenomicRanges_1.65.4 Seqinfo_1.3.2
## [7] IRanges_2.47.5 S4Vectors_0.51.10
## [9] BiocGenerics_0.59.12 generics_0.1.4
## [11] MatrixGenerics_1.25.0 matrixStats_1.5.0
## [13] lubridate_1.9.5 forcats_1.0.1
## [15] stringr_1.6.0 dplyr_1.2.1
## [17] purrr_1.2.2 readr_2.2.0
## [19] tidyr_1.3.2 tibble_3.3.1
## [21] ggplot2_4.0.3 tidyverse_2.0.0
## [23] BiocStyle_2.41.0
##
## loaded via a namespace (and not attached):
## [1] splines_4.6.1 later_1.4.8 filelock_1.0.3
## [4] hardhat_1.4.3 pROC_1.19.1 rpart_4.1.27
## [7] factoextra_2.2.0 lifecycle_1.0.5 httr2_1.3.0
## [10] Rdpack_2.6.6 rstatix_1.1.0 globals_0.19.1
## [13] lattice_0.23-1 MASS_7.3-66 backports_1.5.1
## [16] magrittr_2.0.5 limma_3.99.0 Hmisc_5.3-0
## [19] sass_0.4.10 rmarkdown_2.32 jquerylib_0.1.4
## [22] yaml_2.3.12 httpuv_1.6.17 otel_0.2.0
## [25] doRNG_1.8.6.3 DBI_1.3.0 buildtools_1.0.0
## [28] RColorBrewer_1.1-3 abind_1.4-8 itertools_0.1-3
## [31] nnet_7.3-21 ipred_0.9-16 lava_1.9.3
## [34] ggrepel_0.9.8 listenv_1.1.0 fenr_1.11.3
## [37] maketools_1.3.2 ellipse_0.5.0 missForest_1.6.1
## [40] RSpectra_0.16-2 parallelly_1.48.0 codetools_0.2-20
## [43] DelayedArray_0.39.8 DT_0.34.0 tidyselect_1.2.1
## [46] farver_2.1.2 BiocFileCache_3.3.0 base64enc_0.1-6
## [49] jsonlite_2.0.0 caret_7.0-1 Formula_1.2-6
## [52] survival_3.8-12 iterators_1.0.14 foreach_1.5.2
## [55] tools_4.6.1 Rcpp_1.1.2 glue_1.8.1
## [58] rARPACK_0.11-0 BiocBaseUtils_1.15.1 prodlim_2026.03.11
## [61] gridExtra_2.3.1 SparseArray_1.13.4 ranger_0.18.0
## [64] xfun_0.61 mixOmics_6.37.0 withr_3.0.3
## [67] BiocManager_1.30.27 fastmap_1.2.0 digest_0.6.39
## [70] timechange_0.4.0 R6_2.6.1 mime_0.13
## [73] RGCCA_3.0.3 visdat_0.6.1 colorspace_2.1-4
## [76] RSQLite_3.53.3 utf8_1.2.6 ggsci_5.2.0
## [79] data.table_1.18.6.1 recipes_1.4.0 corpcor_1.6.10
## [82] class_7.3-24 httr_1.4.9 htmlwidgets_1.6.4
## [85] S4Arrays_1.13.2 ModelMetrics_1.2.2.2 pkgconfig_2.0.3
## [88] gtable_0.3.6 timeDate_4052.112 blob_1.3.0
## [91] S7_0.2.2 XVector_0.53.0 sys_3.4.3
## [94] htmltools_0.5.9 carData_3.0-6 naniar_1.1.0
## [97] scales_1.4.0 gower_1.0.2 knitr_1.52
## [100] rstudioapi_0.19.0 tzdb_0.5.0 reshape2_1.4.5
## [103] checkmate_2.3.4 nlme_3.1-171 curl_8.0.0
## [106] cachem_1.1.0 parallel_4.6.1 foreign_0.8-91
## [109] pillar_1.11.1 grid_4.6.1 vctrs_0.7.3
## [112] randomForest_4.7-1.2 promises_1.5.0 ggpubr_1.0.0
## [115] car_3.1-5 dbplyr_2.6.0 xtable_1.8-8
## [118] Deriv_4.3.5 cluster_2.1.8.3 htmlTable_2.5.0
## [121] evaluate_1.0.5 cli_3.6.6 compiler_4.6.1
## [124] rngtools_1.5.2 rlang_1.3.0 crayon_1.5.3
## [127] future.apply_1.20.2 ggsignif_0.6.4 labeling_0.4.3
## [130] tidybulk_2.3.3 plyr_1.8.9 stringi_1.8.9
## [133] BiocParallel_1.47.0 assertthat_0.2.1 Matrix_1.7-6
## [136] patchwork_1.3.2 hms_1.1.4 bit64_4.8.6
## [139] future_1.76.0 statmod_1.5.2 shiny_1.14.0
## [142] rbibutils_2.4.1 igraph_2.3.4 broom_1.0.13
## [145] memoise_2.0.1 bslib_0.12.0 bit_4.6.0