The mnp.v12epicv2 R-package includes the version 12.8 of the molecular neuropathology (mnp) methylation profiling classifier, www.molecularneuropathology.org (Capper et al. 2018). Like the analysis pipeline available on our website, the package allows to analyse methylation data of central nervous system tumors that have been measured with the Illumina Human Methylation 450 BeadChip array or EPIC BeadChip array. The package provides additional functions to generate copy-number variation (CNV) profiles and to predict the methylation status of the MGMT (O-6-Methylguanine-DNA Methyltransferase) gene. CNV profiles are generated by using a wrapper function to functions available through the conumee2.0 R-package and MGMT predictions by using the mgmtstp27 R-package.
The following code chunks display basic installation instructions that cover the installation of the mnp.v12epicv2 package and all it dependencies. By following these instructions, additional R-packages will be installed and if missing the user might need to install packages manually.
CRAN R-packages
install.packages(c("randomForest","glmnet","ggplot2","gridExtra","knitr","pander","devtools","plotly","uwot","ade4"))
Bioconductor R-packages
## try http:// if https:// URLs are not supported
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(c("GenomicFeatures",'TxDb.Hsapiens.UCSC.hg19.knownGene','org.Hs.eg.db',"lumi","methylumi","IlluminaHumanMethylation450kmanifest","IlluminaHumanMethylation450kanno.ilmn12.hg19","IlluminaHumanMethylationEPICanno.ilm10b4.hg19","DNAcopy"))
GitHub R-packages
library(devtools)
install_github("mwsill/IlluminaHumanMethylationEPICmanifest")
install_github("mwsill/IlluminaHumanMethylationEPICv2manifest")
install_github("mwsill/minfi")
install_github("mwsill/conumee2", subdir = "conumee2")
The mgmtstp27 R-package
# download https://github.com/mwsill/mgmtstp27/blob/master/trunk/Rpackage/mgmtstp27_0.6-3.tar.gz
install.packages("mgmtstp27_0.6-3.tar.gz",repos = NULL, type="source", verbose=TRUE)
# alternatively, the package might also be installed from the original author's GitHub https://github.com/badozor/mgmtstp27/tree/master/trunk/Rpackage/mgmtstp27
#using the devtools::install_git function.
install.packages("mnp.v12epicv2_0.1.136.tar.gz", repos = NULL, type="source", verbose=TRUE, clean = TRUE)
Check if the installation was successful by:
if(require(mnp.v12epicv2)) package.version("mnp.v12epicv2")
## [1] "0.1.136"
The following code shows how example idat files included in the package can be read into the R-workspace and how the data can be normalized, filtered and adjusted for possible batch effects between FFPE and FreshFrozen samples. These are necessary steps before the classifier should be applied for predictions.
# get path to test .idat files
path <- file.path(path.package('mnp.v12epicv2'),"ext")
dir(path)
## [1] "206891110004_R01C01_Grn.idat"
## [2] "206891110004_R01C01_Red.idat"
## [3] "abe0abbe-caaf-5e90-9517-f6002432eea3_Grn.idat"
## [4] "abe0abbe-caaf-5e90-9517-f6002432eea3_Red.idat"
## [5] "c3c169f6-2cf3-5c87-8605-135eb0592492_Grn.idat"
## [6] "c3c169f6-2cf3-5c87-8605-135eb0592492_Red.idat"
## [7] "CNanalysis4_conumee_ANNO.vh20150715.RData"
## [8] "CNanalysis4_conumee_REF-F.vh20150715.RData"
## [9] "CNanalysis4_conumee_REF-M.vh20150715.RData"
## [10] "CNanalysis6_conumee_REF_F.2018-09-19.RData"
## [11] "CNanalysis6_conumee_REF_M.2018-09-19.RData"
## [12] "conumee_annotation_EPIC_B6.2019-11-29.RData"
## [13] "conumee_annotation_EPIC_v2.2023-02-08.RData"
## [14] "umap"
## [15] "umap_coords_anno.RData"
sample450k <- "c3c169f6-2cf3-5c87-8605-135eb0592492" # this is an anonymised sample with no SNP probes or information about the sentrix ID
sampleEPIC <- "abe0abbe-caaf-5e90-9517-f6002432eea3" # this is an anonymised sample with no SNP probes or information about the sentrix ID
sampleEPICv2 <- "206891110004_R01C01" # this is a test sample downloaded from the Illumina website
path450k <- paste(path,sample450k,sep='/')
pathEPIC <- paste(path,sampleEPIC,sep='/')
pathEPICv2 <- paste(path,sampleEPICv2,sep='/')
# read data using standard minfi method
RGset450k <- read.metharray(path450k, verbose=FALSE)
RGsetEPIC <- read.metharray(pathEPIC, verbose=FALSE)
RGsetEPICv2 <- read.metharray(pathEPICv2, verbose = FALSE)
RGset450k
## class: RGChannelSet
## dim: 622399 1
## metadata(0):
## assays(2): Green Red
## rownames(622399): 10600313 10600322 ... 74810490 74810492
## rowData names(0):
## colnames(1): c3c169f6-2cf3-5c87-8605-135eb0592492
## colData names(0):
## Annotation
## array: IlluminaHumanMethylation450k
## annotation: ilmn12.hg19
RGsetEPIC
## class: RGChannelSet
## dim: 1052641 1
## metadata(0):
## assays(2): Green Red
## rownames(1052641): 1600101 1600111 ... 60642867 71726553
## rowData names(0):
## colnames(1): abe0abbe-caaf-5e90-9517-f6002432eea3
## colData names(0):
## Annotation
## array: IlluminaHumanMethylationEPIC
## annotation: ilm10b4.hg19
RGsetEPICv2
## class: RGChannelSet
## dim: 1105209 1
## metadata(0):
## assays(2): Green Red
## rownames(1105209): 1600157 1600179 ... 99810982 99810990
## rowData names(0):
## colnames(1): 206891110004_R01C01
## colData names(0):
## Annotation
## array: IlluminaHumanMethylationEPICv2
## annotation: ilm10b4.hg19
MNPgetFFPE predicts the sample source, i.e. parafine (FFPE) or fresh frozen material. Please see the function help ?MNPgetFFPE for more details.
MNPgetFFPE(RGset450k)
## [1] "FFPE"
MNPgetFFPE(RGsetEPIC)
## [1] "FFPE"
MNPgetFFPE(RGsetEPICv2)
## [1] "Frozen"
?MNPgetFFPE # please see the help for details
MNPpreprocessIllumina allows to apply the original the minfi::preprocessIllumina normalization to single samples.
# standard Genome Studio normalization
Mset450k <- MNPpreprocessIllumina(RGset450k, bg.correct=TRUE, normalize="controls")
MsetEPIC <- MNPpreprocessIllumina(RGsetEPIC, bg.correct=TRUE, normalize="controls")
MsetEPICv2 <- MNPpreprocessIllumina(RGsetEPICv2, bg.correct=TRUE, normalize="controls")
?MNPpreprocessIllumina # please see the help for details
# mnp FFPE/Frozen batch-adjustment
Mset450k <- MNPbatchadjust(Mset450k,MNPgetFFPE(RGset450k))
MsetEPIC <- MNPbatchadjust(MsetEPIC,MNPgetFFPE(RGsetEPIC))
MsetEPICv2 <- MNPbatchadjust(MsetEPICv2,MNPgetFFPE(RGsetEPICv2))
# this will reduce the number of CpGs to 383999 filtered probes
Mset450k
## class: MethylSet
## dim: 428230 1
## metadata(0):
## assays(2): Meth Unmeth
## rownames(428230): cg00000957 cg00001583 ... cg27662611 cg27665648
## rowData names(0):
## colnames(1): c3c169f6-2cf3-5c87-8605-135eb0592492
## colData names(0):
## Annotation
## array: IlluminaHumanMethylation450k
## annotation: ilmn12.hg19
## Preprocessing
## Method: Illumina_mnp, bg.correct = TRUE, normalize = controls, refIntensity = 10000
## minfi version: 1.43.1
## Manifest version: 0.4.0
MsetEPIC
## class: MethylSet
## dim: 428230 1
## metadata(0):
## assays(2): Meth Unmeth
## rownames(428230): cg00000957 cg00001583 ... cg27662611 cg27665648
## rowData names(0):
## colnames(1): abe0abbe-caaf-5e90-9517-f6002432eea3
## colData names(0):
## Annotation
## array: IlluminaHumanMethylationEPIC
## annotation: ilm10b4.hg19
## Preprocessing
## Method: Illumina_mnp, bg.correct = TRUE, normalize = controls, refIntensity = 10000
## minfi version: 1.43.1
## Manifest version: 0.4.0
MsetEPICv2
## class: MethylSet
## dim: 428230 1
## metadata(0):
## assays(2): Meth Unmeth
## rownames(428230): cg00000957 cg00001583 ... cg27662611 cg27665648
## rowData names(0):
## colnames(1): 206891110004_R01C01
## colData names(0):
## Annotation
## array: IlluminaHumanMethylationEPICv2
## annotation: ilm10b4.hg19
## Preprocessing
## Method: Illumina_mnp, bg.correct = TRUE, normalize = controls, refIntensity = 10000
## minfi version: 1.43.1
## Manifest version: 0.1.0
The following code shows how the classifier can be applied to predict samples. By default this function generates predictions for the 184 methylation subclasses the classifier was trained on. The MCF_level argument allows to sum up the (probability) scores for these methylation ‘subclasses’ to scores for more general methylation ‘classes’, from methylation ‘classes’ to methylation ‘families’ and to methylation ‘superfamilies’. Details about these four hierarchical levels can be found in the mnp.v12epicv2:::reflist annotation table.
predict 450k array sample
# subclass prediction by the maximum calibrated score
MNPpredict(Mset450k)[,1:2]
## predicted maxscore
## c3c169f6-2cf3-5c87-8605-135eb0592492 PXA 1
# subclass prediction by the maximum raw score and showing the full names fo the subclass
MNPpredict(Mset450k, abbreviation=FALSE, rawscores=TRUE)[,1:2]
## predicted maxscore
## c3c169f6-2cf3-5c87-8605-135eb0592492 Pleomorphic xanthoastrocytoma 0.4474
# prediction by the maximum calibrated score using methylation group families
MNPpredict(Mset450k, MCF_level="superfamily")[,1:2]
## predicted
## c3c169f6-2cf3-5c87-8605-135eb0592492 diffuse glioma, MAPK altered, cell-cycle activated
## maxscore
## c3c169f6-2cf3-5c87-8605-135eb0592492 1
MNPpredict(Mset450k, MCF_level="family")[,1:2]
## predicted
## c3c169f6-2cf3-5c87-8605-135eb0592492 pleomorphic xanthoastrocytoma(-like)
## maxscore
## c3c169f6-2cf3-5c87-8605-135eb0592492 1
MNPpredict(Mset450k, MCF_level="class")[,1:2]
## predicted
## c3c169f6-2cf3-5c87-8605-135eb0592492 pleomorphic xanthoastrocytoma(-like)
## maxscore
## c3c169f6-2cf3-5c87-8605-135eb0592492 1
predict EPIC array sample
# subclass prediction by the maximum calibrated score
MNPpredict(MsetEPIC)[,1:2]
## predicted maxscore
## abe0abbe-caaf-5e90-9517-f6002432eea3 PXA 0.9999996
# subclass prediction by the maximum raw score and showing the full names fo the subclass
MNPpredict(MsetEPIC, abbreviation=FALSE, rawscores=TRUE)[,1:2]
## predicted maxscore
## abe0abbe-caaf-5e90-9517-f6002432eea3 Pleomorphic xanthoastrocytoma 0.3787
# prediction by the maximum calibrated score using methylation group families
MNPpredict(MsetEPIC, MCF_level="superfamily")[,1:2]
## predicted
## abe0abbe-caaf-5e90-9517-f6002432eea3 diffuse glioma, MAPK altered, cell-cycle activated
## maxscore
## abe0abbe-caaf-5e90-9517-f6002432eea3 0.9999996
MNPpredict(MsetEPIC, MCF_level="family")[,1:2]
## predicted
## abe0abbe-caaf-5e90-9517-f6002432eea3 pleomorphic xanthoastrocytoma(-like)
## maxscore
## abe0abbe-caaf-5e90-9517-f6002432eea3 0.9999996
MNPpredict(MsetEPIC, MCF_level="class")[,1:2]
## predicted
## abe0abbe-caaf-5e90-9517-f6002432eea3 pleomorphic xanthoastrocytoma(-like)
## maxscore
## abe0abbe-caaf-5e90-9517-f6002432eea3 0.9999996
predict EPICv2 array sample
# subclass prediction by the maximum calibrated score
MNPpredict(MsetEPICv2)[,1:2]
## predicted maxscore
## 206891110004_R01C01 MB_SHH_3 0.06574626
# subclass prediction by the maximum raw score and showing the full names fo the subclass
MNPpredict(MsetEPICv2, abbreviation=FALSE, rawscores=TRUE)[,1:2]
## predicted maxscore
## 206891110004_R01C01 Primary diffuse large B cell lymphoma of the CNS 0.1033
# prediction by the maximum calibrated score using methylation group families
MNPpredict(MsetEPICv2, MCF_level="superfamily")[,1:2]
## predicted maxscore
## 206891110004_R01C01 Medulloblastoma 0.1754325
MNPpredict(MsetEPICv2, MCF_level="family")[,1:2]
## predicted maxscore
## 206891110004_R01C01 medulloblastoma non-WNT/non-SHH activated 0.08395118
MNPpredict(MsetEPICv2, MCF_level="class")[,1:2]
## predicted maxscore
## 206891110004_R01C01 medulloblastoma, SHH-activated, subtype 3 0.06574626
compare scores with website scores mnp_v12.8
ws <- read.csv("./206891110004_R01C01_workflow_run_results_brain_classifier_v12.8_sample_report_349346/predictBrain_v12.8/206891110004_R01C01_scores_cal.csv")
ps <- MNPpredict(MsetEPICv2)
ps <- as.numeric(ps[,match(ws$X,colnames(ps))])
plot(x=ps,y=ws$X206891110004_R01C01,pch=19,ylab="website scores",xlab="package scores")
abline(b=1,a=0,col="blue")
legend("topleft",legend=c(paste0("corr= ",round(cor(ps,ws$X206891110004_R01C01),10)),
paste0("median abs diff=", median(abs(ps-ws$X206891110004_R01C01)))),bty='n')
get subclass descriptions
pred <- MNPpredict(MsetEPIC)[,1:2]
pred$predicted
## [1] "PXA"
# get the class description from the annotation reflist
mnp.v12epicv2:::reflist$description[grep(pred$predicted,mnp.v12epicv2:::reflist$Abbrevation)]
## [1] "The \"mc Pleomorphic xanthoastrocytoma\" represents an astrocytic tumour with varied histology, primarily that of pleomorphic xanthoastrocytoma or anaplastic pleomorphic xanthoastrocytoma, but also including glioblastomas (particularly epithelioid glioblastoma) or with a ganglion cell-like differentiation appearing as 'anaplastic ganglioglioma'. There is no clear difference in methylation profiles between tumours histologically considered anaplastic or not. Location is typically supratentorial and often superficial (involving the leptomeninges). Most case arise in teenagers or young adults, with median age at diagnosis around 20-25 years. There is no apparent sex predilection. The majority of tumours in this mc harbor BRAF V600E mutations and homozygous deletions of CDKN2A/B. Cases lacking BRAF V600E typically show other alterations in the MAPK pathway, including NTRK family and RAF1 gene fusions. Some tumours of this mc also display TERT promoter mutations, which may be associated with a poorer prognosis."
MNPumap(Mset450k)
MNPumap(MsetEPIC)
MNPumap(MsetEPICv2)
This example shows how the methylation status of the MGMT (O-6-Methylguanine-DNA Methyltransferase) gene can be estimated, applying our wrapper functions to the prediction model available through the mgmtstp27 R-package. Note, that we do not normalize or apply a batch adjustment before applying the MGMT model. The plotting function shows a confidence interval for the estimated score and the threshold used for the prediction. If the confidence interval includes the threshold, we consider a prediction to be ‘unsure’.
predict MGMT 450k
#450k
Mset450k_raw <- preprocessRaw(RGset450k)
MNPpredict_mgmt(Mset450k_raw)
## Status Estimated CI_Lower CI_Upper Cutoff
## 1 unmethylated 0.07850581 0.01905159 0.2720437 0.3582
MNPciplot_mgmt(Mset450k_raw)
predict MGMT EPIC
#Epic
MsetEPIC_raw <- preprocessRaw(RGsetEPIC)
MNPpredict_mgmt(MsetEPIC_raw)
## Status Estimated CI_Lower CI_Upper Cutoff
## 1 unmethylated 0.1246642 0.03730506 0.3435847 0.3582
MNPciplot_mgmt(MsetEPIC_raw)
predict MGMT EPICv2
#Epic
MsetEPICv2_raw <- preprocessRaw(RGsetEPICv2)
MNPpredict_mgmt(MsetEPICv2_raw)
## Status Estimated CI_Lower CI_Upper Cutoff
## 1 unmethylated 0.01770899 0.002341169 0.121653 0.3582
MNPciplot_mgmt(MsetEPICv2_raw)
The MNPcnvplot wrapper automatically applies the CNV anaylsis pipeline of the conumee2.0 package using reference data and gene annotations available through the mnp.v12epicv2 package.
generate Copy number variation plot 450k
x <- MNPcnv(Mset450k_raw)
conumee2.0::CNV.genomeplot(x,bins_cex="sample_level")
generate Copy number variation plot EPIC
x <- MNPcnv(MsetEPIC_raw)
conumee2.0::CNV.genomeplot(x,bins_cex="sample_level")
generate Copy number variation plot EPICv2
x <- MNPcnv(MsetEPICv2_raw)
conumee2.0::CNV.genomeplot(x,bins_cex="sample_level")
The MNPreport function generates methylation profiling report ‘.html’ files by applying all of the pipline parts described in this document.
MNPreport(RGset450k,sampleID="450k Example")
MNPreport(RGsetEPIC,sampleID="EPIC Example")
MNPreport(RGsetEPICv2,sampleID="EPICv2 Example")
sessionInfo()
## R version 4.4.1 (2024-06-14)
## Platform: aarch64-apple-darwin20
## Running under: macOS Sonoma 14.6.1
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## time zone: Europe/Berlin
## tzcode source: internal
##
## attached base packages:
## [1] parallel stats4 stats graphics grDevices utils datasets
## [8] methods base
##
## other attached packages:
## [1] IlluminaHumanMethylationEPICanno.ilm10b4.hg19_0.6.0
## [2] IlluminaHumanMethylation450kanno.ilmn12.hg19_0.6.1
## [3] IlluminaHumanMethylationEPICv2manifest_0.1.0
## [4] IlluminaHumanMethylationEPICmanifest_0.4.0
## [5] IlluminaHumanMethylation450kmanifest_0.4.0
## [6] mnp.v12epicv2_0.1.136
## [7] glmnet_4.1-8
## [8] Matrix_1.7-0
## [9] randomForest_4.7-1.2
## [10] minfi_1.43.1
## [11] bumphunter_1.46.0
## [12] locfit_1.5-9.10
## [13] iterators_1.0.14
## [14] foreach_1.5.2
## [15] Biostrings_2.72.1
## [16] XVector_0.44.0
## [17] SummarizedExperiment_1.34.0
## [18] Biobase_2.64.0
## [19] MatrixGenerics_1.16.0
## [20] matrixStats_1.4.1
## [21] GenomicRanges_1.56.1
## [22] GenomeInfoDb_1.40.1
## [23] IRanges_2.38.1
## [24] S4Vectors_0.42.1
## [25] BiocGenerics_0.50.0
##
## loaded via a namespace (and not attached):
## [1] RcppAnnoy_0.0.22 splines_4.4.1
## [3] BiocIO_1.14.0 bitops_1.0-9
## [5] fields_16.3 tibble_3.2.1
## [7] preprocessCore_1.66.0 methylumi_2.50.0
## [9] XML_3.99-0.17 lifecycle_1.0.4
## [11] mgmtstp27_0.6-3 lattice_0.22-6
## [13] MASS_7.3-60.2 base64_2.0.2
## [15] crosstalk_1.2.1 scrime_1.3.5
## [17] magrittr_2.0.3 limma_3.60.6
## [19] plotly_4.10.4 sass_0.4.9
## [21] rmarkdown_2.28 jquerylib_0.1.4
## [23] yaml_2.3.10 doRNG_1.8.6
## [25] spam_2.11-0 askpass_1.2.1
## [27] DBI_1.2.3 RColorBrewer_1.1-3
## [29] ade4_1.7-22 lumi_2.56.0
## [31] maps_3.4.2 abind_1.4-8
## [33] zlibbioc_1.50.0 quadprog_1.5-8
## [35] purrr_1.0.2 RCurl_1.98-1.16
## [37] conumee2.0_2.1 GenomeInfoDbData_1.2.12
## [39] genefilter_1.86.0 annotate_1.82.0
## [41] DelayedMatrixStats_1.26.0 codetools_0.2-20
## [43] DelayedArray_0.30.1 xml2_1.3.6
## [45] DNAcopy_1.78.0 tidyselect_1.2.1
## [47] shape_1.4.6.1 farver_2.1.2
## [49] UCSC.utils_1.0.0 beanplot_1.3.1
## [51] illuminaio_0.46.0 GenomicAlignments_1.40.0
## [53] jsonlite_1.8.9 multtest_2.60.0
## [55] ggridges_0.5.6 survival_3.6-4
## [57] tools_4.4.1 Rcpp_1.0.13
## [59] glue_1.8.0 gridExtra_2.3
## [61] SparseArray_1.4.8 mgcv_1.9-1
## [63] xfun_0.48 RnBeads_2.20.0
## [65] dplyr_1.1.4 HDF5Array_1.32.1
## [67] withr_3.0.1 BiocManager_1.30.25
## [69] fastmap_1.2.0 rhdf5filters_1.16.0
## [71] fansi_1.0.6 openssl_2.2.2
## [73] caTools_1.18.3 digest_0.6.37
## [75] R6_2.5.1 colorspace_2.1-1
## [77] gtools_3.9.5 RSQLite_2.3.7
## [79] utf8_1.2.4 tidyr_1.3.1
## [81] generics_0.1.3 data.table_1.16.0
## [83] rtracklayer_1.64.0 InteractionSet_1.30.0
## [85] httr_1.4.7 htmlwidgets_1.6.4
## [87] S4Arrays_1.4.1 uwot_0.2.2
## [89] pkgconfig_2.0.3 gtable_0.3.5
## [91] blob_1.2.4 siggenes_1.78.0
## [93] htmltools_0.5.8.1 dotCall64_1.2
## [95] plyranges_1.22.0 scales_1.3.0
## [97] png_0.1-8 knitr_1.48
## [99] nullranges_1.8.0 rstudioapi_0.16.0
## [101] tzdb_0.4.0 rjson_0.2.23
## [103] nlme_3.1-164 curl_5.2.3
## [105] cachem_1.1.0 rhdf5_2.48.0
## [107] KernSmooth_2.23-24 AnnotationDbi_1.66.0
## [109] restfulr_0.0.15 GEOquery_2.72.0
## [111] pillar_1.9.0 grid_4.4.1
## [113] reshape_0.8.9 vctrs_0.6.5
## [115] gplots_3.2.0 ff_4.5.0
## [117] xtable_1.8-4 cluster_2.1.6
## [119] evaluate_1.0.0 readr_2.1.5
## [121] GenomicFeatures_1.56.0 cli_3.6.3
## [123] compiler_4.4.1 Rsamtools_2.20.0
## [125] rlang_1.1.4 crayon_1.5.3
## [127] rngtools_1.5.2 labeling_0.4.3
## [129] nor1mix_1.3-3 mclust_6.1.1
## [131] affy_1.82.0 plyr_1.8.9
## [133] viridisLite_0.4.2 BiocParallel_1.38.0
## [135] nleqslv_3.3.5 munsell_0.5.1
## [137] lazyeval_0.2.2 hms_1.1.3
## [139] sparseMatrixStats_1.16.0 bit64_4.5.2
## [141] ggplot2_3.5.1 Rhdf5lib_1.26.0
## [143] KEGGREST_1.44.1 statmod_1.5.0
## [145] highr_0.11 memoise_2.0.1
## [147] affyio_1.74.0 bslib_0.8.0
## [149] bit_4.5.0