## [1] TRUE
Sesame provide convenient function to compare your sample with public data sets processed with the same pipeline. All you need is a raw SigSet.
SeSAMe provides a set of quality control steps. Be sure to pre-cache HM450 annotation data from ExperimentHub. This only needs to be done once per sesame installation.
The SeSAMe QC function returns an sesameQC
object which can be directly printed onto the screen.
##
## =======================
## = Intensities =
## =======================
## No. probes (num_probes_all) 866895
## mean (M/U) (mean_intensity): 2657.248
## mean (M+U) (mean_intensity_total): 5314.496
##
## -- Infinium II --
## No. probes: (num_probes_II) 724612 (83.587%)
## Mean Intensity (mean_ii): 2526.561
##
## -- Infinium I (Red) --
## No. probes: (num_probes_IR) 92294 (10.647%)
## No. Probes Consistent Channel: 92200
## No. Porbes Swapped Channel: 94
## No. Probes Low Intensity:
## Mean Intensity (in-band): 3579.385
## Mean Intensity (out-of-band): 524.6618
##
## -- Infinium I (Grn) --
## No. probes: 49989 (5.766%)
## No. Probes Consistent Channel: 49393
## No. Probes Swapped Channel: 596
## No. Probes Low Intensity:
## Mean Intensity (in-band): 2849.083
## Mean Intensity (out-of-band): 303.2474
##
## =======================
## = Non-detection =
## =======================
## No. probes: 33437
## No. probes w/ NA (num_na): 33437 (3.857%)
## No. nondetection (num_nondt): 33437 (3.857%)
##
## =======================
## = Beta Values =
## =======================
## Mean Betas: 0.5762464
## Median Betas: 0.7268695
##
## -- cg probes --
## No. Probes: 863904
## No. Probes with NA: 32886 (3.807%)
## Mean Betas: 0.5776934
## Median Betas: 0.7289541
## % Unmethylated (Beta < 0.3): 30.806%
## % Methylated (Beta > 0.7): 51.878%
##
## -- ch probes --
## No. Probes: 2932
## No. Probes with NA: 548 (18.690%)
## Mean Betas: 0.07323188
## Median Betas: 0.06114149
## % Unmethylated (Beta < 0.3): 99.874%
## % Methylated (Beta > 0.7): 0.000%
##
## -- rs probes --
## No. Probes: 59
## No. Probes with NA: 3 (5.085%)
## Mean Betas: 0.518126
## Median Betas: 0.5150823
## % Unmethylated (Beta < 0.3): 30.357%
## % Methylated (Beta > 0.7): 33.929%
The sesameQC
object can be coerced into data.frame and linked using the following code
qc5 <- do.call(rbind, lapply(sdfs, function(x)
as.data.frame(sesameQC(x))))
qc5$sample_name <- names(sdfs)
qc5[,c('mean_beta_cg','frac_meth_cg','frac_unmeth_cg')]
The background level is given by mean_oob_grn
and mean_oob_red
The mean {M,U} intensity can be reached by mean_intensity
. Similarly, the mean M+U intensity can be reached by mean_intensity_total
. Low intensities are symptomatic of low input or poor hybridization.
library(wheatmap)
p1 <- ggplot(qc5) +
geom_bar(aes(sample_name, mean_intensity), stat='identity') +
xlab('Sample Name') + ylab('Mean Intensity') +
ylim(0,18000) +
theme(axis.text.x = element_text(angle=90, vjust=0.5, hjust=1))
p2 <- ggplot(qc5) +
geom_bar(aes(sample_name, mean_intensity_total), stat='identity') +
xlab('Sample Name') + ylab('Mean M+U Intensity') +
ylim(0,18000) +
theme(axis.text.x = element_text(angle=90, vjust=0.5, hjust=1))
WGG(p1) + WGG(p2, RightOf())
The fraction of NAs are signs of masking due to variety of reasons including failed detection, high background, putative low quality probes etc. This number can be reached in frac_na_cg
and num_na_cg
(the cg stands for CpG probes, so we also have num_na_ch
and num_na_rs
)
p1 <- ggplot(qc5) +
geom_bar(aes(sample_name, num_na_cg), stat='identity') +
xlab('Sample Name') + ylab('Number of NAs') +
theme(axis.text.x = element_text(angle=90, vjust=0.5, hjust=1))
p2 <- ggplot(qc5) +
geom_bar(aes(sample_name, frac_na_cg), stat='identity') +
xlab('Sample Name') + ylab('Fraction of NAs (%)') +
theme(axis.text.x = element_text(angle=90, vjust=0.5, hjust=1))
WGG(p1) + WGG(p2, RightOf())
The fraction of color channel switch can be found in InfI_switch_G2R
and InfI_switch_R2G
. These numbers are symptomatic of how Infinium I probes are affected by SNP-induced color channel switching.
Infinium platforms are intrinsically robust to incomplete bisulfite conversion as non-converted probes would fail to hybridize to the target. Residual incomplete bisulfite conversion can be quantified using GCT score based on C/T-extension probes. Details of this method can be found in Zhou et al. 2017. The closer the score to 1.0, the more complete the bisulfite conversion.
## [1] 1.067769
SeSAMe can output explicit and Infinium-I-derived SNP to VCF. This information can be used to identify sample swaps.
## Retrieving annotation from https://zhouserver.research.chop.edu/InfiniumAnnotation/current/EPIC/EPIC.hg19.snp_overlap_b151.rds ... Done.
## Retrieving annotation from https://zhouserver.research.chop.edu/InfiniumAnnotation/current/EPIC/EPIC.hg19.typeI_overlap_b151.rds ... Done.
One can output to actual VCF file with a header by formatVCF(sdf, vcf=path_to_vcf)
.
## R version 4.1.2 (2021-11-01)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.3 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.14-bioc/R/lib/libRblas.so
## LAPACK: /home/biocbuild/bbs-3.14-bioc/R/lib/libRlapack.so
##
## 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
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] wheatmap_0.1.0 ggplot2_3.3.5 sesame_1.12.9
## [4] sesameData_1.12.0 rmarkdown_2.11 ExperimentHub_2.2.1
## [7] AnnotationHub_3.2.1 BiocFileCache_2.2.1 dbplyr_2.1.1
## [10] BiocGenerics_0.40.0
##
## loaded via a namespace (and not attached):
## [1] matrixStats_0.61.0 bitops_1.0-7
## [3] bit64_4.0.5 RColorBrewer_1.1-2
## [5] filelock_1.0.2 httr_1.4.2
## [7] GenomeInfoDb_1.30.1 tools_4.1.2
## [9] bslib_0.3.1 utf8_1.2.2
## [11] R6_2.5.1 KernSmooth_2.23-20
## [13] DBI_1.1.2 colorspace_2.0-2
## [15] withr_2.4.3 DNAcopy_1.68.0
## [17] tidyselect_1.1.1 gridExtra_2.3
## [19] preprocessCore_1.56.0 bit_4.0.4
## [21] curl_4.3.2 compiler_4.1.2
## [23] cli_3.1.1 Biobase_2.54.0
## [25] DelayedArray_0.20.0 labeling_0.4.2
## [27] sass_0.4.0 scales_1.1.1
## [29] randomForest_4.7-1 proxy_0.4-26
## [31] rappdirs_0.3.3 stringr_1.4.0
## [33] digest_0.6.29 XVector_0.34.0
## [35] pkgconfig_2.0.3 htmltools_0.5.2
## [37] MatrixGenerics_1.6.0 highr_0.9
## [39] fastmap_1.1.0 rlang_1.0.1
## [41] RSQLite_2.2.9 shiny_1.7.1
## [43] farver_2.1.0 jquerylib_0.1.4
## [45] generics_0.1.2 jsonlite_1.7.3
## [47] BiocParallel_1.28.3 dplyr_1.0.7
## [49] RCurl_1.98-1.5 magrittr_2.0.2
## [51] GenomeInfoDbData_1.2.7 Matrix_1.4-0
## [53] Rcpp_1.0.8 munsell_0.5.0
## [55] S4Vectors_0.32.3 fansi_1.0.2
## [57] lifecycle_1.0.1 stringi_1.7.6
## [59] yaml_2.2.2 MASS_7.3-55
## [61] SummarizedExperiment_1.24.0 zlibbioc_1.40.0
## [63] plyr_1.8.6 grid_4.1.2
## [65] blob_1.2.2 parallel_4.1.2
## [67] promises_1.2.0.1 ggrepel_0.9.1
## [69] crayon_1.4.2 lattice_0.20-45
## [71] Biostrings_2.62.0 KEGGREST_1.34.0
## [73] knitr_1.37 pillar_1.7.0
## [75] GenomicRanges_1.46.1 fgsea_1.20.0
## [77] reshape2_1.4.4 stats4_4.1.2
## [79] fastmatch_1.1-3 glue_1.6.1
## [81] BiocVersion_3.14.0 evaluate_0.14
## [83] data.table_1.14.2 BiocManager_1.30.16
## [85] png_0.1-7 vctrs_0.3.8
## [87] httpuv_1.6.5 gtable_0.3.0
## [89] purrr_0.3.4 assertthat_0.2.1
## [91] cachem_1.0.6 xfun_0.29
## [93] mime_0.12 xtable_1.8-4
## [95] e1071_1.7-9 later_1.3.0
## [97] class_7.3-20 tibble_3.1.6
## [99] AnnotationDbi_1.56.2 memoise_2.0.1
## [101] IRanges_2.28.0 ellipsis_0.3.2
## [103] interactiveDisplayBase_1.32.0 BiocStyle_2.22.0