name: title_cover class: left background-image: url(images/cover_background.png) background-position: 95% 75% background-size: 30% .position[.pill_box[LC-HRMS based Metabolomics: Introduction <br><br>Mass Spectrometry <br><br>Data Pre-processing with xcms Package]] <br>.large[
Lenny Lin] .large[
Winnipeg Data Science Meetup] .large[
TBA] --- class: inverse, center, middle The date of this talk is to be announced. The slides are in development. --- # Outline 1. What is metabolomics? 2. What is the workflow? --- class: inverse, left, middle .position[.pill_box[.section[metabolomics]]] --- # omics .pull-left[ <center> <figure> <img id = "img_scale2_left" width = "270" src = "data:image/png;base64,#images/omics_diagram.png"/> <figcaption><b>Figure </b>: Metabolomics in the flow of information from DNA to the phenotype<a id="1_ref" href = "#1">[1]</a> </figcaption> <figure> </center> .footnote[ ---- <p id="1">[1] <a href = "https://www.genengnews.com/magazine/118/using-metabolomics-to-optimize-bioprocessing/" target="_blank" rel="noopener noreferrer">[Figure credit: Using Metabolomics to Optimize Bioprocessing. Don Rose |genengnews | September 1, 2009]</a></p>] ] ??? If you have not heard metabolomics before, this picture might help you understand it within omics family a bit. What makes metabolomics difference from other omics. key words: low molecule weight, metabolites, pathway -- .pull-right[ <details> <summary>Applied Metabolomics</summary> <p> 1) Drug Research and Development <br> 2) Plant Metabolomites <br> 3) Environmental Protection</p> </details> ] ??? Metabolomics, a systems biology tool, is defined as the comprehensive profiling of all the biochemicals and metabolites in a biological sample. It is nonhypothesis driven so that no specific class of biochemicals or particular pathways is targeted. The majority of metabolomics studies are done using mass spectrometry, often coupled with another chromatographic method for better resolution of components. This analysis reveals changes in biochemicals and their associated pathways that are related to the experimental design, including drug, disease, diet, or environmental effects. Because these changes are closely related to the biological phenotype (Figure 1), a metabolomic analysis can provide insight into mechanism (e.g., drug toxicity) as well as markers related to the phenotype (e.g., diagnostic markers of disease). --- .left-column[ # Tools ] .right-column[ <details> <summary>Instrumentation</summary> <p> LC-HRMS, <br> LC-QQQ, <br> GC-HRMS, <br> NMR<br> ....</p> </details> <details> <summary>Software</summary> <p> <b>Cloud service</b>:</p> <p><a href="https://xcmsonline.scripps.edu/landing_page.php?pgcontent=mainPage" target="_blank" rel="noopener noreferrer"><img width = "180" src = "data:image/png;base64,#images/xcms_cloud.jpg"/></a> <a href="https://www.metaboanalyst.ca" target="_blank" rel="noopener noreferrer"><img width = "180" src = "data:image/png;base64,#images/metaboanalyst5_logo.png"/></a></p> <p><br> <b>Software</b>:</p> <p><a href="http://mzmine.github.io" target="_blank" rel="noopener noreferrer"><img width = "180" src = "data:image/png;base64,#images/mzmine3_logo.png"/></a></p> <p><br> <b>R Packages</b>:<p> <p><a href="https://www.rformassspectrometry.org/" target="_blank" rel="noopener noreferrer"><img width = "180" src = "data:image/png;base64,#images/r4MS_logo.png"/></a></p> </details> ] ??? Challenges of cloud service: did not get technical support, did not provide update due to limited funds, problem with uploading, --- class: inverse, left, middle .position[.pill_box[.section[Begin With the End]]] --- class: center middle <center> <img width = "720" src = "data:image/png;base64,#images/stages-first+last.png"/> </center> ??? Imagination --- # What are the features? <script> // Initiate zoom effect: imageZoom("myimage_features", "myresult_features"); </script> <div class="img-zoom-container"> <img id="myimage_features" src="images/what_are_features.jpg" width="720" height = "100"> <div id="myresult_features" class="img-zoom-result"></div> </div> Properties of the feature: mz value, rt value, ms_level, peakidx ??? feature compose of mz med, rt med so how do we get there? I will give a quick overview of LC-HRMS --- # Mass Spectrometry 101 - Instrumentation <!-- Tab links --> <div class="tab"> <tab_button class="tablinks active" onclick="tablabel(event, 'MST1')">LC-MS Schematic</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'MST2')">LC Separation</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'MST3')">High-Resolution vs. Low-Resolution <br>Detector</tab_button> </div> <!-- Tab content --> <div id="MST1" class="tabcontent"> <center><img id = "img_scale2" width = "360" src = "data:image/png;base64,#images/LC-MS-MS-workflow.jpg" /></center> </div> <div id="MST2" class="tabcontent"> <div class="slideshow-container"> <div class="mySlides_chrom fade"> <div class="numbertext">1 / 4</div> <figure> <img src="images/shopping_scene.jpg" style="width:80%"> <figcaption>The separation on the liquid chromatography system could be explained by shopping at a mall</figcaption> </figure> </div> <div class="mySlides_chrom fade"> <div class="numbertext">2 / 4</div> <img src="images/sample-one-band-separation.png" style="width:100%"> <br><br><br> <div class="text">Separation on a Column<br><i>Figure credit: (https://agora.cs.wcu.edu/~huffman/lectures/chromotography.html)</i></div> </div> <div class="mySlides_chrom fade"> <div class="numbertext">3 / 4</div> <img src="images/sample-bands-animation.webp" style="width:100%"> <br><br><br> <div class="text">Separation on a Column<br><i>Figure credit: Shimadzu.com</i></div> </div> <div class="mySlides_chrom fade"> <div class="numbertext">4 / 4</div> <img src="images/hplc-sample-bands-detection.avif" style="width:100%"> <br><br><br> <div class="text">Peak Detection<br><i>Figure credit: Shimadzu.com</i></div> </div> <a class="prev" onclick="plusSlides(-1)">❮</a> <a class="next" onclick="plusSlides(1)">❯</a> </div> <br> <div style="text-align:center"> <span class="dot_chrom" onclick="currentSlide(1)"></span> <span class="dot_chrom" onclick="currentSlide(2)"></span> <span class="dot_chrom" onclick="currentSlide(3)"></span> <span class="dot_chrom" onclick="currentSlide(4)"></span> </div> </div> <div id = "MST3" class = "tabcontent"> The mass measurement on the mass detection system could be explained by weighing on a balance. <div class = "row"> <div class = "column"> <figure> <img width = "270" src = "data:image/png;base64,#images/high_resolution_balance.jpg"/> <figcaption><b>Figure 3</b>: High Resolution Balance</figcaption> </figure> </div> <div class = "column"> <figure> <img width = "270" src = "data:image/png;base64,#images/low_resolution_balance.jpg"/> <figcaption><b>Figure 4</b>: Low Resolution Balance</figcaption> </figure> </div> </div> </div> ??? .pull-left[ <details> <summary>Experiment</summary> <p> * Replicates <br> * Quality control samples</p> </details> ] .pull-right[ <details> <summary>Liquid chromatography system</summary> <p> * column bleeding <br> * Retention time shift</p> </details> <details> <summary>Mass spectrometer configuration </summary> <p> * scanning time/ dwell time <br> * m/z range</p> </details> ] --- # Mass Spectrometry 101 - Data <!-- Tab links --> <div class="tab"> <tab_button class="tablinks active" onclick="tablabel(event, 'MSD1')">Data Structures</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'MSD2')">Chromatogram</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'MSD3')">Spectrum</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'MSD4')">3D Visualization</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'MSD5')">TIC, BPC</tab_button> </div> <!-- Tab content --> <div id="MSD1" class="tabcontent" style="display:block"> <div class = "row"> <div class = "column"> <figure> <img id = "img_scale2_left" width="270" src = "data:image/png;base64,#images/raw_data_structure.jpg"/> <figcaption><b>Figure </b>: MS Data</figcaption> </figure> </div> <div class = "column"> <figure> <img width="180" src = "data:image/png;base64,#images/file_cabinet.jpg"/> <figcaption><b>Figure </b>: The S4 data structure could be explained by a file cabinet</figcaption> </figure> </div> </div> </div> <div id="MSD2" class="tabcontent"> <center> <figure> <img id = "img_scale2" width="360" src = "data:image/png;base64,#images/TIC_chromatogram.png"/> <figcaption><b>Figure </b>: TIC</figcaption> </figure> </center> </div> <div id="MSD3" class="tabcontent"> <center> <figure> <img id = "img_scale2" width="360" height="200" src = "data:image/png;base64,#images/spectra_example.png"/> <figcaption><b>Figure </b>: Spectra</figcaption> </figure> </center> </div> <div id="MSD4" class="tabcontent"> <center> <figure> <img id = "img_scale2" width="360" height="200" src = "data:image/png;base64,#images/3D_plot.png"/> <figcaption><b>Figure </b>: Spectra</figcaption> </figure> </center> </div> <div id="MSD5" class="tabcontent"> <details> <summary>TIC</summary> <p>Total Ion Current / Total Ion Counts</p> $$ TIC_{RT}=\sum_{i=1}^nIntensity $$ </details> <details> <summary>BPC</summary> <p>Base Peak Counts</p> $$ BPC_{RT}=max(Intensity) $$ It may not be the m/z of interest, sometimes it could be the m/z of interference. </details> </div> --- class: inverse, left, middle .position[.pill_box[.section[Feature Finding]]] --- # Mass spectrometry data pre-processing <center> <img width = "720" src = "data:image/png;base64,#images/stages-feature_finding.png"/> </center> ??? the general steps. --- # My Work <details> <summary>Experience with Cloud Service</summary> <p> Concern about technical support with xcms online <br>  Concern about uploading <br>  Impossible to optimize parameters</p> </details> <details> <summary>Purpose:</summary> <p> To evaluate the xcms package <br> Task: find four spiked pesticides in fortified solution.</p>  Four pesticide compounds generated m/z [M+H]<sup>+</sup> and [M+Na]<sup>+</sup> adduct ions shown in the following table. <table style="width:100%;"> <caption style="text-align:left", align = "top"></caption> <colgroup> <col style="width: 34%" /><col style="width: 33%" /><col style="width: 33%" /> </colgroup> <thead> <tr style = "font-size: 14px" class="header"> <th><p>Compounds</p></th><th><p>Adduct [M+H]<sup>+</sup></p></th><th><p>Adduct [M+Na]<sup>+</sup></p></th> </tr> </thead> <tbody> <tr class="odd"> <td><p>Compound A</p></td><td><p>143.0354</p></td><td><p>165.0191</p></td> </tr> <tr class="even"> <td><p>Compound B</p></td><td><p>153.0564</p></td><td><p>175.0395</p></td> </tr> <tr class="odd"> <td><p>Compound C</p></td><td><p>167.0728</p></td><td><p>189.0554</p></td> </tr> <tr class="even"> <td><p>Compound D</p></td><td><p>213.0784</p></td><td><p>235.0607</p></td> </tr> </tbody> </table> </details> <details> <summary>Samples:</summary> <p> one ginger solution (as blank) and one fortified ginger solution. </p> </details> <details> <summary>Experiments:</summary> <p> ran blank solution and fortified solution four times respectively. </p> </details> <details> <summary>Groups:</summary> <p> Group #1: 4 files of blank solution. Color code: <a style = "color: blue">blue</a> <br> Group #2: 4 files of fortified solution. Color code: <a style = "color: red">red</a> </p> </details> ??? it is time to introduce my work. --- # Step #1: Convert Raw Data to S4 object .pull-left[ The new way: ```r *readMSData(files = [a file list], mode = "onDisk", * centroided = TRUE, ...) ``` The output is an OnDiskMSnExp instance. OnDisk: data is saved on the disk, not in the memory. centroided: definition ] .pull-right[ The redundant way: ```r *xcmsSet("[local file directory]", method="centWave", ppm=10, peakwidth=c(10, 60), snthresh=6, integrate=1, noise=500, prefilter=c(3,100), mzdiff=0.01, fitgauss=FALSE, mzCenterFun="wMean") ``` The output is a xcmsSet instance. `xcmsSet()` won't be supported. ] --- # Step #2: Find Peaks .panelset[ .panel[.panel-name[Lines of Code] ```r BPPARAM <- SnowParam(detectCores()-1, progressbar = TRUE) params <- list() *params$CentWave <- CentWaveParam(peakwidth = c(10, 90), ppm = 10, mzdiff = -0.01, snthresh = 3, noise = 500, prefilter=c(3,500), * mzCenterFun="wMean" integrate=1, fitgauss=TRUE, verboseColumns = TRUE ) pks <- findChromPeaks([OnDiskMSnExp instant], param = params$CentWave, BPPARAM = BPPARAM) ``` ] .panel[.panel-name[Chromatogram of Peaks] <center><img id = "img_scale2" width = "360" src = "data:image/png;base64,#images/plot_after_finding_peaks.png"/></center> ] .panel[.panel-name[Peak Finding Mechanism] .pull-left[ <figure> <img src="images/gaussian peak and its first four derivatives.jpg"> <figcaption>Gaussian Peak and Its First Four Derivatives</figcaption> </figure> ] .pull-right[ <figure> <img src="images/detection of peak maxima by the smoothed second derivative of the signal.jpg"> <figcaption>Detection of peak maxima by the smoothed second derivative of the signal</figcaption> </figure> ] --- <a style = "font-size: 8px">Figure credit: Felinger, Attila. (1998). *Data Analysis and Signal Processing in Chromatography*. Elsevier Science</a> ] ] --- # Step #2A: Optimization .panelset[ .panel[.panel-name[centWave Default Setting] <center><img width = "360" src = "data:image/png;base64,#images/default_centwave_setting.jpg"/></center> ] .panel[.panel-name[Optimization] [IPO package](https://bioconductor.org/packages/release/bioc/html/IPO.html): Automated Optimization of XCMS Data Processing parameters. ```r peakpickingParameters <- getDefaultXcmsSetStartingParams('centWave') peakpickingParameters$min_peakwidth <- c(5, 15) peakpickingParameters$max_peakwidth <- c(50,90) peakpickingParameters$ppm <- c(3, 12) peakpickingParameters$mzdiff <- c(-0.002, 0.002) peakpickingParameters$snthresh <- c(1, 10) peakpickingParameters$noise <- c(100, 1000) peakpickingParameters$prefilter <- c(1,4) peakpickingParameters$value_of_prefilter <- c(100, 1000) resultPeakpicking_centWave <- optimizeXcmsSet(files = ["a file list"], params = peakpickingParameters, nSlaves = 1, subdir = NULL, plot = TRUE) ``` ] ] ??? First a coarse estimation of peak start is detected when the first derivative exceeds the threshold for two or more consecutive points. Then, the second derivative of the signal is analyzed backward, and the starting point of the peak is assigned to the point at which the second derivative falls below a threshold. The location of apices and valleys can also be fine-tuned by the two-step method. p186. --- # PCA Outcomes of Different mzCenterFun <div class = "row"> <div class = "column" style="width:33%"> <button type = "button" onclick="toggle4()"> <b>mzCenterFun = "wMean"</b> <br> ppm = 12, <br> peakwidth = c(12, 82),<br> snthresh = 10,<br> integrate = 1,<br> noise = 361, <br> prefilter = c(3,1090),<br> mzdiff = 0, <br> fitgauss= FALSE, <br> <mark class = "lemon">mzCenterFun = "wMean"</mark> </button> <img id = "hide_scale2_left_b" width = "180" src = "data:image/png;base64,#images/optimized.subset.diff_mzCenterFun/PCA_plot_setting_02_sub.optimized.wmean.png"/> </div> <div class = "column" style="width:33%"> <button type = "button" onclick="toggle5()"> <b>mzCenterFun = "apex"</b> <br> ppm = 12,<br> peakwidth = c(12, 82),<br> snthresh = 10,<br> integrate = 1,<br> noise = 361, <br> prefilter = c(3,1090),<br> mzdiff = 0, <br> fitgauss= FALSE, <br> <mark class = "lemon">mzCenterFun = "apex"</mark> </button> <img id = "hide_scale3_center_b" width = "180" src = "data:image/png;base64,#images/optimized.subset.diff_mzCenterFun/PCA_plot_setting_03_sub.optimized.apex.png"/> </div> </div> --- # Step #3: Align Peaks <!-- Tab links --> <div class="tab"> <tab_button class="tablinks active" onclick="tablabel(event, 'ap1')">Reasons</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'ap2')">Computational solution</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'ap3')">Outcome - Plot</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'ap4')">Outcome - Data</tab_button> </div> <!-- Tab content --> <div id="ap1" class="tabcontent"> 1. Peak shifts due to problems in liquid chromatography system. <br>2. Statistical Analysis / Comparison </div> <div id="ap2" class="tabcontent"> <div class = "quote"> adjustRtime([a XCMSnExp instance<sup>*</sup>], param = ObiwarpParam(binSize = 0.01)) </div> *: it is the outcome of the finding peak process. <br> Blank #4 was used as center sample. </div> <div id="ap3" class="tabcontent"> <center><img width = "60%" src = "data:image/png;base64,#images/rt_difference.png"/></center> </div> <div id="ap4" class="tabcontent"> Before <div class = "quote"> head(rtime(pks_rt_grp_rt, adjusted=F), n=20) </div> <img src = "data:image/png;base64,#images/alignment_before.jpg"/> <br> After <div class = "quote"> head(rtime(pks_rt_grp_rt, adjusted=T), n=20) </div> <img src = "data:image/png;base64,#images/alignment_after.jpg"/> </div> --- # Step #4: Correspondence .panelset[ .panel[.panel-name[Purpose] To match detected peaks among samples. ] .panel[.panel-name[Lines of Code] ```r params$group2 <- PeakDensityParam(sampleGroups, binSize = 0.001, bw = 0.3, minSamples = 3, minFraction = 0.7, maxFeatures = 20) pks_rt_grp_rt_grp <- groupChromPeaks(pks_rt_grp_rt, param = params$group2) ``` ] .panel[.panel-name[Outcome - Plot] <center><img width = "60%" src = "images/plot_after_grouping.jpg"></center> ] ] --- # Step #5: Peak Filling <!-- Tab links --> <div class="tab"> <tab_button class="tablinks active" onclick="tablabel(event, 'gf1')">Purpose</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'gf2')">Line of Code</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'gf3')">Outcome - Data</tab_button> </div> <!-- Tab content --> <div id="gf1" class="tabcontent"> After correspondence (i.e. grouping of chromatographic peaks across samples) there will always be features (peak groups) that do not include peaks from every sample. <br>The fillChromPeaks method defines intensity values for such features in the missing samples by integrating the signal in the mz-rt region of the feature. </div> <div id="gf2" class="tabcontent"> <div class = "quote"> pks_rt_grp_rt_grp_filled <- fillChromPeaks(pks_rt_grp_rt_grp, param = ChromPeakAreaParam()) </div> </div> <div id="gf3" class="tabcontent"> <details> <summary>Before</summary> <img src ="images/gap_unfilled.jpg"> </details> <details> <summary>After</summary> <img src ="images/gap_filled.jpg"> </details> </div> --- # Step #6: Create a SummarizedExperiment Object <!-- Tab links --> <div class="tab"> <tab_button class="tablinks active" onclick="tablabel(event, 'seo1')">Purpose</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'seo2')">Line of Code</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'seo3')">Outcome - Data</tab_button> </div> <!-- Tab content --> <div id="seo1" class="tabcontent"> It is required to normalize features' signal intensities for further data processing and analysis. However there are no methods built in the current version of xcms package. <br><br>It is advised to use the <u>SummarizedExperiment</u> returned by the <u>quantify</u> method. </div> <div id="seo2" class="tabcontent"> <div class = "quote"> res <- quantify(pks_rt_grp_rt_grp_filled, value = "into", method = "maxint") <br><br> Add feature values <br><br>assays(res)$raw_filled <- featureValues(pks_rt_grp_rt_grp_filled, filled = TRUE) </div> </div> <div id="seo3" class="tabcontent"> <img src = "images/summarized_experiment_object.jpg"> </div> --- class: inverse, left, middle .position[.pill_box[.section[End with Statistical Analysis]]] --- # Step #7: Statistical Analysis <details> <summary>PCA</summary> <div class = "quote"> pca_model <- prcomp(t(na.omit(assay(res, "raw_filled"))), center = TRUE) </div> </details> <details> <summary>LIMMA</summary> <div class = "quote"> model <- lmFit(assay(res, "raw_filled")) </div> <br> <script> // Initiate zoom effect: imageZoom("myimage_limmaoutcome", "myresult_limmaoutcome"); </script> <div class="img-zoom-container"> <img id="myimage_limmaoutcome" src="images/limma_outcome.jpg" width="720" height = "100"> <div id="myresult_limmaoutcome" class="img-zoom-result"></div> </div> </details> --- # Summary of My Work <details> <summary>Four pesticides were found</summary> <script> // Initiate zoom effect: imageZoom("myimage_4pesticides", "myresult_4pesticides"); </script> <div class="img-zoom-container"> <img id="myimage_4pesticides" src="images/limma_4pesticides.png" width="720" height = "100"> <div id="myresult_4pesticides" class="img-zoom-result"></div> </div> </details> <details> <summary>Missed Adduct Ions</summary>  [Compound A + Na]<sup>+</sup> <br> [Compound C + H]<sup>+</sup> </details> --- class: inverse, left, middle .position[.pill_box[.section[most importantly]]] --- # Lesson Learned - Know Your Data .panelset[ .panel[.panel-name[PCA Outputs] <div class = "row"> <div class = "column_left"> <h3>PCA Plot of raw data</h3> <img id = "img_scale2_left" width="270" src = "data:image/png;base64,#images/optimized.wMean.diff_data/PCA_plot_setting_04_raw.optimized.wmean.png"/> </div> <div class = "column_right"> <h3>PCA Plot of subset data</h3> <img id = "img_scale2_right" width="270" src = "data:image/png;base64,#images/optimized.wMean.diff_data/PCA_plot_setting_06_sub.optimized.wmean.png"/> </div> ] .panel[.panel-name[Exploratory Analysis] <center> <img width = "720" src = "data:image/png;base64,#images/stages-EDA.png"/> </center> <br>Weblink: <a href = "https://mrlennylin.shinyapps.io/MS_data_mining_shiny_rev02b/" target="_blank" rel="noopener noreferrer">Demonstration of mass spectrometry data exploratory analysis</a> ] .panel[.panel-name["Trim" Data] <div class = "row"> <div class = "column_left"> <h3>Interference m/z</h3> <p><img id = "img_scale2_left" width="270" src = "data:image/png;base64,#images/list_of_base_peaks.png"/></p> <p><img id = "img_scale2_bottom" width="270" src = "data:image/png;base64,#images/352mz_intensity.png"/></p> </div> <div class = "column_right"> <div class = "quote"> raw_subset <- raw_data %>% <br><br>  filterMz(c(100, 500)) %>% <br><br>  filterRt(c(0.1, 400)) </div> </div> ] ] --- class: inverse, left, middle .position[.pill_box[.section[wrap up]]] --- .panelset[ .panel[.panel-name[Workflow] <center> <img width = "720" src = "data:image/png;base64,#images/stages-EDA.png"/> </center> ] .panel[.panel-name[Advanced Workflow] <center> <img width = "720" src = "data:image/png;base64,#images/stages-add-on.png"/> </center> ] ] ??? Adduct Ions Adduct ions are formed by the interaction of a precursor ion with one or more atoms or molecules, such as hydrogen ions, sodium ions, potassium ions, ammonium ions, hydride ions, chloride ions, bromide ions, acetate ions to form an ion. What are in common among those solutions are the same workflow. What are different might be algorithm used to find peaks. The critical step is to have features with good quality. --- # Comments on xcms Package <!-- Tab links --> <div class="tab"> <tab_button class="tablinks active" onclick="tablabel(event, 'xcms1')">Misleading Settings</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'xcms2')">PCA Outcomes of <br>Different centWave Parameters</tab_button> <tab_button class="tablinks" onclick="tablabel(event, 'xcms3')">Optimization Mechanism</tab_button> </div> <!-- Tab content --> <div id = "xcms1" class="tabcontent"> <table style="width:100%; font-size: 60%"> <caption style="text-align:left", align = "top"></caption> <colgroup> <col style="width: 25%" /><col style="width: 25%" /><col style="width: 25%" /><col style="width: 25%" /> </colgroup> <thead> <tr class="header"> <th><p>Parameters</p></th><th><p>Real-world Settings</p></th><th><p>xcms Default Settings</p></th><th><p>IPO-optimized Settings</p></th> </tr> </thead> <tbody> <tr class="odd"> <td><p>ppm</p></td><td><p>5</p></td><td><p>17 - 32</p></td><td><p>12</p></td> </tr> <tr class="even"> <td><p>peakwidth</p></td><td><p>0.05 - 2.00</p></td><td><p>12 - 65</p></td><td><p>12 - 82</p></td> </tr> </tbody> </table> </div> <div id = "xcms2" class = "tabcontent"> <div class = "row"> <div class = "column" style="width:33%"> <button type = "button" onclick="toggle1()" id="btnID"> <b>Close-to-Real Parameters</b> <br> ppm = 10,<br> <mark class = "lemon">peakwidth = c(0.05, 2.00)</mark>,<br> snthresh = 2,<br> integrate = 1,<br> noise = 500, <br> prefilter = c(2,500),<br> mzdiff = -0.01, <br> fitgauss = TRUE, <br> mzCenterFun = "wMean" </button> <img id="hide_scale2_left_a" width = "180" src="data:image/png;base64,#images/subset.wMean.diff_para/PCA_plot_setting_05_sub.realpara.wmean_1.png"/> </div> <div class = "column" style="width:33%"> <button type = "button" onclick="toggle2()"> <b>Close-to-Default Parameters</b> <br> ppm = 10, <br> peakwidth = c(10, 90),<br> snthresh = 3,<br> integrate = 1,<br> noise = 500, <br> prefilter = c(3,500),<br> mzdiff = -0.01, <br> fitgauss = TRUE, <br> mzCenterFun = "wMean" </button> <img id = "hide_scale3_center_a" width = "180" src = "data:image/png;base64,#images/subset.wMean.diff_para/PCA_plot_setting_06_sub.default.para.wmean_1.png"/> </div> <div class = "column" style="width:33%"> <button type = "button" onclick="toggle3()"> <b>Optimized Parameters</b> <br> <mark class = "lemon">ppm = 12</mark>,<br> peakwidth = c(12, 82),<br> snthresh = 10,<br> integrate = 1,<br> noise = 361, <br> prefilter = c(3,1090),<br> <mark class = "lemon">mzdiff = 0</mark>, <br> <mark class = "lemon">fitgauss= FALSE</mark>, <br> mzCenterFun = "wMean" </button> <img id = "hide_scale2_right" width = "180" src = "data:image/png;base64,#images/subset.wMean.diff_para/PCA_plot_setting_02_sub.optimized.wmean_1.png"/> </div> </div> </div> <div id = "xcms3" class="tabcontent"> The optimization took 3 days. <br><br><br> <div class ="quote"> <font style = "font-size: 16px">IPO package uses a Box-Behnken design, which is strange choice. Not very modern and they are quite big when you have as many as 8 factors. <br><br>It also seems that in each iteration of the optimization cycle, they start a new design. <br><br>And it sounds like the data from the previous iteration is discarded. This is also strange and seems very wasteful. <br><br>- Phil Kay, DoE Specialist at JMP</font> </div> </div> --- class: center, middle # <center>Q & A</center> Slides created via the R package [**xaringan**](https://github.com/yihui/xaringan) and <br> enhanced via the R package [**xaringanExtra**](https://github.com/gadenbuie/xaringanExtra). The chakra comes from [remark.js](https://remarkjs.com), [knitr](https://yihui.org/knitr/), and [R Markdown](https://rmarkdown.rstudio.com). [
zh.lenny.lin@gmail.com](mailto:zh.lenny.lin@gmail.com)