From 206c495e6e211a40847fea5013d80579cece91ee Mon Sep 17 00:00:00 2001 From: Carol-seven <542046605@qq.com> Date: Mon, 8 Jul 2024 22:19:26 -0400 Subject: [PATCH] add notes regarding the analysis reference --- docs/articles/scaffold.html | 2 +- docs/articles/usage_template.html | 246 +++++++++++------- .../figure-html/unnamed-chunk-33-1.png | Bin 51804 -> 50909 bytes .../figure-html/unnamed-chunk-41-1.png | Bin 28774 -> 28928 bytes .../figure-html/unnamed-chunk-44-1.png | Bin 42136 -> 41872 bytes docs/pkgdown.yml | 2 +- docs/search.json | 2 +- vignettes/usage_template.Rmd | 116 ++++++--- 8 files changed, 234 insertions(+), 134 deletions(-) diff --git a/docs/articles/scaffold.html b/docs/articles/scaffold.html index fc193e5..f4f5749 100644 --- a/docs/articles/scaffold.html +++ b/docs/articles/scaffold.html @@ -80,7 +80,7 @@

Facility, UConn
\(^3\)Statistical Consulting Services, UConn

-

2024-07-07

+

2024-07-08

Source: vignettes/scaffold.Rmd
scaffold.Rmd
diff --git a/docs/articles/usage_template.html b/docs/articles/usage_template.html index 511d9a7..e5510e8 100644 --- a/docs/articles/usage_template.html +++ b/docs/articles/usage_template.html @@ -80,7 +80,7 @@

Facility, UConn
\(^3\)Statistical Consulting Services, UConn

-

2024-07-07

+

2024-07-08

Source: vignettes/usage_template.Rmd
usage_template.Rmd
@@ -1168,63 +1168,93 @@

FilteringfilterProtein() provides a similar function to filter proteins by additional protein -information: gene, accession, and description.

+information.

+
 filterProtein(dataTran, proteinInformation = "preprocess_protein_information.csv",
               text = c("Ras-related protein Rab-3D", "Alcohol dehydrogenase 1"),
-              by = "description",
+              by = "PG.ProteinDescriptions",
               removeList = FALSE)

where proteinInformation is the file name for protein information, automatically generated by preprocessing(). In -this case, the proteins with descriptions “Ras-related protein Rab-3D” -or “Alcohol dehydrogenase 1” will be kept. Note that the search value -text is used for exact equality search.

+this case, the proteins whose "PG.ProteinDescriptions" +match with “Ras-related protein Rab-3D” or “Alcohol dehydrogenase 1” +will be kept. Note that the search value text is used for +exact equality search.

+ + + + + + + + + + + + + + + + + + + + + +
R.Condition R.ReplicateRAB3D_HUMANADH1_YEAST
100fmol 116.6868520.25893
100fmol 216.5718420.21888
100fmol 316.4957820.37810
100fmol 416.6205920.27705
100fmol 516.5956620.23536
50fmol 116.4621819.38908
50fmol 216.6610619.54470
50fmol 316.6486219.50293
50fmol 416.6391019.37445
50fmol 516.6178219.40820
@@ -3149,43 +3179,58 @@

Summarization

Analysis

The function analyze() calculates the results that can -be used in subsequent visualizations. If more than two conditions exist -in the data, precisely two conditions for comparison must be specified -via the argument conditions.

+be used in subsequent visualizations.

+
+

Note: The following listed analysis compare data +under two conditions. The order of +conditions will affect downstream analysis, as the +second condition serves as the reference of +comparison.

+
    +
  • If only two conditions exist in the data and +conditions is not specified, conditions will +automatically be generated by sorting the unique values alphabetically +and in ascending order.

  • +
  • If more than two conditions exist in the data, precisely two +conditions for comparison must be specified via the argument +conditions.

  • +
+
-cond <- c("50fmol", "100fmol")
+cond <- c("100fmol", "50fmol")

Student’s t-test

The Student’s t-test is used to compare the means between two conditions for each protein, reporting both the difference in means -between the conditions (calculated as Condition 1 - Condition 2) and the -P-value of the test.

+between the conditions and the P-value of the test.

+
+Note: The difference is calculated by subtracting the +mean of the second condition from the mean of the first condition +(condition 1 - Condition 2). +
 anlys_t <- analyze(dataImput, conditions = cond, testType = "t-test")
 #> Data are essentially constant.
 #> Data are essentially constant.
-

Oops! The warning message shows “Data are essentially constant,” -which means that the data contain proteins with the same value in all -samples. In this case, the P-value of t-test returns NA.

@@ -3195,7 +3240,7 @@

Student’s t-test

-+@@ -3231,23 +3276,23 @@

Student’s t-test

- + - - + + - - + + - - - - + + + + - - - - + + + + @@ -3272,6 +3317,12 @@

Student’s t-test

Difference-0.34156280.3415628 0-0.20206870.34302880.2020687-0.3430288 0-1.09647270.00849811.0964727-0.0084981 00.29734790.4549624-0.06640000.3024055-0.2973479-0.45496240.0664000-0.3024055 00.06693050.0243987-0.5823461-0.9278932-0.0669305-0.02439870.58234610.9278932
P-value
+
+Note: In the Student’s t-test, a warning message might +appear, stating “Data are essentially constant,” which +means that the data contain proteins with the same value in all samples. +In this case, the P-value of t-test returns NA. +

Moderated t-test @@ -3284,17 +3335,6 @@

Moderated t-test
 anlys_mod.t <- analyze(dataImput, conditions = cond, testType = "mod.t-test")
-

In the moderated t-test, a warning message might occur stating, “Zero -sample variances detected, have been offset away from zero.” This -warning corresponds to examples of proteins that exhibited identical -quant values, either pre- or post-imputation, and therefore no variance -is present across conditions for those proteins. This does not impede -downstream analysis; it merely serves to alert users to its -occurrence.

- - - -
@@ -3304,7 +3344,7 @@

Moderated t-test

-+@@ -3340,23 +3380,23 @@

Moderated t-test

- + - - + + - - + + - - - - + + + + - - - - + + + + @@ -3381,6 +3421,19 @@

Moderated t-test

Difference-0.34156280.3415628 0-0.20206870.34302880.2020687-0.3430288 0-1.09647270.00849811.0964727-0.0084981 00.29734790.4549624-0.06640000.3024055-0.2973479-0.45496240.0664000-0.3024055 00.06693050.0243987-0.5823461-0.9278932-0.0669305-0.02439870.58234610.9278932
P-value
+
+Note: In the moderated t-test, a warning message might +occur stating, “Zero sample variances detected, have been offset +away from zero.” This warning corresponds to examples of +proteins that exhibited identical quant values, either pre- or +post-imputation, and therefore no variance is present across conditions +for those proteins. This does not impede downstream analysis; it merely +serves to alert users to its occurrence. +
+ + + +

MA @@ -3388,6 +3441,12 @@

MA

The result of testType = "MA" is to generate the data for plotting an MA plot, which represents the protein-wise averages within each condition.

+
+Note: The rows of the output are ordered by conditions, +impacting the subsequent MA plot visualization. Specifically, the first +row represents the protein-wise average of the first condition, and the +second row represents the second condition. +
 anlys_MA <- analyze(dataImput, conditions = cond, testType = "MA")
@@ -3434,26 +3493,6 @@

MA -50fmol -16.43429 -20.02791 -19.32761 -18.21620 -21.25237 -17.76090 -17.40381 -22.12204 -18.58800 -15.08078 -15.9219 -16.84942 -13.59442 -16.51076 -17.94872 -14.61967 -16.29274 - - 100fmol 16.77585 20.02791 @@ -3473,6 +3512,26 @@

MA 15.20201 17.22063 + +50fmol +16.43429 +20.02791 +19.32761 +18.21620 +21.25237 +17.76090 +17.40381 +22.12204 +18.58800 +15.08078 +15.9219 +16.84942 +13.59442 +16.51076 +17.94872 +14.61967 +16.29274 +

@@ -3540,6 +3599,13 @@

MA

Most proteins are expected to exhibit little variation, leading to the majority of points concentrating around the line M = 0 (indicating no difference between group means).

+
+Note: Again, the order of +conditions in the analyze() will determine how +the MA plot is visualized. The second row of anlys_MA acts +as the comparison reference: the first and second rows refer to +variables \(log_2 X\) and \(log_2 Y\), respectively. +
 visualize(anlys_MA, graphType = "MA", M.thres = 1, transformLabel = "Log2")
 #> Warning: Removed 16 rows containing missing values or values outside the scale range
@@ -3548,10 +3614,10 @@ 

MA

where M.thres = 1 means the M thresholds are set to −1 and 1. The scatters are split into three parts: significant up (M > 1), no significant (-1 \(\leq\) M \(\leq\) 1), and significant down (M < --1). And transformLabel = "Log2" is used to label the -title. Additionally, the warning message “Removed 16 rows containing -missing values” indicates that there are 16 proteins with no -significance.

+-1). And transformLabel = "Log2" is used to prefix the +title, x-axis, and y-axis labels. Additionally, the warning message +“Removed 16 rows containing missing values” indicates that there are 16 +proteins with no significance.

Normalize diff --git a/docs/articles/usage_template_files/figure-html/unnamed-chunk-33-1.png b/docs/articles/usage_template_files/figure-html/unnamed-chunk-33-1.png index 4002c50e7120856d40a759d9a0e65d0d438ec2c6..7bf8aacc56d8c1ad04d830ed8324274938655748 100644 GIT binary patch literal 50909 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 X%^;(KRhh@=k23#J+8Me1@P+>iWefVz literal 51804 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 literal 28774 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�#l(ZoJK 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 literal 42136 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 omq#Kz)Du-s6}42Wp{LJpcdz diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 9bf31f5..20fa976 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -4,7 +4,7 @@ pkgdown_sha: ~ articles: scaffold: scaffold.html usage_template: usage_template.html -last_built: 2024-07-07T16:34Z +last_built: 2024-07-09T02:13Z urls: reference: https://uconn-scs.github.io/msDiaLogue/reference article: https://uconn-scs.github.io/msDiaLogue/articles diff --git a/docs/search.json b/docs/search.json index dae4602..ab7e206 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"setting-quantitative-value-in-scaffold","dir":"Articles","previous_headings":"","what":"1. Setting Quantitative Value in Scaffold","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"quantitative value must set intensity measurement count measurement. Inside Scaffold 5, Samples tab, Display Options dropdown menu top left window must set “Quantitative Value” quantitative value must defined (Experiment –> Quantitative Analysis –> Settings, Quantitative Method dropdown). PMF recommends Average Precursor Intensity value.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"turning-off-normalization-in-scaffold","dir":"Articles","previous_headings":"","what":"2. Turning Off Normalization in Scaffold","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"Normalization must turned . (Experiment –> Quantitative Analysis –> Settings), make sure “Use Normalization” box unchecked. option normalize various methods msDiaLogue, stack normalizations programs.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"minimum-requirements-for-experiment-conditions","dir":"Articles","previous_headings":"","what":"3. Minimum Requirements for Experiment Conditions","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"experiment must contain minimum 2 conditions, condition must minimum 3 replicates. conditions fine, replicates fine, conditions need number replicates. fewer 3 replicates condition, 1 condition, throw error msDiaLogue able process data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"sample-naming-format-requirements","dir":"Articles","previous_headings":"","what":"4. Sample Naming Format Requirements","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"samples must named following format: YYYYMMDD_initials_condition-replicate# (e.g. 20240101_JL_ctrl-1). files may already named way; please check Scaffold “Samples” tab, heading quantitative value column. sample name appear vertically. name formatted , can change going “Load Data” tab, selecting tab sample individually, right-clicking tab, choosing “Edit BioSample”, typing correct name format “Sample Name” box, clicking “Apply”.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"filtering-dataset-for-protein-identification","dir":"Articles","previous_headings":"","what":"5. Filtering Dataset for Protein Identification","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"strongly recommend filter dataset hide proteins 1 peptide identified. “Samples” tab, top-menu bar, “Min # Peptides” dropdown, set 2.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"collapsing-protein-clusters-in-samples-tab","dir":"Articles","previous_headings":"","what":"6. Collapsing Protein Clusters in Samples Tab","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"protein clusters must collapsed. “Samples” tab, first column (header “#”), right click numbered entries , select “Clusters”, select “Collapse ”. converts gray-shaded entries, multiple proteins inferred peptide evidence, expanded view line possible protein match cluster collapsed view first entry appearing table. msDiaLogue, first entry accession number one represented data cluster. ’re now ready export data. “Samples” tab Scaffold, right-click anywhere main data table, choose “Export” (bottom menu), “Export Excel”. Save descriptive filename make sense someone else future choose location ’ll using working directory R. report can saved .xls .csv. can now use preprocessing_scaffold script available page pick transformation step msDiaLogue script provided main Usage Template page. raw data .xls file Toy_Scaffold_Data.xls, specify fileName read raw data file R. raw data stored .RData file Toy_Scaffold_Data.RData, first load data file directly, specify dataSet function.","code":"library(msDiaLogue) ## if the raw data is in a .xls file dataSet <- preprocessing_scaffold(fileName = \"../tests/testData/Toy_Scaffold_Data.xls\") ## if the raw data is in an .Rdata file load(\"../tests/testData/Toy_Scaffold_Data.RData\") dataSet <- preprocessing_scaffold(dataSet = Toy_Scaffold_Data) #> Warning: Removed 4194 rows containing non-finite outside the scale range #> (`stat_bin()`). #> Summary of Full Data Signals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. NA's #> 7.300e+05 9.640e+06 2.250e+07 5.546e+07 5.630e+07 3.480e+09 4194 #> #> Levels of Condition: 6 ctrl DM SIC #> Levels of Replicate: 1 2 3"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"load-r-package","dir":"Articles","previous_headings":"","what":"Load R package","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"# install.packages(\"devtools\") devtools::install_github(\"uconn-scs/msDiaLogue\") ## ## ── R CMD build ───────────────────────────────────────────────────────────────── ## * checking for file ‘/private/var/folders/yd/khpnz9fj6h524w6qys8n8vt80000gn/T/RtmpIGAfbx/remotes75ac3d1dae80/uconn-scs-msDiaLogue-8a27917/DESCRIPTION’ ... OK ## * preparing ‘msDiaLogue’: ## * checking DESCRIPTION meta-information ... OK ## * checking for LF line-endings in source and make files and shell scripts ## * checking for empty or unneeded directories ## Removed empty directory ‘msDiaLogue/tests’ ## * building ‘msDiaLogue_0.0.1.tar.gz’ library(msDiaLogue)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"preprocessing","dir":"Articles","previous_headings":"","what":"Preprocessing","title":"A Usage Template for the R Package msDiaLogue","text":"Read file Toy_Spectronaut_Data.csv R. Omit observations NaN, save removed data file preprocess_Filtered_Out_NaN.csv current working directory. Filter proteins fewer \\(2\\) unique peptides, save removed data file preprocess_Filtered_Out_Unique.csv current working directory. proteins without names, replace blank protein name entries protein accessions.","code":"fileName <- \"../tests/testData/Toy_Spectronaut_Data.csv\" data <- preprocessing(fileName, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"transformation","dir":"Articles","previous_headings":"","what":"Transformation","title":"A Usage Template for the R Package msDiaLogue","text":"Raw intensity measurements, often unsuitable direct statistical modeling, prompt transformation quantitative proteomics workflow. preferred solution log-transformation, effectively addressing issue. log\\(_2\\) transformation commonly employed due ability facilitate straightforward interpretation fold changes protein levels.","code":"dataTran <- transform(data, logFold = 2)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"filtering","dir":"Articles","previous_headings":"","what":"Filtering","title":"A Usage Template for the R Package msDiaLogue","text":"various reasons, contamination, lack informativeness, identification samples, etc., data filtered conducting differential analysis exclude certain proteins. example, protein ‘XPO4_HUMAN’ chosen filtered . removeList = TRUE indicates removal proteins listed listName dataTran. Please note saveRm = TRUE, excluded data (“XPO4_HUMAN”) saved .csv file named filtered_out_data.csv current working directory. Alternatively, wish retain proteins like “PA1B2_HUMAN”, “TEBP_HUMAN”, “UAP1_HUMAN”, simply set removelist = FLASE.","code":"dataFilt <- filterOutIn(dataTran, listName = \"XPO4_HUMAN\", removeList = TRUE, saveRm = TRUE) filterOutIn(dataTran, listName = c(\"PA1B2_HUMAN\", \"TEBP_HUMAN\", \"UAP1_HUMAN\"), removeList = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"imputation","dir":"Articles","previous_headings":"","what":"Imputation","title":"A Usage Template for the R Package msDiaLogue","text":"Mass spectrometry-based quantitative proteomics experiments often yield data missing values, potentially impacting downstream analyses. Various imputation methods developed address issue. far, package provides two imputation methods use: “LocalMinVal”: replaces missing values lowest value protein condition combination; “GlobalMinVal”: replaces missing values lowest value found within entire dataset. Additional methods added later. example, impute NA value dataTran using “LocalMinVal,” set required percentage values must present given protein condition combination values imputed \\(51\\%\\). imputation, may still NA values consequently need filtered . saveRm = TRUE indicates filtered data saved .csv file named filtered_NA_data.csv current working directory. dataImput follows:","code":"dataImput <- impute(dataFilt, imputeType = \"LocalMinVal\", reqPercentPresent = 51, reportImputing = FALSE) dataImput <- filterNA(dataImput, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"normalization","dir":"Articles","previous_headings":"","what":"Normalization","title":"A Usage Template for the R Package msDiaLogue","text":"Normalization designed address systematic biases, enhancing comparability samples preserving signal. Various normalization approaches proposed. far, package provides three normalization methods use: “quant”: Quantile “median”: Column-wise Median “mean”: Column-wise Mean Quantile normalization generally recommended.","code":"dataNorm <- normalize(dataImput, normalizeType = \"quant\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"summarization","dir":"Articles","previous_headings":"","what":"Summarization","title":"A Usage Template for the R Package msDiaLogue","text":"Summarization proves valuable distilling meaningful insights vast intricate data, facilitating efficient identification, quantification, interpretation protein profiles within complex biological samples.","code":"dataSumm <- summarize(dataNorm, saveSumm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"analysis-and-visualization","dir":"Articles","previous_headings":"","what":"Analysis And Visualization","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"analysis1 <- analyze(dataNorm, testType = \"MA\") visualize(analysis1, graphType = \"MA\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"load-r-package","dir":"Articles","previous_headings":"","what":"Load R package","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"library(msDiaLogue)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"preprocessing","dir":"Articles","previous_headings":"","what":"Preprocessing","title":"A Usage Template for the R Package msDiaLogue","text":"function preprocessing() takes .csv file summarized protein abundances, exported Spectronaut. important columns need included file : R.Condition, R.Replicate, PG.ProteinAccessions, PG.ProteinNames, PG.NrOfStrippedSequencesIdentified, PG.Quantity. function reformat data provide functionality initial filtering (based number unique peptides). steps describe functions happen Preprocessing code. 1. Loads raw data raw data .csv file Toy_Spectronaut_Data.csv, specify fileName read raw data file R. raw data stored .RData file Toy_Spectronaut_Data.RData, first load data file directly, specify dataSet function. 2. Filters identified proteins exhibit “NaN” quantitative values NaN, stands ‘Number,’ can found PG.Quantity column proteins identified MS MS/MS evidence raw data, peptides protein lack associated integrated peak area intensity. usually occurs low abundance peptides exhibit intensities close limit detection resulting poor signal--noise (S/N) /interference co-eluting peptide ions similar identical m/z values lead difficulty parsing individual intensity profiles. 3. Applies unique peptides per protein filter General practice proteomics field filter proteins 1 unique peptide identified. adds increased confidence results already filtered 1% false discovery rate (FDR), since proteins identified 2 peptides less likely false positives. recommend filtering protein entries order focus confident targets identified proteome. However, 1-peptide proteins can still observed original protein report Spectronaut. 4. Adds accession numbers identified proteins without informative names Spectronaut reports contain 4 different columns identifying information: PG.Genes, gene name (e.g. CDK1). PG.ProteinAccessions, UniProt identifier number unique entry online database (e.g. P06493). PG.ProteinDescriptions, protein name provided UniProt (e.g. cyclin-dependent kinase 1). PG.ProteinNames, concatenation identifier species (e.g. CDK1_HUMAN). Every entry UniProt accession number, may identifiers, due incomplete annotation. Uniprot includes entries fragments proteins proteins entries redundant, peptide can match multiple entries protein, generates multiple possible identifiers Spectronaut. , ProteinNames entry Spectronaut can switch formats: preference accession number species, can also gene name species instead. option tells msDiaLogue substitute accession number identifier tries pull identifier column information. 5. Saves document working directory filtered data, desired saveRm = TRUE, data removed step 2 (preprocess_Filtered_Out_NaN.csv) step 3 (preprocess_Filtered_Out_Unique.csv) saved current working directory. part preprocessing(), histogram \\(log_2\\)-transformed protein abundances provided. helpful way confirm data read correctly, issues numerical values protein abundances. Ideally, histogram appear fairly symmetrical (bell-shaped) without much skew towards smaller larger values.","code":"## if the raw data is in a .csv file fileName <- \"../tests/testData/Toy_Spectronaut_Data.csv\" dataSet <- preprocessing(fileName, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE) ## if the raw data is in an .Rdata file load(\"../tests/testData/Toy_Spectronaut_Data.RData\") dataSet <- preprocessing(dataSet = Toy_Spectronaut_Data, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE) #> Warning: Removed 25 rows containing non-finite outside the scale range #> (`stat_bin()`). #> Summary of Full Data Signals (Raw): #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 8577 88074 210461 653661 535701 5044124 #> Levels of Condition: 100fmol 50fmol #> Levels of Replicate: 1 2 3 4 5"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"transformation","dir":"Articles","previous_headings":"","what":"Transformation","title":"A Usage Template for the R Package msDiaLogue","text":"Raw mass spectrometry intensity measurements often unsuitable direct statistical modeling shape data usually symmetrical variance consistent across range intensities. proteomic workflows convert raw values log\\(_2\\) transformation, reshapes data symmetrical distribution, making easier interpret mean-based fold changes, also stabilizes variance across intensity range (.e. reduces heteroscedasticity).","code":"dataTran <- transform(dataSet, logFold = 2)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"filtering","dir":"Articles","previous_headings":"","what":"Filtering","title":"A Usage Template for the R Package msDiaLogue","text":"cases, researcher may wish filter specific protein proteins dataset. common instance proteins identified common contaminants database, identification necessary avoid incorrect matching result irrelevant experimental question included data visualization. scenarios might include mixed-species experiment researcher wants evaluate data one species time. step allows set aside specific proteins downstream analysis, using gene_species identifier format. Case 1. Remove proteins specified user step keep everything else. example, proteins named “ADH1_YEAST” containing “HUMAN” chosen filtered . removeList = TRUE indicates removal proteins union listName regexName dataTran. Please note saveRm = TRUE, excluded data (“ADH1_YEAS” + “*HUMAN”) saved .csv file named filtered_out_data.csv current working directory. Case 2. Keep proteins specified user step remove everything else. Alternatively, keep proteins like “ADH1_YEAST” “*HUMAN”, simply set removelist = FALSE. Extension Besides protein names, function filterProtein() provides similar function filter proteins additional protein information: gene, accession, description. proteinInformation file name protein information, automatically generated preprocessing(). case, proteins descriptions “Ras-related protein Rab-3D” “Alcohol dehydrogenase 1” kept. Note search value text used exact equality search.","code":"filterOutIn(dataTran, listName = \"ADH1_YEAST\", regexName = \"HUMAN\", removeList = TRUE, saveRm = TRUE) filterOutIn(dataTran, listName = \"ADH1_YEAST\", regexName = \"HUMAN\", removeList = FALSE) filterProtein(dataTran, proteinInformation = \"preprocess_protein_information.csv\", text = c(\"Ras-related protein Rab-3D\", \"Alcohol dehydrogenase 1\"), by = \"description\", removeList = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"normalization","dir":"Articles","previous_headings":"","what":"Normalization","title":"A Usage Template for the R Package msDiaLogue","text":"Normalization designed address systematic biases data. Biases can arise inadvertent sample grouping generation preparation, variations instrument performance acquisition, analysis different peptide amounts across experiments, reasons. factors can artificially mask enhance actual biological changes. Many normalization methods developed large datasets, strengths weaknesses. following factors considered choosing normalization method: Experiment-Specific Normalization: experiments run UConn PMF normalized injection amount time analysis facilitate comparison. “Amount” measured UV absorbance 280 nm, standard method generic protein quantification. Assumption Non-Changing Species: biological experiments implicitly assume majority measured species experiment change across conditions. assumption robust thousands species, compared hundreds, tens, experiments different complexities (e.g. purified protein vs. immunoprecipitation vs. full lysate), normalization applied global process, instead subsets experiments relatively similar . far, package provides three normalization methods use: “quant”: Quantile (Bolstad et al. 2003) (values run ranked, quantile bins applied entire dataset, values run adjusted closest bin value) “median”: Protein-wise Median (scalar factor applied protein entry make median sample equal every sample) “mean”: Protein-wise Mean (scalar factor applied protein entry make mean sample equal every sample) Quantile normalization generally recommended UConn SCS. Oh! message “Warning: Removed 16 rows containing non-finite values” indicates presence 16 NA (Available) values data. NA values arise protein identified particular sample condition automatically excluded generating boxplot retained actual dataset.","code":"dataNorm <- normalize(dataTran, normalizeType = \"quant\") #> Warning: Removed 16 rows containing non-finite outside the scale range #> (`stat_boxplot()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"imputation","dir":"Articles","previous_headings":"","what":"Imputation","title":"A Usage Template for the R Package msDiaLogue","text":"two primary MS/MS acquisition types implemented large scale MS-based proteomics unique advantages disadvantages. Traditional Data-Dependent Acquisition (DDA) methods favor specificity MS/MS sampling comprehensive proteome coverage. Small peptide isolation windows (<3 m/z) result MS/MS spectra contain fragmentation data ideally one peptide. specificity promotes clear peptide identifications comes expense added scan time. DDA experiments, number peptides can selected MS/MS limited instrument scan speeds therefore prioritized highest peptide abundance. Low abundance peptides sampled less frequently MS/MS can result variable peptide coverage many missing protein data across large sample datasets. Data-Independent Acquisition (DIA) methods promote comprehensive peptide coverage specificity sampling many peptides MS/MS simultaneously. Sequential large mass isolation windows (4-50 m/z) used isolate large numbers peptides concurrent MS/MS. produces complicated fragmentation spectra, spectra contain data every observable peptide. major disadvantage type acquisition DIA MS/MS spectra incredibly complex difficult deconvolve. Powerful relatively new software programs like Spectronaut capable successfully parsing fragment ions came co-fragmented peptide using custom libraries, machine learning algorithms, precisely determined retention times measured ion mobility data. observable ions sampled MS/MS, DIA reduces missingness substantially compared DDA, though entirely. Function dataMissing() designed summarize missingness protein, plot = TRUE indicates plotting missingness, show_labels = TRUE means protein names displayed printed plot. Note visual representation generated default, plot generation time varies project size. percentage protein labels represents proportion missing data samples protein. instance, label “XPO4_HUMAN (80%)” indicates , within observations protein “XPO4_HUMAN”, 80% data missing. Additionally, percentage legend represents proportion missing data whole dataset. case, 8.4% data dataNorm missing. Regardless plot generation, function dataMissing() always returns table providing following information: count_miss: count missing values protein. pct-miss: percentage missing values protein. pct_total_miss: percentage missing values protein relative total missing values entire dataset. example, case protein “XPO4_HUMAN,” 8 NA values samples, representing 80% missing data “XPO4_HUMAN” within sample 50% total missing data entire dataset. Various imputation methods developed address missing-value issue assign reasonable guess quantitative value proteins missing values. far, package provides 10 imputation methods use: impute.min_local(): Replaces missing values lowest measured value protein condition. impute.min_global(): Replaces missing values lowest measured value protein found within entire dataset. impute.knn(): Replaces missing values using k-nearest neighbors algorithm (Troyanskaya et al. 2001). impute.knn_seq(): Replaces missing values using sequential k-nearest neighbors algorithm (Kim, Kim, Yi 2004). impute.knn_trunc(): Replaces missing values using truncated k-nearest neighbors algorithm (Shah et al. 2017). impute.nuc_norm(): Replaces missing values using nuclear-norm regularization (Hastie et al. 2015). impute.mice_cart(): Replaces missing values using classification regression trees (Breiman et al. 1984; Doove, van Buuren, Dusseldorp 2014; van Buuren 2018). impute.mice_norm(): Replaces missing values using Bayesian linear regression (Rubin 1987; Schafer 1997; van Buuren Groothuis-Oudshoorn 2011). impute.pca_bayes(): Replaces missing values using Bayesian principal components analysis (Oba et al. 2003). impute.pca_prob(): Replaces missing values using probabilistic principal components analysis (Stacklies et al. 2007). Additional methods added later. example, impute NA value dataNorm using impute.min_local(), set required percentage values must present given protein condition combination values imputed 51%. reportImputing = TRUE, returned result structure altered list, adding shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. imputation, entries pass percent present threshold still NA values need filtered . saveRm = TRUE indicates filtered data saved .csv file named filtered_NA_data.csv current working directory. dataImput follows:","code":"dataMissing <- dataMissing(dataNorm, plot = TRUE, show_labels = TRUE) dataImput <- impute.min_local(dataNorm, reportImputing = FALSE, reqPercentPresent = 0.51) dataImput <- filterNA(dataImput, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"summarization","dir":"Articles","previous_headings":"","what":"Summarization","title":"A Usage Template for the R Package msDiaLogue","text":"summarization provides table values protein final dataset include final processed abundances fold changes condition, protein’s statistical relation global dataset terms mean, median, standard deviation, parameters. column “Stat” generated result includes following statistics: n: number. mean: mean. sd: standard deviation. median: median. trimmed: trimmed mean trim 0.1. mad: median absolute deviation (median). min: minimum. max: maximum. range: difference maximum minimum value. skew: skewness. kurtosis: kurtosis. se: standard error.","code":"dataSumm <- summarize(dataImput, saveSumm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"analysis","dir":"Articles","previous_headings":"","what":"Analysis","title":"A Usage Template for the R Package msDiaLogue","text":"function analyze() calculates results can used subsequent visualizations. two conditions exist data, precisely two conditions comparison must specified via argument conditions.","code":"cond <- c(\"50fmol\", \"100fmol\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"students-t-test","dir":"Articles","previous_headings":"Analysis","what":"Student’s t-test","title":"A Usage Template for the R Package msDiaLogue","text":"Student’s t-test used compare means two conditions protein, reporting difference means conditions (calculated Condition 1 - Condition 2) P-value test. Oops! warning message shows “Data essentially constant,” means data contain proteins value samples. case, P-value t-test returns NA.","code":"anlys_t <- analyze(dataImput, conditions = cond, testType = \"t-test\") #> Data are essentially constant. #> Data are essentially constant."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"moderated-t-test","dir":"Articles","previous_headings":"Analysis","what":"Moderated t-test","title":"A Usage Template for the R Package msDiaLogue","text":"main distinction Student’s moderated t-tests (Smyth 2004) lies variance computed. Student’s t-test calculates variance based data available protein individually, moderated t-test utilizes information chosen proteins calculate variance. moderated t-test, warning message might occur stating, “Zero sample variances detected, offset away zero.” warning corresponds examples proteins exhibited identical quant values, either pre- post-imputation, therefore variance present across conditions proteins. impede downstream analysis; merely serves alert users occurrence.","code":"anlys_mod.t <- analyze(dataImput, conditions = cond, testType = \"mod.t-test\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"ma","dir":"Articles","previous_headings":"Analysis","what":"MA","title":"A Usage Template for the R Package msDiaLogue","text":"result testType = \"MA\" generate data plotting MA plot, represents protein-wise averages within condition.","code":"anlys_MA <- analyze(dataImput, conditions = cond, testType = \"MA\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"visualization","dir":"Articles","previous_headings":"","what":"Visualization","title":"A Usage Template for the R Package msDiaLogue","text":"section provides variety options getting global view data, making comparisons, highlighting trends. Keep mind data visualization effective illustrating point answering question data, means find point/question.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"heatmap","dir":"Articles","previous_headings":"Visualization","what":"heatmap","title":"A Usage Template for the R Package msDiaLogue","text":"package offers two options plotting heatmap. Option 1 utilizes source package pheatmap, capable plotting dendrogram simultaneously. default choice heatmaps package. protein names excessively long, recommended set show_rownames = FALSE view full heatmap. Option 2 use source package ggplot2 generate ggplot object include dendrogram. heatmap, similar colors within row indicate relatively consistent values, suggesting similar protein expression levels across different samples.","code":"visualize(dataImput, graphType = \"heatmap\", pkg = \"pheatmap\", cluster_cols = TRUE, cluster_rows = FALSE, show_colnames = TRUE, show_rownames = TRUE) visualize(dataImput, graphType = \"heatmap\", pkg = \"ggplot2\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"ma-1","dir":"Articles","previous_headings":"Visualization","what":"MA","title":"A Usage Template for the R Package msDiaLogue","text":"MA plot, short “M vs. plot,” uses two axes: M axis (vertical): Represents logarithm (usually base 2) fold change, ratio expression levels, two conditions. calculated : \\[M = log_2(X/Y) = log_2 X - log_2 Y\\] axis (horizontal): Represents average intensity two conditions, calculated : \\[= \\frac{1}{2}log_2(XY) = \\frac{1}{2}\\left[log_2(X)+log_2(Y)\\right]\\] proteins expected exhibit little variation, leading majority points concentrating around line M = 0 (indicating difference group means). M.thres = 1 means M thresholds set −1 1. scatters split three parts: significant (M > 1), significant (-1 \\(\\leq\\) M \\(\\leq\\) 1), significant (M < -1). transformLabel = \"Log2\" used label title. Additionally, warning message “Removed 16 rows containing missing values” indicates 16 proteins significance.","code":"visualize(anlys_MA, graphType = \"MA\", M.thres = 1, transformLabel = \"Log2\") #> Warning: Removed 16 rows containing missing values or values outside the scale range #> (`geom_text_repel()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"normalize","dir":"Articles","previous_headings":"Visualization","what":"Normalize","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"visualize(dataNorm, graphType = \"normalize\") #> Warning: Removed 16 rows containing non-finite outside the scale range #> (`stat_boxplot()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca","dir":"Articles","previous_headings":"Visualization","what":"PCA","title":"A Usage Template for the R Package msDiaLogue","text":"Principal component analysis (PCA) powerful technique used data analysis simplify reduce dimensionality large datasets. transforms original variables uncorrelated components capture maximum variance. selecting subset components, PCA projects data points onto key directions, enabling visualization analysis lower-dimensional space. aids identifying patterns relationships within complex datasets. visualization graphType = \"PCA_*\", arguments center scale used center data zero mean scale unit variance, default setting TRUE. common error message “rescale constant/zero column unit variance.” clearly occurs columns representing proteins contain zeros constant values. Typically, two ways address error: one remove proteins, set scale = FALSE. case dataImput, two proteins, namely “TEBP_HUMAN” “T126B_HUMAN,” constant values, leading error message. choose remove two proteins PCA.","code":"dataPCA <- dataImput[, !(colnames(dataImput) %in% c(\"TEBP_HUMAN\", \"T126B_HUMAN\"))]"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_scree","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_scree","title":"A Usage Template for the R Package msDiaLogue","text":"One way help identify many PCs retain, explore scree plot. scree plot shows eigenvalues PC, represent proportion variance explained component. choice specifies data plotted, either \"variance\" \"eigenvalue\", addlabels = TRUE adds information labels top bars/points, ncp = 10 sets number dimension displayed.","code":"visualize(dataPCA, graphType = \"PCA_scree\", center = TRUE, scale = TRUE, addlabels = TRUE, choice = \"variance\", ncp = 10) visualize(dataPCA, graphType = \"PCA_scree\", center = TRUE, scale = TRUE, addlabels = TRUE, choice = \"eigenvalue\", ncp = 10)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_ind","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_ind","title":"A Usage Template for the R Package msDiaLogue","text":"primary PCA plot individual data visually represents distribution individual observations reduced-dimensional space, typically defined PCs. x y axes PCA plot represent PCs. axis corresponds linear combination original variables. Individual data points PCA plot represent observations (e.g., samples) original dataset. Points close origin (0, 0), close “average” across protein abundances. sufficient samples present, plot also produce 95% confidence ellipse, well centroid (mean group provided), groups (condition) provided.","code":"visualize(dataPCA, graphType = \"PCA_ind\", center = TRUE, scale = TRUE, addlabels = TRUE, addEllipses = TRUE, ellipse.level = 0.95)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_var","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_var","title":"A Usage Template for the R Package msDiaLogue","text":"plot useful analyses based relatively small number proteins. represents association, loading protein first two PCs. Longer arrows represents stronger associations.","code":"visualize(dataPCA, graphType = \"PCA_var\", center = TRUE, scale = TRUE, addlabels = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_biplot","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_biplot","title":"A Usage Template for the R Package msDiaLogue","text":"PCA biplot includes individual variable plots. , large number proteins, plot can unwieldy.","code":"visualize(dataPCA, graphType = \"PCA_biplot\", center = TRUE, scale = TRUE, addEllipses = TRUE, ellipse.level = 0.95, label = \"all\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"t-test","dir":"Articles","previous_headings":"Visualization","what":"t-test","title":"A Usage Template for the R Package msDiaLogue","text":"function visualize() can applied t-test output. generates two useful plots: histogram fold changes across analyzed proteins histogram P-values. majority proteins expected show small change conditions, fold change histogram peak around zero. P-values, P-values expected non-significant (0.05). Depending strength treatment effect, may peak p-values near 0.","code":"visualize(anlys_mod.t, graphType = \"t-test\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"upset","dir":"Articles","previous_headings":"Visualization","what":"Upset","title":"A Usage Template for the R Package msDiaLogue","text":"upset plot visual representation helps display overlap intersection sets categories dataset. particularly useful illustrating presence absence elements combinations sets. plot reveals 18 proteins common 100fmol 50fmol, 1 protein unique 100fmol.","code":"dataSort <- sortcondition(dataSet) visualize(dataSort, graphType = \"Upset\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"venn","dir":"Articles","previous_headings":"Visualization","what":"Venn","title":"A Usage Template for the R Package msDiaLogue","text":"Venn plot another graphical representation relationships sets. circle represents set, overlapping regions show elements shared sets. example , 100fmol 50fmol groups share 18 proteins. Notably, one protein exclusively found 100fmol group, 50fmol group lacks unique proteins.","code":"visualize(dataSort, graphType = \"Venn\", show_percentage = TRUE, fill_color = c(\"blue\", \"yellow\", \"green\", \"red\"), show_universal = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"volcano","dir":"Articles","previous_headings":"Visualization","what":"Volcano","title":"A Usage Template for the R Package msDiaLogue","text":"volcano plot graphical representation commonly used proteomics genomics visualize differential expression analysis results. particularly useful identifying significant changes extensive data. displays two important pieces information differences conditions dataset: Statistical significance (vertical): Represents negative log10 P-value. Fold change (horizontal): Represents fold change.","code":"visualize(anlys_mod.t, graphType = \"volcano\", P.thres = 0.05, logF.thres = 0.6) #> Warning: Removed 15 rows containing missing values or values outside the scale range #> (`geom_text_repel()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"other-useful-function","dir":"Articles","previous_headings":"","what":"Other useful function","title":"A Usage Template for the R Package msDiaLogue","text":"function pullProteinPath() allows see values associated specific protein step processing. can useful questions , “values favorite protein actually measured, imputed?” “didn’t favorite protein make final list? filtered ?”. can also used check whether given protein’s fold-change might processing artifact.","code":"ZC11B <- pullProteinPath(proteinName = \"ZC11B_HUMAN\", dataSetList = list(Initial = dataSet, Transformed = dataTran, Normalized = dataNorm, Imputed = dataImput))"},{"path":[]},{"path":"https://uconn-scs.github.io/msDiaLogue/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Shiying Xiao. Author, maintainer. Timothy Moore. Author. Charles Watt. Author, contributor.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Xiao S, Moore T, Watt C (2024). msDiaLogue: Analysis + Visuals Data Indep. Aquisition Mass Spectrometry Data. R package version 0.0.5, https://github.com/uconn-scs/msDiaLogue.","code":"@Manual{, title = {msDiaLogue: Analysis + Visuals for Data Indep. Aquisition Mass Spectrometry Data}, author = {Shiying Xiao and Timothy Moore and Charles Watt}, year = {2024}, note = {R package version 0.0.5}, url = {https://github.com/uconn-scs/msDiaLogue}, }"},{"path":[]},{"path":"https://uconn-scs.github.io/msDiaLogue/index.html","id":"code-building-for-workflow-package","dir":"","previous_headings":"","what":"Code building for workflow package","title":"msDiaLogue","text":"repository used build customized UConn PMF-SCS workflow Data-Independent Acquisition (DIA) proteomics data. code expanded include options users, detailed explanations steps analysis process.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"msDiaLogue","text":"can install development version msDiaLogue GitHub : Windows, RTools required build package.","code":"# install.packages(\"devtools\") devtools::install_github(\"uconn-scs/msDiaLogue\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/index.html","id":"main-areas-include","dir":"","previous_headings":"","what":"Main areas include","title":"msDiaLogue","text":"Data preprocessing: getting data Spectronaut Data transformation: options transforming abundance data Data filtering: providing options filter data based preset levels Data normalization: normalization procedures Data imputation: missing data procedures Data summary: calculating presenting numerical summaries tabular form Differential Abundance Analysis: statistical tools DIA data analysis Data visualization: providing clean visuals aid data analysis decisions","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyzing summarized data — analyze","title":"Analyzing summarized data — analyze","text":"Apply statistical test data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyzing summarized data — analyze","text":"","code":"analyze(dataSet, conditions, testType = \"t-test\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyzing summarized data — analyze","text":"dataSet 2d data set data. conditions string specifying two conditions compare. order important, second condition serves reference comparison. two conditions dataSet argument specified, conditions automatically selected sorting unique values alphabetically ascending order. testType string (default = \"t-test\") specifying statistical test use: \"t-test\": Unequal variance t-test. \"mod.t-test\": Moderated t-test (Smyth 2004) . \"MA\": Output plot MA plot.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyzing summarized data — analyze","text":"2d dataframe includes following information: \"t-test\" \"mod.t-test\": differences means P-values protein two conditions. \"MA\": Protein-wise averages within condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Analyzing summarized data — analyze","text":"second condition serves reference comparison. \"t-test\" \"mod.t-test\": differences calculated subtracting mean second condition mean first condition (Condition 1 - Condition 2). \"MA\": rows ordered conditions. Specifically, first row corresponds protein-wise average first condition, second row corresponds second condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Analyzing summarized data — analyze","text":"Smyth GK (2004). “Linear Models Empirical Bayes Methods Assessing Differential Expression Microarray Experiments.” Statistical Applications Genetics Molecular Biology, 3(1). doi:10.2202/1544-6115.1027 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":null,"dir":"Reference","previous_headings":"","what":"Counting missing data — dataMissing","title":"Counting missing data — dataMissing","text":"Calculate plot missingness.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Counting missing data — dataMissing","text":"","code":"dataMissing(dataSet, plot = FALSE, show_labels = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Counting missing data — dataMissing","text":"dataSet 2d data set experimental values. plot boolean (default = FALSE) specifying whether plot missingness. show_labels boolean (default = TRUE) specifying whether protein names shown visualization plot = TRUE.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Counting missing data — dataMissing","text":"2d dataframe including: \"count_miss\": count missing values protein. \"pct-miss\": percentage missing values protein. \"pct_total_miss\": percentage missing values protein relative total missing values entire dataset.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":null,"dir":"Reference","previous_headings":"","what":"Filtering NA's post-imputation — filterNA","title":"Filtering NA's post-imputation — filterNA","text":"Remove proteins NA values.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filtering NA's post-imputation — filterNA","text":"","code":"filterNA(dataSet, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filtering NA's post-imputation — filterNA","text":"dataSet 2d data set experimental values. saveRm boolean (default = TRUE) specifying whether save removed data current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filtering NA's post-imputation — filterNA","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filtering NA's post-imputation — filterNA","text":"proteins meet imputation requirement removed, .csv file created removed data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":null,"dir":"Reference","previous_headings":"","what":"Filtering proteins or contaminants — filterOutIn","title":"Filtering proteins or contaminants — filterOutIn","text":"Apply series filtering steps data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filtering proteins or contaminants — filterOutIn","text":"","code":"filterOutIn( dataSet, listName = c(), regexName = c(), removeList = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filtering proteins or contaminants — filterOutIn","text":"dataSet 2d data set experimental values. listName character vector proteins select remove. regexName character vector specifying proteins regular expression pattern matching select remove. removeList boolean (default = TRUE) specifying whether list proteins removed selected. TRUE: Remove list proteins data set. FALSE: Remove proteins list data set. saveRm boolean (default = TRUE) specifying whether save removed data current working directory. option works removeList = TRUE.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filtering proteins or contaminants — filterOutIn","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filtering proteins or contaminants — filterOutIn","text":"listName regexName provided, protein names selected removed union specified listName matching regex pattern regexName.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":null,"dir":"Reference","previous_headings":"","what":"Filter proteins by gene, accession or description — filterProtein","title":"Filter proteins by gene, accession or description — filterProtein","text":"Filter preprocessed dataset gene, accession, description.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filter proteins by gene, accession or description — filterProtein","text":"","code":"filterProtein( dataSet, proteinInformation = \"preprocess_protein_information.csv\", text = c(), by = c(\"PG.Genes\", \"PG.ProteinAccessions\", \"PG.ProteinDescriptions\", \"PG.ProteinNames\", \"ProteinDescriptions\", \"AccessionNumber\", \"AlternateID\"), removeList = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filter proteins by gene, accession or description — filterProtein","text":"dataSet 2d data set experimental values. proteinInformation name .csv file containing protein information data (including path file, needed). file include following columns: Spectronaut: \"PG.Genes\", \"PG.ProteinAccessions\", \"PG.ProteinDescriptions\", \"PG.ProteinNames\". Scaffold: \"ProteinDescriptions\", \"AccessionNumber\", \"AlternateID\". file automatically generated function preprocessing preprocessing_scaffold. text character vector text used key selecting removing. character string specifying information text filter applied, allowable options: Spectronaut: \"PG.Genes\", \"PG.ProteinAccessions\", \"PG.ProteinDescriptions\", \"PG.ProteinNames\". Scaffold: \"ProteinDescriptions\", \"AccessionNumber\", \"AlternateID\". removeList boolean (default = TRUE) specifying whether list proteins removed selected. TRUE: Remove list proteins data set. FALSE: Remove proteins list data set. saveRm boolean (default = TRUE) specifying whether save removed data current working directory. option works removeList = TRUE.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filter proteins by gene, accession or description — filterProtein","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filter proteins by gene, accession or description — filterProtein","text":"function extension function preprocessing preprocessing_scaffold allows filtering proteins based additional information.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation of raw data signals — impute","title":"Imputation of raw data signals — impute","text":"Apply imputation method data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation of raw data signals — impute","text":"","code":"impute( dataSet, imputeType = \"LocalMinVal\", reqPercentPresent = 0.51, k = 10, rowmax = 0.5, colmax = 0.8, maxp = 1500, rng.seed = 362436069, rank.max = NULL, lambda = NULL, thresh = 1e-05, maxit = 100, final.svd = TRUE, reportImputing = FALSE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation of raw data signals — impute","text":"dataSet 2d data set experimental values. imputeType character string (default = \"LocalMinVal\") specifying imputation method use: \"LocalMinVal\": replace missing values lowest value protein condition combination. \"GlobalMinVal\": replace missing values lowest value found within entire data set. \"knn\": replace missing values using k-nearest neighbors algorithm (Troyanskaya et al. 2001) . \"seq-knn\": replace missing values using sequential k-nearest neighbors algorithm (Kim et al. 2004) . \"trunc-knn\": replace missing values using truncated k-nearest neighbors algorithm (Shah et al. 2017) . \"nuc-norm\": replace missing values using nuclear-norm regularization (Hastie et al. 2015) . reqPercentPresent scalar (default = 0.51) specifying required percent values must present given protein condition combination values imputed imputeType = \"LocalMinVal\". k integer (default = 10) indicating number neighbors used imputation imputeType \"knn\", \"seq-knn\", \"trunc-knn\". rowmax scalar (default = 0.5) specifying maximum percent missing data allowed row imputeType = \"knn\". rows rowmax*100% missing imputed using overall mean per sample. colmax scalar (default = 0.8) specifying maximum percent missing data allowed column imputeType = \"knn\". column colmax*100% missing data, program halts reports error. maxp integer (default = 1500) indicating largest block proteins imputed using k-nearest neighbors algorithm imputeType = \"knn\". Larger blocks divided two-means clustering (recursively) prior imputation. rng.seed integer (default = 362436069) specifying seed used random number generator reproducibility imputeType = \"knn\". rank.max integer specifying restriction rank solution imputeType = \"nuc-norm\". default set one less minimum dimension dataset. lambda scalar specifying nuclear-norm regularization parameter imputeType = \"nuc-norm\". lambda = 0, algorithm convergence typically slower. default set maximum singular value obtained singular value decomposition (SVD) dataset. thresh scalar (default = 1e-5) specifying convergence threshold imputeType = \"nuc-norm\", measured relative change Frobenius norm two successive estimates. maxit integer (default = 100) specifying maximum number iterations convergence reached imputeType = \"nuc-norm\". final.svd boolean (default = TRUE) specifying whether perform one-step unregularized iteration final iteration imputeType = \"nuc-norm\", followed soft-thresholding singular values, resulting hard zeros. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation of raw data signals — impute","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation of raw data signals — impute","text":"Hastie T, Mazumder R, Lee JD, Zadeh R (2015). “Matrix Completion Low-Rank SVD via Fast Alternating Least Squares.” Journal Machine Learning Research, 16(104), 3367---3402. http://jmlr.org/papers/v16/hastie15a.html. Kim K, Kim B, Yi G (2004). “Reuse Imputed Data Microarray Analysis Increases Imputation Efficiency.” BMC bioinformatics, 5, 160. doi:10.1186/1471-2105-5-160 . Shah JS, Rai SN, DeFilippis AP, Hill BG, Bhatnagar , Brock GN (2017). “Distribution Based Nearest Neighbor Imputation Truncated High Dimensional Data Applications Pre-Clinical Clinical Metabolomics Studies.” BMC bioinformatics, 18, 114. doi:10.1186/s12859-017-1547-6 . Troyanskaya O, Cantor M, Sherlock G, Brown P, Hastie T, Tibshirani R, Botstein D, Altman RB (2001). “Missing Value Estimation Methods DNA Microarrays.” Bioinformatics, 17(6), 520--525. doi:10.1093/bioinformatics/17.6.520 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the k-nearest neighbors algorithm — impute.knn","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"Apply imputation dataset k-nearest neighbors algorithm (Troyanskaya et al. 2001) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"","code":"impute.knn( dataSet, reportImputing = FALSE, k = 10, rowmax = 0.5, colmax = 0.8, maxp = 1500, seed = 362436069 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. k integer (default = 10) indicating number neighbors used imputation. rowmax scalar (default = 0.5) specifying maximum percent missing data allowed row. rows rowmax*100% missing imputed using overall mean per sample. colmax scalar (default = 0.8) specifying maximum percent missing data allowed column. column colmax*100% missing data, program halts reports error. maxp integer (default = 1500) indicating largest block proteins imputed using k-nearest neighbors algorithm. Larger blocks divided two-means clustering (recursively) prior imputation. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"Troyanskaya O, Cantor M, Sherlock G, Brown P, Hastie T, Tibshirani R, Botstein D, Altman RB (2001). “Missing Value Estimation Methods DNA Microarrays.” Bioinformatics, 17(6), 520--525. doi:10.1093/bioinformatics/17.6.520 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"Apply imputation dataset sequential k-nearest neighbors algorithm (Kim et al. 2004) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"","code":"impute.knn_seq(dataSet, reportImputing = FALSE, k = 10)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. k integer (default = 10) indicating number neighbors used imputation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"Kim K, Kim B, Yi G (2004). “Reuse Imputed Data Microarray Analysis Increases Imputation Efficiency.” BMC bioinformatics, 5, 160. doi:10.1186/1471-2105-5-160 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"Apply imputation dataset truncated k-nearest neighbors algorithm (Shah et al. 2017) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"","code":"impute.knn_trunc(dataSet, reportImputing = FALSE, k = 10)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. k integer (default = 10) indicating number neighbors used imputation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"Shah JS, Rai SN, DeFilippis AP, Hill BG, Bhatnagar , Brock GN (2017). “Distribution Based Nearest Neighbor Imputation Truncated High Dimensional Data Applications Pre-Clinical Clinical Metabolomics Studies.” BMC bioinformatics, 18, 114. doi:10.1186/s12859-017-1547-6 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by classification and regression trees — impute.mice_cart","title":"Imputation by classification and regression trees — impute.mice_cart","text":"Apply imputation dataset classification regression trees (Breiman et al. 1984; Doove et al. 2014; van Buuren 2018) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by classification and regression trees — impute.mice_cart","text":"","code":"impute.mice_cart(dataSet, reportImputing = FALSE, m = 5, seed = 362436069)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by classification and regression trees — impute.mice_cart","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. m integer (default = 5) specifying number multiple imputations. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by classification and regression trees — impute.mice_cart","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by classification and regression trees — impute.mice_cart","text":"Breiman L, Friedman J, Olshen RA, Stone CJ (1984). Classification Regression Trees. Routledge, New York, NY, USA. ISBN 9780412048418. Doove LL, van Buuren S, Dusseldorp E (2014). “Recursive Partitioning Missing Data Imputation Presence Interaction Effects.” Computational Statistics & Data Analysis, 72, 92--104. doi:10.1016/j.csda.2013.10.025 . van Buuren S (2018). Flexible Imputation Missing Data. Chapman \\& Hall/CRC, New York, NY, USA. ISBN 9781032178639.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by Bayesian linear regression — impute.mice_norm","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"Apply imputation dataset Bayesian linear regression (Rubin 1987; Schafer 1997; van Buuren Groothuis-Oudshoorn 2011) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"","code":"impute.mice_norm(dataSet, reportImputing = FALSE, m = 5, seed = 362436069)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. m integer (default = 5) specifying number multiple imputations. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"Rubin DB (1987). Multiple Imputation Nonresponse Surveys. John Wiley \\& Sons, New York, NY, USA. ISBN 9780471087052. Schafer JL (1997). Analysis Incomplete Multivariate Data. Chapman \\& Hall/CRC, New York, NY, USA. ISBN 9780412040610. van Buuren S, Groothuis-Oudshoorn K (2011). “mice: Multivariate Imputation Chained Equations R.” Journal Statistical Software, 45(3), 1--67. doi:10.18637/jss.v045.i03 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the global minimum — impute.min_global","title":"Imputation by the global minimum — impute.min_global","text":"Apply imputation dataset minimum measured value protein found within entire dataset.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the global minimum — impute.min_global","text":"","code":"impute.min_global(dataSet, reportImputing = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the global minimum — impute.min_global","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the global minimum — impute.min_global","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the local minimum — impute.min_local","title":"Imputation by the local minimum — impute.min_local","text":"Apply imputation dataset minimum measured value protein condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the local minimum — impute.min_local","text":"","code":"impute.min_local(dataSet, reportImputing = FALSE, reqPercentPresent = 0.51)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the local minimum — impute.min_local","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. reqPercentPresent scalar (default = 0.51) specifying required percent values must present given protein condition combination values imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the local minimum — impute.min_local","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the nuclear-norm regularization — impute.nuc_norm","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"Apply imputation dataset nuclear-norm regularization (Hastie et al. 2015) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"","code":"impute.nuc_norm( dataSet, reportImputing = FALSE, rank.max = NULL, lambda = NULL, thresh = 1e-05, maxit = 100, final.svd = TRUE, seed = 362436069 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. rank.max integer specifying restriction rank solution. default set one less minimum dimension dataset. lambda scalar specifying nuclear-norm regularization parameter. lambda = 0, algorithm convergence typically slower. default set maximum singular value obtained singular value decomposition (SVD) dataset. thresh scalar (default = 1e-5) specifying convergence threshold, measured relative change Frobenius norm two successive estimates. maxit integer (default = 100) specifying maximum number iterations convergence reached. final.svd boolean (default = TRUE) specifying whether perform one-step unregularized iteration final iteration, followed soft-thresholding singular values, resulting hard zeros. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"Hastie T, Mazumder R, Lee JD, Zadeh R (2015). “Matrix Completion Low-Rank SVD via Fast Alternating Least Squares.” Journal Machine Learning Research, 16(104), 3367---3402. http://jmlr.org/papers/v16/hastie15a.html.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by Bayesian principal components analysis — impute.pca_bayes","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"Apply imputation dataset Bayesian principal components analysis (Oba et al. 2003) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"","code":"impute.pca_bayes(dataSet, reportImputing = FALSE, nPcs = NULL, maxSteps = 100)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. nPcs integer specifying number principal components calculate. default set minimum number samples number proteins. maxSteps integer (default = 100) specifying maximum number estimation steps.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"Oba S, Sato M, Takemasa , Monden M, Matsubara K, Ishii S (2003). “Bayesian Missing Value Estimation Method Gene Expression Profile Data.” Bioinformatics, 19(16), 2088--2096. doi:10.1093/bioinformatics/btg287 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by probabilistic principal components analysis — impute.pca_prob","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"Apply imputation dataset probabilistic principal components analysis (Stacklies et al. 2007) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"","code":"impute.pca_prob( dataSet, reportImputing = FALSE, nPcs = NULL, maxIterations = 1000, seed = 362436069 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. nPcs integer specifying number principal components calculate. default set minimum number samples number proteins. maxIterations integer (default = 1000) specifying maximum number allowed iterations. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"Stacklies W, Redestig H, Scholz M, Walther D, Selbig J (2007). “pcaMethods--Bioconductor Package Providing PCA Methods Incomplete Data.” Bioinformatics, 23(9), 1164--1167. doi:10.1093/bioinformatics/btm069 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":null,"dir":"Reference","previous_headings":"","what":"Normalization of preprocessed data — normalize","title":"Normalization of preprocessed data — normalize","text":"Apply specified type normalization data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Normalization of preprocessed data — normalize","text":"","code":"normalize(dataSet, normalizeType = \"quant\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Normalization of preprocessed data — normalize","text":"dataSet 2d data set experimental values. normalizeType string (default = \"quant\") specifying type normalization apply: \"quant\": Quantile (Bolstad et al. 2003) \"median\": Protein-wise Median \"mean\": Protein-wise Mean \"none\": None","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Normalization of preprocessed data — normalize","text":"normalized 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Normalization of preprocessed data — normalize","text":"Quantile normalization generally recommended. Mean median normalization going included popular previous methods. normalization recommended. Boxplots also generated normalization give visual indicator changes.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Normalization of preprocessed data — normalize","text":"Bolstad BM, Irizarry RA, Astrand M, Speed TP (2003). “Comparison Normalization Methods High Density Oligonucleotide Array Data Based Variance Bias.” Bioinformatics, 19(2), 185--193. doi:10.1093/bioinformatics/19.2.185 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":null,"dir":"Reference","previous_headings":"","what":"Filtering of raw data signals — preProcessFiltering","title":"Filtering of raw data signals — preProcessFiltering","text":"Apply series filtering steps data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filtering of raw data signals — preProcessFiltering","text":"","code":"preProcessFiltering( dataSet, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filtering of raw data signals — preProcessFiltering","text":"dataSet 2d data set experimental values. filterNaN boolean (default = TRUE) specifying whether proteins NaN removed data set. filterUnique integer (default = 2) specifying whether proteins less default number unique peptides removed data set. replaceBlank boolean (default = TRUE) specifying whether proteins without names named accession numbers. saveRm boolean (default = TRUE) specifying whether save removed data current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filtering of raw data signals — preProcessFiltering","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filtering of raw data signals — preProcessFiltering","text":"forms filtering recommended use cases.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":null,"dir":"Reference","previous_headings":"","what":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"Read data file Spectronaut, apply filtering conditions, select columns necessary analysis, return reformatted data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"","code":"preprocessing( fileName, dataSet = NULL, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"fileName name .csv file containing MS data (including path file, needed). dataSet raw data set, already loaded R. filterNaN boolean (default = TRUE) specifying whether observations including NaN omitted. filterUnique integer (default = 2) specifying many number unique peptides required include protein. replaceBlank boolean (default = TRUE) specifying whether proteins without names named accession numbers. saveRm boolean (default = TRUE) specifying whether save removed data current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"function executes following: Reads file. Applies applicable filters, necessary. Provides summary statistics histogram values reported data set. Selects columns contain necessary information analysis. Re-formats data present individual proteins columns group replicates protein. Stores data data.frame prints levels condition replicate user.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":null,"dir":"Reference","previous_headings":"","what":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"Read data file Scaffold, select columns necessary analysis, return reformatted data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"","code":"preprocessing_scaffold(fileName, dataSet = NULL)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"fileName name .xls file containing MS data (including path file, needed). dataSet raw data set, already loaded R.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"function executes following: Reads file. Provides summary statistics histogram values reported data set. Selects columns contain necessary information analysis. Re-formats data present individual proteins columns group replicates protein. Stores data data.frame prints levels condition replicate user.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":null,"dir":"Reference","previous_headings":"","what":"Compiling data on a single protein from each step in the process — pullProteinPath","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"Summarize steps performed data one protein.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"","code":"pullProteinPath(proteinName, dataSetList)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"proteinName string identifying protein interest. dataSetList list data frames, order dictates order presentation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"2d dataframe, protein data step present dataSetList.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"proteinName must match labels data sets exactly.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":null,"dir":"Reference","previous_headings":"","what":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"Create keyed dictionary, every unique experimental condition label list every protein value condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"","code":"sortcondition(dataSet)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"dataSet 2d data set experimental values.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"list lists.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":null,"dir":"Reference","previous_headings":"","what":"Summarize protein intensities across conditions — summarize","title":"Summarize protein intensities across conditions — summarize","text":"Calculate mean, standard deviation, replicate count protein across every condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summarize protein intensities across conditions — summarize","text":"","code":"summarize(dataSet, saveSumm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summarize protein intensities across conditions — summarize","text":"dataSet data frame containing data signals labels. saveSumm boolean (default = TRUE) specifying whether save summary statistics current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summarize protein intensities across conditions — summarize","text":"2d summarized data frame.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summarize protein intensities across conditions — summarize","text":"column 'Stat' generated data.frame includes following statistics: n: Number. mean: Mean. sd: Standard deviation. median: Median. trimmed: Trimmed mean trim 0.1. mad: Median absolute deviation (median). min: Minimum. max: Maximum. range: difference maximum minimum value. skew: Skewness. kurtosis: Kurtosis. se: Standard error.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":null,"dir":"Reference","previous_headings":"","what":"Log-based transformation — transform","title":"Log-based transformation — transform","text":"Apply logarithmic transformation data stabilize variance.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log-based transformation — transform","text":"","code":"transform(dataSet, logFold = 2)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log-based transformation — transform","text":"dataSet data frame containing data signals. logFold integer specifying base log transformation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log-based transformation — transform","text":"transformed data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log-based transformation — transform","text":"function executes following: Plots mean-variance relationship using meanVariancePlot(). Log-transforms data, using specified base. Plots mean-variance relationship comparison.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":null,"dir":"Reference","previous_headings":"","what":"Trimming down a protein FASTA file to certain proteins — trimFASTA","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"Trim FASTA file contain proteins present associated Spectronaut report file.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"","code":"trimFASTA( FASTAFileName, reportFileName, outputFileName = \"trimFASTA_output.txt\", by = \"PG.ProteinNames\", selectString = \"*BOVIN\" )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"FASTAFileName character string specifying name input FASTA .txt file. reportFileName character string specifying name Spectronaut report .csv file. outputFileName character string (default = \"trimFASTA_output.txt\") specifying name output file. character string (default = \"PG.ProteinNames\") specifying identifier (column name) used selection report file. selectString character string specifying regular expression search .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"FASTA file specified proteins present.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"Depending size FASTA file, function may run slowly take several minutes. FASTA file must .txt format; formats work.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":null,"dir":"Reference","previous_headings":"","what":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"Trim FASTA file contain proteins present associated Spectronaut report file.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"","code":"trimFASTA2.0( FASTAFileName, reportFileName, outputFileName, selectString = \"*BOVIN\" )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"FASTAFileName string indicating FASTA .txt filename. reportFileName string indicating Spectronaut report .csv filename. outputFileName string indicating name new .txt FASTA file. selectString string containing regular expression search.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"FASTA file specified proteins present.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"Depending size FASTA file, function may run slowly take several minutes. FASTA file must .txt format; formats work.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":null,"dir":"Reference","previous_headings":"","what":"Generating visualizations for MS Data — visualize","title":"Generating visualizations for MS Data — visualize","text":"Create specific graphics illustrate results data analysis function.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generating visualizations for MS Data — visualize","text":"","code":"visualize( dataSet, graphType = \"volcano\", pkg = \"pheatmap\", cluster_cols = TRUE, cluster_rows = FALSE, show_colnames = TRUE, show_rownames = TRUE, M.thres = 1, transformLabel = \"Log2\", center = TRUE, scale = TRUE, addlabels = TRUE, choice = \"variance\", ncp = 10, addEllipses = TRUE, ellipse.level = 0.95, label = \"all\", show_percentage = TRUE, fill_color = c(\"blue\", \"yellow\", \"green\", \"red\"), show_universal = FALSE, P.thres = 0.05, logF.thres = 0.6 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generating visualizations for MS Data — visualize","text":"dataSet 2D data frame corresponds output function analyze() name. graphType string indicating graph type. Current options : \"heatmap\" \"MA\" \"normalize\" \"PCA_biplot\" \"PCA_ind\" \"PCA_scree\" \"PCA_var\" \"t-test\" \"Upset\" \"Venn\" \"volcano\" pkg string specifying source package used plot heatmap. Two options: \"pheatmap\" \"ggplot2\". argument works graphType = \"heatmap\". cluster_cols boolean (default = TRUE) determining rows clustered hclust object. argument works graphType = \"heatmap\" pkg = \"pheatmap\". cluster_rows boolean (default = FALSE) determining columns clustered hclust object. argument works graphType = \"heatmap\" pkg = \"pheatmap\". show_colnames boolean (default = TRUE) specifying column names shown. argument works graphType = \"heatmap\" pkg = \"pheatmap\". show_rownames boolean (default = TRUE) specifying row names shown. argument works graphType = \"heatmap\" pkg = \"pheatmap\". M.thres absolute threshold value M (log fold-change) (default = 1) used plot two vertical lines (-M.thres M.thres) MA plot graphType = \"MA\". transformLabel string (default = \"Log2\") used label title axes transformation type transformed MA plot graphType = \"MA\". center boolean (default = TRUE) indicating whether variables shifted zero centered graphType = \"PCA_scree\", graphType = \"PCA_ind\", graphType = \"PCA_var\", graphType = \"PCA_biplot\". scale boolean (default = TRUE) indicating whether variables scaled unit variance analysis takes place graphType = \"PCA_scree\", graphType = \"PCA_ind\", graphType = \"PCA_var\", graphType = \"PCA_biplot\". addlabels boolean (default = TRUE) specifying whether elements labeled. graphType = \"PCA_scree\", specifies whether labels added top bars points show information retained dimension. graphType = \"PCA_ind\", specifies whether active individuals labeled. graphType = \"PCA_var\", specifies whether active variables labeled. choice text (default = \"variance\") specifying PCA data plotted scree plot graphType = \"PCA_scree\". Allowed values \"variance\" \"eigenvalue\". ncp numeric value (default = 10) specifying number dimensions shown graphType = \"PCA_scree\". addEllipses boolean (default = TRUE) specifying whether draw ellipses around individuals graphType = \"PCA_ind\" graphType = \"PCA_biplot\". ellipse.level numeric value (default = 0.95) specifying size concentration ellipse normal probability graphType = \"PCA_ind\" graphType = \"PCA_biplot\". label text (default = \"\") specifying elements labelled graphType = \"PCA_biplot\". Allowed values: \"\": Label active individuals active variables. \"ind\": Label active individuals. \"var\": Label active variables. \"none\": labels. show_percentage boolean (default = TRUE) specifying whether show percentage set graphType = \"Venn\". fill_color text (default = c(\"blue\", \"yellow\", \"green\", \"red\")) specifying colors fill circles graphType = \"Venn\". show_universal boolean (default = FALSE) specifying whether return data.frame logical columns representing sets graphType = \"Venn\". P.thres threshold value P-value (default = 0.05) used plot horizontal line (-log10(P.thres)) volcano plot graphType = \"volcano\". logF.thres absolute threshold value log2(fold change) (default = 0.6) used plot two vertical lines (-logF.thres logF.thres) volcano plot graphType = \"volcano\".","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generating visualizations for MS Data — visualize","text":"object class ggplot.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generating visualizations for MS Data — visualize","text":"function visualize() designed work directly output function analyze(). Please sure arguments graphType testType match.","code":""}] +[{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"setting-quantitative-value-in-scaffold","dir":"Articles","previous_headings":"","what":"1. Setting Quantitative Value in Scaffold","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"quantitative value must set intensity measurement count measurement. Inside Scaffold 5, Samples tab, Display Options dropdown menu top left window must set “Quantitative Value” quantitative value must defined (Experiment –> Quantitative Analysis –> Settings, Quantitative Method dropdown). PMF recommends Average Precursor Intensity value.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"turning-off-normalization-in-scaffold","dir":"Articles","previous_headings":"","what":"2. Turning Off Normalization in Scaffold","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"Normalization must turned . (Experiment –> Quantitative Analysis –> Settings), make sure “Use Normalization” box unchecked. option normalize various methods msDiaLogue, stack normalizations programs.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"minimum-requirements-for-experiment-conditions","dir":"Articles","previous_headings":"","what":"3. Minimum Requirements for Experiment Conditions","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"experiment must contain minimum 2 conditions, condition must minimum 3 replicates. conditions fine, replicates fine, conditions need number replicates. fewer 3 replicates condition, 1 condition, throw error msDiaLogue able process data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"sample-naming-format-requirements","dir":"Articles","previous_headings":"","what":"4. Sample Naming Format Requirements","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"samples must named following format: YYYYMMDD_initials_condition-replicate# (e.g. 20240101_JL_ctrl-1). files may already named way; please check Scaffold “Samples” tab, heading quantitative value column. sample name appear vertically. name formatted , can change going “Load Data” tab, selecting tab sample individually, right-clicking tab, choosing “Edit BioSample”, typing correct name format “Sample Name” box, clicking “Apply”.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"filtering-dataset-for-protein-identification","dir":"Articles","previous_headings":"","what":"5. Filtering Dataset for Protein Identification","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"strongly recommend filter dataset hide proteins 1 peptide identified. “Samples” tab, top-menu bar, “Min # Peptides” dropdown, set 2.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/scaffold.html","id":"collapsing-protein-clusters-in-samples-tab","dir":"Articles","previous_headings":"","what":"6. Collapsing Protein Clusters in Samples Tab","title":"Instructions for Exporting Data from Scaffold for Use in msDiaLogue Analysis","text":"protein clusters must collapsed. “Samples” tab, first column (header “#”), right click numbered entries , select “Clusters”, select “Collapse ”. converts gray-shaded entries, multiple proteins inferred peptide evidence, expanded view line possible protein match cluster collapsed view first entry appearing table. msDiaLogue, first entry accession number one represented data cluster. ’re now ready export data. “Samples” tab Scaffold, right-click anywhere main data table, choose “Export” (bottom menu), “Export Excel”. Save descriptive filename make sense someone else future choose location ’ll using working directory R. report can saved .xls .csv. can now use preprocessing_scaffold script available page pick transformation step msDiaLogue script provided main Usage Template page. raw data .xls file Toy_Scaffold_Data.xls, specify fileName read raw data file R. raw data stored .RData file Toy_Scaffold_Data.RData, first load data file directly, specify dataSet function.","code":"library(msDiaLogue) ## if the raw data is in a .xls file dataSet <- preprocessing_scaffold(fileName = \"../tests/testData/Toy_Scaffold_Data.xls\") ## if the raw data is in an .Rdata file load(\"../tests/testData/Toy_Scaffold_Data.RData\") dataSet <- preprocessing_scaffold(dataSet = Toy_Scaffold_Data) #> Warning: Removed 4194 rows containing non-finite outside the scale range #> (`stat_bin()`). #> Summary of Full Data Signals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. NA's #> 7.300e+05 9.640e+06 2.250e+07 5.546e+07 5.630e+07 3.480e+09 4194 #> #> Levels of Condition: 6 ctrl DM SIC #> Levels of Replicate: 1 2 3"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"load-r-package","dir":"Articles","previous_headings":"","what":"Load R package","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"# install.packages(\"devtools\") devtools::install_github(\"uconn-scs/msDiaLogue\") ## ## ── R CMD build ───────────────────────────────────────────────────────────────── ## * checking for file ‘/private/var/folders/yd/khpnz9fj6h524w6qys8n8vt80000gn/T/RtmpIGAfbx/remotes75ac3d1dae80/uconn-scs-msDiaLogue-8a27917/DESCRIPTION’ ... OK ## * preparing ‘msDiaLogue’: ## * checking DESCRIPTION meta-information ... OK ## * checking for LF line-endings in source and make files and shell scripts ## * checking for empty or unneeded directories ## Removed empty directory ‘msDiaLogue/tests’ ## * building ‘msDiaLogue_0.0.1.tar.gz’ library(msDiaLogue)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"preprocessing","dir":"Articles","previous_headings":"","what":"Preprocessing","title":"A Usage Template for the R Package msDiaLogue","text":"Read file Toy_Spectronaut_Data.csv R. Omit observations NaN, save removed data file preprocess_Filtered_Out_NaN.csv current working directory. Filter proteins fewer \\(2\\) unique peptides, save removed data file preprocess_Filtered_Out_Unique.csv current working directory. proteins without names, replace blank protein name entries protein accessions.","code":"fileName <- \"../tests/testData/Toy_Spectronaut_Data.csv\" data <- preprocessing(fileName, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"transformation","dir":"Articles","previous_headings":"","what":"Transformation","title":"A Usage Template for the R Package msDiaLogue","text":"Raw intensity measurements, often unsuitable direct statistical modeling, prompt transformation quantitative proteomics workflow. preferred solution log-transformation, effectively addressing issue. log\\(_2\\) transformation commonly employed due ability facilitate straightforward interpretation fold changes protein levels.","code":"dataTran <- transform(data, logFold = 2)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"filtering","dir":"Articles","previous_headings":"","what":"Filtering","title":"A Usage Template for the R Package msDiaLogue","text":"various reasons, contamination, lack informativeness, identification samples, etc., data filtered conducting differential analysis exclude certain proteins. example, protein ‘XPO4_HUMAN’ chosen filtered . removeList = TRUE indicates removal proteins listed listName dataTran. Please note saveRm = TRUE, excluded data (“XPO4_HUMAN”) saved .csv file named filtered_out_data.csv current working directory. Alternatively, wish retain proteins like “PA1B2_HUMAN”, “TEBP_HUMAN”, “UAP1_HUMAN”, simply set removelist = FLASE.","code":"dataFilt <- filterOutIn(dataTran, listName = \"XPO4_HUMAN\", removeList = TRUE, saveRm = TRUE) filterOutIn(dataTran, listName = c(\"PA1B2_HUMAN\", \"TEBP_HUMAN\", \"UAP1_HUMAN\"), removeList = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"imputation","dir":"Articles","previous_headings":"","what":"Imputation","title":"A Usage Template for the R Package msDiaLogue","text":"Mass spectrometry-based quantitative proteomics experiments often yield data missing values, potentially impacting downstream analyses. Various imputation methods developed address issue. far, package provides two imputation methods use: “LocalMinVal”: replaces missing values lowest value protein condition combination; “GlobalMinVal”: replaces missing values lowest value found within entire dataset. Additional methods added later. example, impute NA value dataTran using “LocalMinVal,” set required percentage values must present given protein condition combination values imputed \\(51\\%\\). imputation, may still NA values consequently need filtered . saveRm = TRUE indicates filtered data saved .csv file named filtered_NA_data.csv current working directory. dataImput follows:","code":"dataImput <- impute(dataFilt, imputeType = \"LocalMinVal\", reqPercentPresent = 51, reportImputing = FALSE) dataImput <- filterNA(dataImput, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"normalization","dir":"Articles","previous_headings":"","what":"Normalization","title":"A Usage Template for the R Package msDiaLogue","text":"Normalization designed address systematic biases, enhancing comparability samples preserving signal. Various normalization approaches proposed. far, package provides three normalization methods use: “quant”: Quantile “median”: Column-wise Median “mean”: Column-wise Mean Quantile normalization generally recommended.","code":"dataNorm <- normalize(dataImput, normalizeType = \"quant\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"summarization","dir":"Articles","previous_headings":"","what":"Summarization","title":"A Usage Template for the R Package msDiaLogue","text":"Summarization proves valuable distilling meaningful insights vast intricate data, facilitating efficient identification, quantification, interpretation protein profiles within complex biological samples.","code":"dataSumm <- summarize(dataNorm, saveSumm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/template.html","id":"analysis-and-visualization","dir":"Articles","previous_headings":"","what":"Analysis And Visualization","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"analysis1 <- analyze(dataNorm, testType = \"MA\") visualize(analysis1, graphType = \"MA\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"load-r-package","dir":"Articles","previous_headings":"","what":"Load R package","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"library(msDiaLogue)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"preprocessing","dir":"Articles","previous_headings":"","what":"Preprocessing","title":"A Usage Template for the R Package msDiaLogue","text":"function preprocessing() takes .csv file summarized protein abundances, exported Spectronaut. important columns need included file : R.Condition, R.Replicate, PG.ProteinAccessions, PG.ProteinNames, PG.NrOfStrippedSequencesIdentified, PG.Quantity. function reformat data provide functionality initial filtering (based number unique peptides). steps describe functions happen Preprocessing code. 1. Loads raw data raw data .csv file Toy_Spectronaut_Data.csv, specify fileName read raw data file R. raw data stored .RData file Toy_Spectronaut_Data.RData, first load data file directly, specify dataSet function. 2. Filters identified proteins exhibit “NaN” quantitative values NaN, stands ‘Number,’ can found PG.Quantity column proteins identified MS MS/MS evidence raw data, peptides protein lack associated integrated peak area intensity. usually occurs low abundance peptides exhibit intensities close limit detection resulting poor signal--noise (S/N) /interference co-eluting peptide ions similar identical m/z values lead difficulty parsing individual intensity profiles. 3. Applies unique peptides per protein filter General practice proteomics field filter proteins 1 unique peptide identified. adds increased confidence results already filtered 1% false discovery rate (FDR), since proteins identified 2 peptides less likely false positives. recommend filtering protein entries order focus confident targets identified proteome. However, 1-peptide proteins can still observed original protein report Spectronaut. 4. Adds accession numbers identified proteins without informative names Spectronaut reports contain 4 different columns identifying information: PG.Genes, gene name (e.g. CDK1). PG.ProteinAccessions, UniProt identifier number unique entry online database (e.g. P06493). PG.ProteinDescriptions, protein name provided UniProt (e.g. cyclin-dependent kinase 1). PG.ProteinNames, concatenation identifier species (e.g. CDK1_HUMAN). Every entry UniProt accession number, may identifiers, due incomplete annotation. Uniprot includes entries fragments proteins proteins entries redundant, peptide can match multiple entries protein, generates multiple possible identifiers Spectronaut. , ProteinNames entry Spectronaut can switch formats: preference accession number species, can also gene name species instead. option tells msDiaLogue substitute accession number identifier tries pull identifier column information. 5. Saves document working directory filtered data, desired saveRm = TRUE, data removed step 2 (preprocess_Filtered_Out_NaN.csv) step 3 (preprocess_Filtered_Out_Unique.csv) saved current working directory. part preprocessing(), histogram \\(log_2\\)-transformed protein abundances provided. helpful way confirm data read correctly, issues numerical values protein abundances. Ideally, histogram appear fairly symmetrical (bell-shaped) without much skew towards smaller larger values.","code":"## if the raw data is in a .csv file fileName <- \"../tests/testData/Toy_Spectronaut_Data.csv\" dataSet <- preprocessing(fileName, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE) ## if the raw data is in an .Rdata file load(\"../tests/testData/Toy_Spectronaut_Data.RData\") dataSet <- preprocessing(dataSet = Toy_Spectronaut_Data, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE) #> Warning: Removed 25 rows containing non-finite outside the scale range #> (`stat_bin()`). #> Summary of Full Data Signals (Raw): #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 8577 88074 210461 653661 535701 5044124 #> Levels of Condition: 100fmol 50fmol #> Levels of Replicate: 1 2 3 4 5"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"transformation","dir":"Articles","previous_headings":"","what":"Transformation","title":"A Usage Template for the R Package msDiaLogue","text":"Raw mass spectrometry intensity measurements often unsuitable direct statistical modeling shape data usually symmetrical variance consistent across range intensities. proteomic workflows convert raw values log\\(_2\\) transformation, reshapes data symmetrical distribution, making easier interpret mean-based fold changes, also stabilizes variance across intensity range (.e. reduces heteroscedasticity).","code":"dataTran <- transform(dataSet, logFold = 2)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"filtering","dir":"Articles","previous_headings":"","what":"Filtering","title":"A Usage Template for the R Package msDiaLogue","text":"cases, researcher may wish filter specific protein proteins dataset. common instance proteins identified common contaminants database, identification necessary avoid incorrect matching result irrelevant experimental question included data visualization. scenarios might include mixed-species experiment researcher wants evaluate data one species time. step allows set aside specific proteins downstream analysis, using gene_species identifier format. Case 1. Remove proteins specified user step keep everything else. example, proteins named “ADH1_YEAST” containing “HUMAN” chosen filtered . removeList = TRUE indicates removal proteins union listName regexName dataTran. Please note saveRm = TRUE, excluded data (“ADH1_YEAS” + “*HUMAN”) saved .csv file named filtered_out_data.csv current working directory. Case 2. Keep proteins specified user step remove everything else. Alternatively, keep proteins like “ADH1_YEAST” “*HUMAN”, simply set removelist = FALSE. Extension Besides protein names, function filterProtein() provides similar function filter proteins additional protein information. Spectronaut: “PG.Genes”, “PG.ProteinAccessions”, “PG.ProteinDescriptions”, “PG.ProteinNames”. Scaffold: “ProteinDescriptions”, “AccessionNumber”, “AlternateID”. proteinInformation file name protein information, automatically generated preprocessing(). case, proteins whose \"PG.ProteinDescriptions\" match “Ras-related protein Rab-3D” “Alcohol dehydrogenase 1” kept. Note search value text used exact equality search.","code":"filterOutIn(dataTran, listName = \"ADH1_YEAST\", regexName = \"HUMAN\", removeList = TRUE, saveRm = TRUE) filterOutIn(dataTran, listName = \"ADH1_YEAST\", regexName = \"HUMAN\", removeList = FALSE) filterProtein(dataTran, proteinInformation = \"preprocess_protein_information.csv\", text = c(\"Ras-related protein Rab-3D\", \"Alcohol dehydrogenase 1\"), by = \"PG.ProteinDescriptions\", removeList = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"normalization","dir":"Articles","previous_headings":"","what":"Normalization","title":"A Usage Template for the R Package msDiaLogue","text":"Normalization designed address systematic biases data. Biases can arise inadvertent sample grouping generation preparation, variations instrument performance acquisition, analysis different peptide amounts across experiments, reasons. factors can artificially mask enhance actual biological changes. Many normalization methods developed large datasets, strengths weaknesses. following factors considered choosing normalization method: Experiment-Specific Normalization: experiments run UConn PMF normalized injection amount time analysis facilitate comparison. “Amount” measured UV absorbance 280 nm, standard method generic protein quantification. Assumption Non-Changing Species: biological experiments implicitly assume majority measured species experiment change across conditions. assumption robust thousands species, compared hundreds, tens, experiments different complexities (e.g. purified protein vs. immunoprecipitation vs. full lysate), normalization applied global process, instead subsets experiments relatively similar . far, package provides three normalization methods use: “quant”: Quantile (Bolstad et al. 2003) (values run ranked, quantile bins applied entire dataset, values run adjusted closest bin value) “median”: Protein-wise Median (scalar factor applied protein entry make median sample equal every sample) “mean”: Protein-wise Mean (scalar factor applied protein entry make mean sample equal every sample) Quantile normalization generally recommended UConn SCS. Oh! message “Warning: Removed 16 rows containing non-finite values” indicates presence 16 NA (Available) values data. NA values arise protein identified particular sample condition automatically excluded generating boxplot retained actual dataset.","code":"dataNorm <- normalize(dataTran, normalizeType = \"quant\") #> Warning: Removed 16 rows containing non-finite outside the scale range #> (`stat_boxplot()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"imputation","dir":"Articles","previous_headings":"","what":"Imputation","title":"A Usage Template for the R Package msDiaLogue","text":"two primary MS/MS acquisition types implemented large scale MS-based proteomics unique advantages disadvantages. Traditional Data-Dependent Acquisition (DDA) methods favor specificity MS/MS sampling comprehensive proteome coverage. Small peptide isolation windows (<3 m/z) result MS/MS spectra contain fragmentation data ideally one peptide. specificity promotes clear peptide identifications comes expense added scan time. DDA experiments, number peptides can selected MS/MS limited instrument scan speeds therefore prioritized highest peptide abundance. Low abundance peptides sampled less frequently MS/MS can result variable peptide coverage many missing protein data across large sample datasets. Data-Independent Acquisition (DIA) methods promote comprehensive peptide coverage specificity sampling many peptides MS/MS simultaneously. Sequential large mass isolation windows (4-50 m/z) used isolate large numbers peptides concurrent MS/MS. produces complicated fragmentation spectra, spectra contain data every observable peptide. major disadvantage type acquisition DIA MS/MS spectra incredibly complex difficult deconvolve. Powerful relatively new software programs like Spectronaut capable successfully parsing fragment ions came co-fragmented peptide using custom libraries, machine learning algorithms, precisely determined retention times measured ion mobility data. observable ions sampled MS/MS, DIA reduces missingness substantially compared DDA, though entirely. Function dataMissing() designed summarize missingness protein, plot = TRUE indicates plotting missingness, show_labels = TRUE means protein names displayed printed plot. Note visual representation generated default, plot generation time varies project size. percentage protein labels represents proportion missing data samples protein. instance, label “XPO4_HUMAN (80%)” indicates , within observations protein “XPO4_HUMAN”, 80% data missing. Additionally, percentage legend represents proportion missing data whole dataset. case, 8.4% data dataNorm missing. Regardless plot generation, function dataMissing() always returns table providing following information: count_miss: count missing values protein. pct-miss: percentage missing values protein. pct_total_miss: percentage missing values protein relative total missing values entire dataset. example, case protein “XPO4_HUMAN,” 8 NA values samples, representing 80% missing data “XPO4_HUMAN” within sample 50% total missing data entire dataset. Various imputation methods developed address missing-value issue assign reasonable guess quantitative value proteins missing values. far, package provides 10 imputation methods use: impute.min_local(): Replaces missing values lowest measured value protein condition. impute.min_global(): Replaces missing values lowest measured value protein found within entire dataset. impute.knn(): Replaces missing values using k-nearest neighbors algorithm (Troyanskaya et al. 2001). impute.knn_seq(): Replaces missing values using sequential k-nearest neighbors algorithm (Kim, Kim, Yi 2004). impute.knn_trunc(): Replaces missing values using truncated k-nearest neighbors algorithm (Shah et al. 2017). impute.nuc_norm(): Replaces missing values using nuclear-norm regularization (Hastie et al. 2015). impute.mice_cart(): Replaces missing values using classification regression trees (Breiman et al. 1984; Doove, van Buuren, Dusseldorp 2014; van Buuren 2018). impute.mice_norm(): Replaces missing values using Bayesian linear regression (Rubin 1987; Schafer 1997; van Buuren Groothuis-Oudshoorn 2011). impute.pca_bayes(): Replaces missing values using Bayesian principal components analysis (Oba et al. 2003). impute.pca_prob(): Replaces missing values using probabilistic principal components analysis (Stacklies et al. 2007). Additional methods added later. example, impute NA value dataNorm using impute.min_local(), set required percentage values must present given protein condition combination values imputed 51%. reportImputing = TRUE, returned result structure altered list, adding shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. imputation, entries pass percent present threshold still NA values need filtered . saveRm = TRUE indicates filtered data saved .csv file named filtered_NA_data.csv current working directory. dataImput follows:","code":"dataMissing <- dataMissing(dataNorm, plot = TRUE, show_labels = TRUE) dataImput <- impute.min_local(dataNorm, reportImputing = FALSE, reqPercentPresent = 0.51) dataImput <- filterNA(dataImput, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"summarization","dir":"Articles","previous_headings":"","what":"Summarization","title":"A Usage Template for the R Package msDiaLogue","text":"summarization provides table values protein final dataset include final processed abundances fold changes condition, protein’s statistical relation global dataset terms mean, median, standard deviation, parameters. column “Stat” generated result includes following statistics: n: Number. mean: Mean. sd: Standard deviation. median: Median. trimmed: Trimmed mean trim 0.1. mad: Median absolute deviation (median). min: Minimum. max: Maximum. range: difference maximum minimum value. skew: Skewness. kurtosis: Kurtosis. se: Standard error.","code":"dataSumm <- summarize(dataImput, saveSumm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"analysis","dir":"Articles","previous_headings":"","what":"Analysis","title":"A Usage Template for the R Package msDiaLogue","text":"function analyze() calculates results can used subsequent visualizations. Note: following listed analysis compare data two conditions. order conditions affect downstream analysis, second condition serves reference comparison. two conditions exist data conditions specified, conditions automatically generated sorting unique values alphabetically ascending order. two conditions exist data, precisely two conditions comparison must specified via argument conditions.","code":"cond <- c(\"100fmol\", \"50fmol\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"students-t-test","dir":"Articles","previous_headings":"Analysis","what":"Student’s t-test","title":"A Usage Template for the R Package msDiaLogue","text":"Student’s t-test used compare means two conditions protein, reporting difference means conditions P-value test.","code":"anlys_t <- analyze(dataImput, conditions = cond, testType = \"t-test\") #> Data are essentially constant. #> Data are essentially constant."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"moderated-t-test","dir":"Articles","previous_headings":"Analysis","what":"Moderated t-test","title":"A Usage Template for the R Package msDiaLogue","text":"main distinction Student’s moderated t-tests (Smyth 2004) lies variance computed. Student’s t-test calculates variance based data available protein individually, moderated t-test utilizes information chosen proteins calculate variance.","code":"anlys_mod.t <- analyze(dataImput, conditions = cond, testType = \"mod.t-test\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"ma","dir":"Articles","previous_headings":"Analysis","what":"MA","title":"A Usage Template for the R Package msDiaLogue","text":"result testType = \"MA\" generate data plotting MA plot, represents protein-wise averages within condition.","code":"anlys_MA <- analyze(dataImput, conditions = cond, testType = \"MA\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"visualization","dir":"Articles","previous_headings":"","what":"Visualization","title":"A Usage Template for the R Package msDiaLogue","text":"section provides variety options getting global view data, making comparisons, highlighting trends. Keep mind data visualization effective illustrating point answering question data, means find point/question.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"heatmap","dir":"Articles","previous_headings":"Visualization","what":"heatmap","title":"A Usage Template for the R Package msDiaLogue","text":"package offers two options plotting heatmap. Option 1 utilizes source package pheatmap, capable plotting dendrogram simultaneously. default choice heatmaps package. protein names excessively long, recommended set show_rownames = FALSE view full heatmap. Option 2 use source package ggplot2 generate ggplot object include dendrogram. heatmap, similar colors within row indicate relatively consistent values, suggesting similar protein expression levels across different samples.","code":"visualize(dataImput, graphType = \"heatmap\", pkg = \"pheatmap\", cluster_cols = TRUE, cluster_rows = FALSE, show_colnames = TRUE, show_rownames = TRUE) visualize(dataImput, graphType = \"heatmap\", pkg = \"ggplot2\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"ma-1","dir":"Articles","previous_headings":"Visualization","what":"MA","title":"A Usage Template for the R Package msDiaLogue","text":"MA plot, short “M vs. plot,” uses two axes: M axis (vertical): Represents logarithm (usually base 2) fold change, ratio expression levels, two conditions. calculated : \\[M = log_2(X/Y) = log_2 X - log_2 Y\\] axis (horizontal): Represents average intensity two conditions, calculated : \\[= \\frac{1}{2}log_2(XY) = \\frac{1}{2}\\left[log_2(X)+log_2(Y)\\right]\\] proteins expected exhibit little variation, leading majority points concentrating around line M = 0 (indicating difference group means). M.thres = 1 means M thresholds set −1 1. scatters split three parts: significant (M > 1), significant (-1 \\(\\leq\\) M \\(\\leq\\) 1), significant (M < -1). transformLabel = \"Log2\" used prefix title, x-axis, y-axis labels. Additionally, warning message “Removed 16 rows containing missing values” indicates 16 proteins significance.","code":"visualize(anlys_MA, graphType = \"MA\", M.thres = 1, transformLabel = \"Log2\") #> Warning: Removed 16 rows containing missing values or values outside the scale range #> (`geom_text_repel()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"normalize","dir":"Articles","previous_headings":"Visualization","what":"Normalize","title":"A Usage Template for the R Package msDiaLogue","text":"","code":"visualize(dataNorm, graphType = \"normalize\") #> Warning: Removed 16 rows containing non-finite outside the scale range #> (`stat_boxplot()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca","dir":"Articles","previous_headings":"Visualization","what":"PCA","title":"A Usage Template for the R Package msDiaLogue","text":"Principal component analysis (PCA) powerful technique used data analysis simplify reduce dimensionality large datasets. transforms original variables uncorrelated components capture maximum variance. selecting subset components, PCA projects data points onto key directions, enabling visualization analysis lower-dimensional space. aids identifying patterns relationships within complex datasets. visualization graphType = \"PCA_*\", arguments center scale used center data zero mean scale unit variance, default setting TRUE. common error message “rescale constant/zero column unit variance.” clearly occurs columns representing proteins contain zeros constant values. Typically, two ways address error: one remove proteins, set scale = FALSE. case dataImput, two proteins, namely “TEBP_HUMAN” “T126B_HUMAN,” constant values, leading error message. choose remove two proteins PCA.","code":"dataPCA <- dataImput[, !(colnames(dataImput) %in% c(\"TEBP_HUMAN\", \"T126B_HUMAN\"))]"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_scree","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_scree","title":"A Usage Template for the R Package msDiaLogue","text":"One way help identify many PCs retain, explore scree plot. scree plot shows eigenvalues PC, represent proportion variance explained component. choice specifies data plotted, either \"variance\" \"eigenvalue\", addlabels = TRUE adds information labels top bars/points, ncp = 10 sets number dimension displayed.","code":"visualize(dataPCA, graphType = \"PCA_scree\", center = TRUE, scale = TRUE, addlabels = TRUE, choice = \"variance\", ncp = 10) visualize(dataPCA, graphType = \"PCA_scree\", center = TRUE, scale = TRUE, addlabels = TRUE, choice = \"eigenvalue\", ncp = 10)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_ind","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_ind","title":"A Usage Template for the R Package msDiaLogue","text":"primary PCA plot individual data visually represents distribution individual observations reduced-dimensional space, typically defined PCs. x y axes PCA plot represent PCs. axis corresponds linear combination original variables. Individual data points PCA plot represent observations (e.g., samples) original dataset. Points close origin (0, 0), close “average” across protein abundances. sufficient samples present, plot also produce 95% confidence ellipse, well centroid (mean group provided), groups (condition) provided.","code":"visualize(dataPCA, graphType = \"PCA_ind\", center = TRUE, scale = TRUE, addlabels = TRUE, addEllipses = TRUE, ellipse.level = 0.95)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_var","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_var","title":"A Usage Template for the R Package msDiaLogue","text":"plot useful analyses based relatively small number proteins. represents association, loading protein first two PCs. Longer arrows represents stronger associations.","code":"visualize(dataPCA, graphType = \"PCA_var\", center = TRUE, scale = TRUE, addlabels = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"pca_biplot","dir":"Articles","previous_headings":"Visualization > PCA","what":"PCA_biplot","title":"A Usage Template for the R Package msDiaLogue","text":"PCA biplot includes individual variable plots. , large number proteins, plot can unwieldy.","code":"visualize(dataPCA, graphType = \"PCA_biplot\", center = TRUE, scale = TRUE, addEllipses = TRUE, ellipse.level = 0.95, label = \"all\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"t-test","dir":"Articles","previous_headings":"Visualization","what":"t-test","title":"A Usage Template for the R Package msDiaLogue","text":"function visualize() can applied t-test output. generates two useful plots: histogram fold changes across analyzed proteins histogram P-values. majority proteins expected show small change conditions, fold change histogram peak around zero. P-values, P-values expected non-significant (0.05). Depending strength treatment effect, may peak p-values near 0.","code":"visualize(anlys_mod.t, graphType = \"t-test\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"upset","dir":"Articles","previous_headings":"Visualization","what":"Upset","title":"A Usage Template for the R Package msDiaLogue","text":"upset plot visual representation helps display overlap intersection sets categories dataset. particularly useful illustrating presence absence elements combinations sets. plot reveals 18 proteins common 100fmol 50fmol, 1 protein unique 100fmol.","code":"dataSort <- sortcondition(dataSet) visualize(dataSort, graphType = \"Upset\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"venn","dir":"Articles","previous_headings":"Visualization","what":"Venn","title":"A Usage Template for the R Package msDiaLogue","text":"Venn plot another graphical representation relationships sets. circle represents set, overlapping regions show elements shared sets. example , 100fmol 50fmol groups share 18 proteins. Notably, one protein exclusively found 100fmol group, 50fmol group lacks unique proteins.","code":"visualize(dataSort, graphType = \"Venn\", show_percentage = TRUE, fill_color = c(\"blue\", \"yellow\", \"green\", \"red\"), show_universal = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"volcano","dir":"Articles","previous_headings":"Visualization","what":"Volcano","title":"A Usage Template for the R Package msDiaLogue","text":"volcano plot graphical representation commonly used proteomics genomics visualize differential expression analysis results. particularly useful identifying significant changes extensive data. displays two important pieces information differences conditions dataset: Statistical significance (vertical): Represents negative log10 P-value. Fold change (horizontal): Represents fold change.","code":"visualize(anlys_mod.t, graphType = \"volcano\", P.thres = 0.05, logF.thres = 0.6) #> Warning: Removed 15 rows containing missing values or values outside the scale range #> (`geom_text_repel()`)."},{"path":"https://uconn-scs.github.io/msDiaLogue/articles/usage_template.html","id":"other-useful-function","dir":"Articles","previous_headings":"","what":"Other useful function","title":"A Usage Template for the R Package msDiaLogue","text":"function pullProteinPath() allows see values associated specific protein step processing. can useful questions , “values favorite protein actually measured, imputed?” “didn’t favorite protein make final list? filtered ?”. can also used check whether given protein’s fold-change might processing artifact.","code":"ZC11B <- pullProteinPath(proteinName = \"ZC11B_HUMAN\", dataSetList = list(Initial = dataSet, Transformed = dataTran, Normalized = dataNorm, Imputed = dataImput))"},{"path":[]},{"path":"https://uconn-scs.github.io/msDiaLogue/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Shiying Xiao. Author, maintainer. Timothy Moore. Author. Charles Watt. Author, contributor.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Xiao S, Moore T, Watt C (2024). msDiaLogue: Analysis + Visuals Data Indep. Aquisition Mass Spectrometry Data. R package version 0.0.5, https://github.com/uconn-scs/msDiaLogue.","code":"@Manual{, title = {msDiaLogue: Analysis + Visuals for Data Indep. Aquisition Mass Spectrometry Data}, author = {Shiying Xiao and Timothy Moore and Charles Watt}, year = {2024}, note = {R package version 0.0.5}, url = {https://github.com/uconn-scs/msDiaLogue}, }"},{"path":[]},{"path":"https://uconn-scs.github.io/msDiaLogue/index.html","id":"code-building-for-workflow-package","dir":"","previous_headings":"","what":"Code building for workflow package","title":"msDiaLogue","text":"repository used build customized UConn PMF-SCS workflow Data-Independent Acquisition (DIA) proteomics data. code expanded include options users, detailed explanations steps analysis process.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"msDiaLogue","text":"can install development version msDiaLogue GitHub : Windows, RTools required build package.","code":"# install.packages(\"devtools\") devtools::install_github(\"uconn-scs/msDiaLogue\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/index.html","id":"main-areas-include","dir":"","previous_headings":"","what":"Main areas include","title":"msDiaLogue","text":"Data preprocessing: getting data Spectronaut Data transformation: options transforming abundance data Data filtering: providing options filter data based preset levels Data normalization: normalization procedures Data imputation: missing data procedures Data summary: calculating presenting numerical summaries tabular form Differential Abundance Analysis: statistical tools DIA data analysis Data visualization: providing clean visuals aid data analysis decisions","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyzing summarized data — analyze","title":"Analyzing summarized data — analyze","text":"Apply statistical test data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyzing summarized data — analyze","text":"","code":"analyze(dataSet, conditions, testType = \"t-test\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyzing summarized data — analyze","text":"dataSet 2d data set data. conditions string specifying two conditions compare. order important, second condition serves reference comparison. two conditions dataSet argument specified, conditions automatically selected sorting unique values alphabetically ascending order. testType string (default = \"t-test\") specifying statistical test use: \"t-test\": Unequal variance t-test. \"mod.t-test\": Moderated t-test (Smyth 2004) . \"MA\": Output plot MA plot.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyzing summarized data — analyze","text":"2d dataframe includes following information: \"t-test\" \"mod.t-test\": differences means P-values protein two conditions. \"MA\": Protein-wise averages within condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Analyzing summarized data — analyze","text":"second condition serves reference comparison. \"t-test\" \"mod.t-test\": differences calculated subtracting mean second condition mean first condition (Condition 1 - Condition 2). \"MA\": rows ordered conditions. Specifically, first row corresponds protein-wise average first condition, second row corresponds second condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/analyze.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Analyzing summarized data — analyze","text":"Smyth GK (2004). “Linear Models Empirical Bayes Methods Assessing Differential Expression Microarray Experiments.” Statistical Applications Genetics Molecular Biology, 3(1). doi:10.2202/1544-6115.1027 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":null,"dir":"Reference","previous_headings":"","what":"Counting missing data — dataMissing","title":"Counting missing data — dataMissing","text":"Calculate plot missingness.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Counting missing data — dataMissing","text":"","code":"dataMissing(dataSet, plot = FALSE, show_labels = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Counting missing data — dataMissing","text":"dataSet 2d data set experimental values. plot boolean (default = FALSE) specifying whether plot missingness. show_labels boolean (default = TRUE) specifying whether protein names shown visualization plot = TRUE.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/dataMissing.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Counting missing data — dataMissing","text":"2d dataframe including: \"count_miss\": count missing values protein. \"pct-miss\": percentage missing values protein. \"pct_total_miss\": percentage missing values protein relative total missing values entire dataset.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":null,"dir":"Reference","previous_headings":"","what":"Filtering NA's post-imputation — filterNA","title":"Filtering NA's post-imputation — filterNA","text":"Remove proteins NA values.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filtering NA's post-imputation — filterNA","text":"","code":"filterNA(dataSet, saveRm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filtering NA's post-imputation — filterNA","text":"dataSet 2d data set experimental values. saveRm boolean (default = TRUE) specifying whether save removed data current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filtering NA's post-imputation — filterNA","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterNA.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filtering NA's post-imputation — filterNA","text":"proteins meet imputation requirement removed, .csv file created removed data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":null,"dir":"Reference","previous_headings":"","what":"Filtering proteins or contaminants — filterOutIn","title":"Filtering proteins or contaminants — filterOutIn","text":"Apply series filtering steps data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filtering proteins or contaminants — filterOutIn","text":"","code":"filterOutIn( dataSet, listName = c(), regexName = c(), removeList = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filtering proteins or contaminants — filterOutIn","text":"dataSet 2d data set experimental values. listName character vector proteins select remove. regexName character vector specifying proteins regular expression pattern matching select remove. removeList boolean (default = TRUE) specifying whether list proteins removed selected. TRUE: Remove list proteins data set. FALSE: Remove proteins list data set. saveRm boolean (default = TRUE) specifying whether save removed data current working directory. option works removeList = TRUE.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filtering proteins or contaminants — filterOutIn","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterOutIn.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filtering proteins or contaminants — filterOutIn","text":"listName regexName provided, protein names selected removed union specified listName matching regex pattern regexName.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":null,"dir":"Reference","previous_headings":"","what":"Filter proteins by gene, accession or description — filterProtein","title":"Filter proteins by gene, accession or description — filterProtein","text":"Filter preprocessed dataset gene, accession, description.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filter proteins by gene, accession or description — filterProtein","text":"","code":"filterProtein( dataSet, proteinInformation = \"preprocess_protein_information.csv\", text = c(), by = c(\"PG.Genes\", \"PG.ProteinAccessions\", \"PG.ProteinDescriptions\", \"PG.ProteinNames\", \"ProteinDescriptions\", \"AccessionNumber\", \"AlternateID\"), removeList = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filter proteins by gene, accession or description — filterProtein","text":"dataSet 2d data set experimental values. proteinInformation name .csv file containing protein information data (including path file, needed). file include following columns: Spectronaut: \"PG.Genes\", \"PG.ProteinAccessions\", \"PG.ProteinDescriptions\", \"PG.ProteinNames\". Scaffold: \"ProteinDescriptions\", \"AccessionNumber\", \"AlternateID\". file automatically generated function preprocessing preprocessing_scaffold. text character vector text used key selecting removing. character string specifying information text filter applied, allowable options: Spectronaut: \"PG.Genes\", \"PG.ProteinAccessions\", \"PG.ProteinDescriptions\", \"PG.ProteinNames\". Scaffold: \"ProteinDescriptions\", \"AccessionNumber\", \"AlternateID\". removeList boolean (default = TRUE) specifying whether list proteins removed selected. TRUE: Remove list proteins data set. FALSE: Remove proteins list data set. saveRm boolean (default = TRUE) specifying whether save removed data current working directory. option works removeList = TRUE.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filter proteins by gene, accession or description — filterProtein","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/filterProtein.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filter proteins by gene, accession or description — filterProtein","text":"function extension function preprocessing preprocessing_scaffold allows filtering proteins based additional information.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation of raw data signals — impute","title":"Imputation of raw data signals — impute","text":"Apply imputation method data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation of raw data signals — impute","text":"","code":"impute( dataSet, imputeType = \"LocalMinVal\", reqPercentPresent = 0.51, k = 10, rowmax = 0.5, colmax = 0.8, maxp = 1500, rng.seed = 362436069, rank.max = NULL, lambda = NULL, thresh = 1e-05, maxit = 100, final.svd = TRUE, reportImputing = FALSE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation of raw data signals — impute","text":"dataSet 2d data set experimental values. imputeType character string (default = \"LocalMinVal\") specifying imputation method use: \"LocalMinVal\": replace missing values lowest value protein condition combination. \"GlobalMinVal\": replace missing values lowest value found within entire data set. \"knn\": replace missing values using k-nearest neighbors algorithm (Troyanskaya et al. 2001) . \"seq-knn\": replace missing values using sequential k-nearest neighbors algorithm (Kim et al. 2004) . \"trunc-knn\": replace missing values using truncated k-nearest neighbors algorithm (Shah et al. 2017) . \"nuc-norm\": replace missing values using nuclear-norm regularization (Hastie et al. 2015) . reqPercentPresent scalar (default = 0.51) specifying required percent values must present given protein condition combination values imputed imputeType = \"LocalMinVal\". k integer (default = 10) indicating number neighbors used imputation imputeType \"knn\", \"seq-knn\", \"trunc-knn\". rowmax scalar (default = 0.5) specifying maximum percent missing data allowed row imputeType = \"knn\". rows rowmax*100% missing imputed using overall mean per sample. colmax scalar (default = 0.8) specifying maximum percent missing data allowed column imputeType = \"knn\". column colmax*100% missing data, program halts reports error. maxp integer (default = 1500) indicating largest block proteins imputed using k-nearest neighbors algorithm imputeType = \"knn\". Larger blocks divided two-means clustering (recursively) prior imputation. rng.seed integer (default = 362436069) specifying seed used random number generator reproducibility imputeType = \"knn\". rank.max integer specifying restriction rank solution imputeType = \"nuc-norm\". default set one less minimum dimension dataset. lambda scalar specifying nuclear-norm regularization parameter imputeType = \"nuc-norm\". lambda = 0, algorithm convergence typically slower. default set maximum singular value obtained singular value decomposition (SVD) dataset. thresh scalar (default = 1e-5) specifying convergence threshold imputeType = \"nuc-norm\", measured relative change Frobenius norm two successive estimates. maxit integer (default = 100) specifying maximum number iterations convergence reached imputeType = \"nuc-norm\". final.svd boolean (default = TRUE) specifying whether perform one-step unregularized iteration final iteration imputeType = \"nuc-norm\", followed soft-thresholding singular values, resulting hard zeros. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation of raw data signals — impute","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation of raw data signals — impute","text":"Hastie T, Mazumder R, Lee JD, Zadeh R (2015). “Matrix Completion Low-Rank SVD via Fast Alternating Least Squares.” Journal Machine Learning Research, 16(104), 3367---3402. http://jmlr.org/papers/v16/hastie15a.html. Kim K, Kim B, Yi G (2004). “Reuse Imputed Data Microarray Analysis Increases Imputation Efficiency.” BMC bioinformatics, 5, 160. doi:10.1186/1471-2105-5-160 . Shah JS, Rai SN, DeFilippis AP, Hill BG, Bhatnagar , Brock GN (2017). “Distribution Based Nearest Neighbor Imputation Truncated High Dimensional Data Applications Pre-Clinical Clinical Metabolomics Studies.” BMC bioinformatics, 18, 114. doi:10.1186/s12859-017-1547-6 . Troyanskaya O, Cantor M, Sherlock G, Brown P, Hastie T, Tibshirani R, Botstein D, Altman RB (2001). “Missing Value Estimation Methods DNA Microarrays.” Bioinformatics, 17(6), 520--525. doi:10.1093/bioinformatics/17.6.520 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the k-nearest neighbors algorithm — impute.knn","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"Apply imputation dataset k-nearest neighbors algorithm (Troyanskaya et al. 2001) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"","code":"impute.knn( dataSet, reportImputing = FALSE, k = 10, rowmax = 0.5, colmax = 0.8, maxp = 1500, seed = 362436069 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. k integer (default = 10) indicating number neighbors used imputation. rowmax scalar (default = 0.5) specifying maximum percent missing data allowed row. rows rowmax*100% missing imputed using overall mean per sample. colmax scalar (default = 0.8) specifying maximum percent missing data allowed column. column colmax*100% missing data, program halts reports error. maxp integer (default = 1500) indicating largest block proteins imputed using k-nearest neighbors algorithm. Larger blocks divided two-means clustering (recursively) prior imputation. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the k-nearest neighbors algorithm — impute.knn","text":"Troyanskaya O, Cantor M, Sherlock G, Brown P, Hastie T, Tibshirani R, Botstein D, Altman RB (2001). “Missing Value Estimation Methods DNA Microarrays.” Bioinformatics, 17(6), 520--525. doi:10.1093/bioinformatics/17.6.520 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"Apply imputation dataset sequential k-nearest neighbors algorithm (Kim et al. 2004) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"","code":"impute.knn_seq(dataSet, reportImputing = FALSE, k = 10)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. k integer (default = 10) indicating number neighbors used imputation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_seq.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the k-nearest neighbors algorithm — impute.knn_seq","text":"Kim K, Kim B, Yi G (2004). “Reuse Imputed Data Microarray Analysis Increases Imputation Efficiency.” BMC bioinformatics, 5, 160. doi:10.1186/1471-2105-5-160 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"Apply imputation dataset truncated k-nearest neighbors algorithm (Shah et al. 2017) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"","code":"impute.knn_trunc(dataSet, reportImputing = FALSE, k = 10)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. k integer (default = 10) indicating number neighbors used imputation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.knn_trunc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the truncated k-nearest neighbors algorithm — impute.knn_trunc","text":"Shah JS, Rai SN, DeFilippis AP, Hill BG, Bhatnagar , Brock GN (2017). “Distribution Based Nearest Neighbor Imputation Truncated High Dimensional Data Applications Pre-Clinical Clinical Metabolomics Studies.” BMC bioinformatics, 18, 114. doi:10.1186/s12859-017-1547-6 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by classification and regression trees — impute.mice_cart","title":"Imputation by classification and regression trees — impute.mice_cart","text":"Apply imputation dataset classification regression trees (Breiman et al. 1984; Doove et al. 2014; van Buuren 2018) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by classification and regression trees — impute.mice_cart","text":"","code":"impute.mice_cart(dataSet, reportImputing = FALSE, m = 5, seed = 362436069)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by classification and regression trees — impute.mice_cart","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. m integer (default = 5) specifying number multiple imputations. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by classification and regression trees — impute.mice_cart","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_cart.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by classification and regression trees — impute.mice_cart","text":"Breiman L, Friedman J, Olshen RA, Stone CJ (1984). Classification Regression Trees. Routledge, New York, NY, USA. ISBN 9780412048418. Doove LL, van Buuren S, Dusseldorp E (2014). “Recursive Partitioning Missing Data Imputation Presence Interaction Effects.” Computational Statistics & Data Analysis, 72, 92--104. doi:10.1016/j.csda.2013.10.025 . van Buuren S (2018). Flexible Imputation Missing Data. Chapman \\& Hall/CRC, New York, NY, USA. ISBN 9781032178639.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by Bayesian linear regression — impute.mice_norm","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"Apply imputation dataset Bayesian linear regression (Rubin 1987; Schafer 1997; van Buuren Groothuis-Oudshoorn 2011) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"","code":"impute.mice_norm(dataSet, reportImputing = FALSE, m = 5, seed = 362436069)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. m integer (default = 5) specifying number multiple imputations. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.mice_norm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by Bayesian linear regression — impute.mice_norm","text":"Rubin DB (1987). Multiple Imputation Nonresponse Surveys. John Wiley \\& Sons, New York, NY, USA. ISBN 9780471087052. Schafer JL (1997). Analysis Incomplete Multivariate Data. Chapman \\& Hall/CRC, New York, NY, USA. ISBN 9780412040610. van Buuren S, Groothuis-Oudshoorn K (2011). “mice: Multivariate Imputation Chained Equations R.” Journal Statistical Software, 45(3), 1--67. doi:10.18637/jss.v045.i03 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the global minimum — impute.min_global","title":"Imputation by the global minimum — impute.min_global","text":"Apply imputation dataset minimum measured value protein found within entire dataset.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the global minimum — impute.min_global","text":"","code":"impute.min_global(dataSet, reportImputing = FALSE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the global minimum — impute.min_global","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_global.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the global minimum — impute.min_global","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the local minimum — impute.min_local","title":"Imputation by the local minimum — impute.min_local","text":"Apply imputation dataset minimum measured value protein condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the local minimum — impute.min_local","text":"","code":"impute.min_local(dataSet, reportImputing = FALSE, reqPercentPresent = 0.51)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the local minimum — impute.min_local","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. reqPercentPresent scalar (default = 0.51) specifying required percent values must present given protein condition combination values imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.min_local.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the local minimum — impute.min_local","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by the nuclear-norm regularization — impute.nuc_norm","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"Apply imputation dataset nuclear-norm regularization (Hastie et al. 2015) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"","code":"impute.nuc_norm( dataSet, reportImputing = FALSE, rank.max = NULL, lambda = NULL, thresh = 1e-05, maxit = 100, final.svd = TRUE, seed = 362436069 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. rank.max integer specifying restriction rank solution. default set one less minimum dimension dataset. lambda scalar specifying nuclear-norm regularization parameter. lambda = 0, algorithm convergence typically slower. default set maximum singular value obtained singular value decomposition (SVD) dataset. thresh scalar (default = 1e-5) specifying convergence threshold, measured relative change Frobenius norm two successive estimates. maxit integer (default = 100) specifying maximum number iterations convergence reached. final.svd boolean (default = TRUE) specifying whether perform one-step unregularized iteration final iteration, followed soft-thresholding singular values, resulting hard zeros. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.nuc_norm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by the nuclear-norm regularization — impute.nuc_norm","text":"Hastie T, Mazumder R, Lee JD, Zadeh R (2015). “Matrix Completion Low-Rank SVD via Fast Alternating Least Squares.” Journal Machine Learning Research, 16(104), 3367---3402. http://jmlr.org/papers/v16/hastie15a.html.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by Bayesian principal components analysis — impute.pca_bayes","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"Apply imputation dataset Bayesian principal components analysis (Oba et al. 2003) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"","code":"impute.pca_bayes(dataSet, reportImputing = FALSE, nPcs = NULL, maxSteps = 100)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. nPcs integer specifying number principal components calculate. default set minimum number samples number proteins. maxSteps integer (default = 100) specifying maximum number estimation steps.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_bayes.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by Bayesian principal components analysis — impute.pca_bayes","text":"Oba S, Sato M, Takemasa , Monden M, Matsubara K, Ishii S (2003). “Bayesian Missing Value Estimation Method Gene Expression Profile Data.” Bioinformatics, 19(16), 2088--2096. doi:10.1093/bioinformatics/btg287 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":null,"dir":"Reference","previous_headings":"","what":"Imputation by probabilistic principal components analysis — impute.pca_prob","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"Apply imputation dataset probabilistic principal components analysis (Stacklies et al. 2007) .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"","code":"impute.pca_prob( dataSet, reportImputing = FALSE, nPcs = NULL, maxIterations = 1000, seed = 362436069 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"dataSet 2d dataset experimental values. reportImputing boolean (default = FALSE) specifying whether provide shadow data frame imputed data labels, 1 indicates corresponding entries imputed, 0 indicates otherwise. Alters return structure. nPcs integer specifying number principal components calculate. default set minimum number samples number proteins. maxIterations integer (default = 1000) specifying maximum number allowed iterations. seed integer (default = 362436069) specifying seed used random number generator reproducibility.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"reportImputing = FALSE, function returns imputed 2d dataframe. reportImputing = TRUE, function returns list imputed 2d dataframe shadow matrix showing proteins replicate imputed.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/impute.pca_prob.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Imputation by probabilistic principal components analysis — impute.pca_prob","text":"Stacklies W, Redestig H, Scholz M, Walther D, Selbig J (2007). “pcaMethods--Bioconductor Package Providing PCA Methods Incomplete Data.” Bioinformatics, 23(9), 1164--1167. doi:10.1093/bioinformatics/btm069 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":null,"dir":"Reference","previous_headings":"","what":"Normalization of preprocessed data — normalize","title":"Normalization of preprocessed data — normalize","text":"Apply specified type normalization data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Normalization of preprocessed data — normalize","text":"","code":"normalize(dataSet, normalizeType = \"quant\")"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Normalization of preprocessed data — normalize","text":"dataSet 2d data set experimental values. normalizeType string (default = \"quant\") specifying type normalization apply: \"quant\": Quantile (Bolstad et al. 2003) \"median\": Protein-wise Median \"mean\": Protein-wise Mean \"none\": None","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Normalization of preprocessed data — normalize","text":"normalized 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Normalization of preprocessed data — normalize","text":"Quantile normalization generally recommended. Mean median normalization going included popular previous methods. normalization recommended. Boxplots also generated normalization give visual indicator changes.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/normalize.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Normalization of preprocessed data — normalize","text":"Bolstad BM, Irizarry RA, Astrand M, Speed TP (2003). “Comparison Normalization Methods High Density Oligonucleotide Array Data Based Variance Bias.” Bioinformatics, 19(2), 185--193. doi:10.1093/bioinformatics/19.2.185 .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":null,"dir":"Reference","previous_headings":"","what":"Filtering of raw data signals — preProcessFiltering","title":"Filtering of raw data signals — preProcessFiltering","text":"Apply series filtering steps data set.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filtering of raw data signals — preProcessFiltering","text":"","code":"preProcessFiltering( dataSet, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filtering of raw data signals — preProcessFiltering","text":"dataSet 2d data set experimental values. filterNaN boolean (default = TRUE) specifying whether proteins NaN removed data set. filterUnique integer (default = 2) specifying whether proteins less default number unique peptides removed data set. replaceBlank boolean (default = TRUE) specifying whether proteins without names named accession numbers. saveRm boolean (default = TRUE) specifying whether save removed data current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filtering of raw data signals — preProcessFiltering","text":"filtered 2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preProcessFiltering.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Filtering of raw data signals — preProcessFiltering","text":"forms filtering recommended use cases.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":null,"dir":"Reference","previous_headings":"","what":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"Read data file Spectronaut, apply filtering conditions, select columns necessary analysis, return reformatted data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"","code":"preprocessing( fileName, dataSet = NULL, filterNaN = TRUE, filterUnique = 2, replaceBlank = TRUE, saveRm = TRUE )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"fileName name .csv file containing MS data (including path file, needed). dataSet raw data set, already loaded R. filterNaN boolean (default = TRUE) specifying whether observations including NaN omitted. filterUnique integer (default = 2) specifying many number unique peptides required include protein. replaceBlank boolean (default = TRUE) specifying whether proteins without names named accession numbers. saveRm boolean (default = TRUE) specifying whether save removed data current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Loading, filtering and reformatting of MS DIA data from Spectronaut — preprocessing","text":"function executes following: Reads file. Applies applicable filters, necessary. Provides summary statistics histogram values reported data set. Selects columns contain necessary information analysis. Re-formats data present individual proteins columns group replicates protein. Stores data data.frame prints levels condition replicate user.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":null,"dir":"Reference","previous_headings":"","what":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"Read data file Scaffold, select columns necessary analysis, return reformatted data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"","code":"preprocessing_scaffold(fileName, dataSet = NULL)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"fileName name .xls file containing MS data (including path file, needed). dataSet raw data set, already loaded R.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"2d dataframe.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/preprocessing_scaffold.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Loading and reformatting of MS data from Scaffold — preprocessing_scaffold","text":"function executes following: Reads file. Provides summary statistics histogram values reported data set. Selects columns contain necessary information analysis. Re-formats data present individual proteins columns group replicates protein. Stores data data.frame prints levels condition replicate user.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":null,"dir":"Reference","previous_headings":"","what":"Compiling data on a single protein from each step in the process — pullProteinPath","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"Summarize steps performed data one protein.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"","code":"pullProteinPath(proteinName, dataSetList)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"proteinName string identifying protein interest. dataSetList list data frames, order dictates order presentation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"2d dataframe, protein data step present dataSetList.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/pullProteinPath.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compiling data on a single protein from each step in the process — pullProteinPath","text":"proteinName must match labels data sets exactly.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":null,"dir":"Reference","previous_headings":"","what":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"Create keyed dictionary, every unique experimental condition label list every protein value condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"","code":"sortcondition(dataSet)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"dataSet 2d data set experimental values.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/sortcondition.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creating a keyed list of conditions to the list of proteins that are present — sortcondition","text":"list lists.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":null,"dir":"Reference","previous_headings":"","what":"Summarize protein intensities across conditions — summarize","title":"Summarize protein intensities across conditions — summarize","text":"Calculate mean, standard deviation, replicate count protein across every condition.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summarize protein intensities across conditions — summarize","text":"","code":"summarize(dataSet, saveSumm = TRUE)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summarize protein intensities across conditions — summarize","text":"dataSet data frame containing data signals labels. saveSumm boolean (default = TRUE) specifying whether save summary statistics current working directory.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summarize protein intensities across conditions — summarize","text":"2d summarized data frame.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/summarize.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summarize protein intensities across conditions — summarize","text":"column 'Stat' generated data.frame includes following statistics: n: Number. mean: Mean. sd: Standard deviation. median: Median. trimmed: Trimmed mean trim 0.1. mad: Median absolute deviation (median). min: Minimum. max: Maximum. range: difference maximum minimum value. skew: Skewness. kurtosis: Kurtosis. se: Standard error.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":null,"dir":"Reference","previous_headings":"","what":"Log-based transformation — transform","title":"Log-based transformation — transform","text":"Apply logarithmic transformation data stabilize variance.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log-based transformation — transform","text":"","code":"transform(dataSet, logFold = 2)"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log-based transformation — transform","text":"dataSet data frame containing data signals. logFold integer specifying base log transformation.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log-based transformation — transform","text":"transformed data.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/transform.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log-based transformation — transform","text":"function executes following: Plots mean-variance relationship using meanVariancePlot(). Log-transforms data, using specified base. Plots mean-variance relationship comparison.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":null,"dir":"Reference","previous_headings":"","what":"Trimming down a protein FASTA file to certain proteins — trimFASTA","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"Trim FASTA file contain proteins present associated Spectronaut report file.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"","code":"trimFASTA( FASTAFileName, reportFileName, outputFileName = \"trimFASTA_output.txt\", by = \"PG.ProteinNames\", selectString = \"*BOVIN\" )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"FASTAFileName character string specifying name input FASTA .txt file. reportFileName character string specifying name Spectronaut report .csv file. outputFileName character string (default = \"trimFASTA_output.txt\") specifying name output file. character string (default = \"PG.ProteinNames\") specifying identifier (column name) used selection report file. selectString character string specifying regular expression search .","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"FASTA file specified proteins present.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA","text":"Depending size FASTA file, function may run slowly take several minutes. FASTA file must .txt format; formats work.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":null,"dir":"Reference","previous_headings":"","what":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"Trim FASTA file contain proteins present associated Spectronaut report file.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"","code":"trimFASTA2.0( FASTAFileName, reportFileName, outputFileName, selectString = \"*BOVIN\" )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"FASTAFileName string indicating FASTA .txt filename. reportFileName string indicating Spectronaut report .csv filename. outputFileName string indicating name new .txt FASTA file. selectString string containing regular expression search.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"FASTA file specified proteins present.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/trimFASTA2.0.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Trimming down a protein FASTA file to certain proteins — trimFASTA2.0","text":"Depending size FASTA file, function may run slowly take several minutes. FASTA file must .txt format; formats work.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":null,"dir":"Reference","previous_headings":"","what":"Generating visualizations for MS Data — visualize","title":"Generating visualizations for MS Data — visualize","text":"Create specific graphics illustrate results data analysis function.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generating visualizations for MS Data — visualize","text":"","code":"visualize( dataSet, graphType = \"volcano\", pkg = \"pheatmap\", cluster_cols = TRUE, cluster_rows = FALSE, show_colnames = TRUE, show_rownames = TRUE, M.thres = 1, transformLabel = \"Log2\", center = TRUE, scale = TRUE, addlabels = TRUE, choice = \"variance\", ncp = 10, addEllipses = TRUE, ellipse.level = 0.95, label = \"all\", show_percentage = TRUE, fill_color = c(\"blue\", \"yellow\", \"green\", \"red\"), show_universal = FALSE, P.thres = 0.05, logF.thres = 0.6 )"},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generating visualizations for MS Data — visualize","text":"dataSet 2D data frame corresponds output function analyze() name. graphType string indicating graph type. Current options : \"heatmap\" \"MA\" \"normalize\" \"PCA_biplot\" \"PCA_ind\" \"PCA_scree\" \"PCA_var\" \"t-test\" \"Upset\" \"Venn\" \"volcano\" pkg string specifying source package used plot heatmap. Two options: \"pheatmap\" \"ggplot2\". argument works graphType = \"heatmap\". cluster_cols boolean (default = TRUE) determining rows clustered hclust object. argument works graphType = \"heatmap\" pkg = \"pheatmap\". cluster_rows boolean (default = FALSE) determining columns clustered hclust object. argument works graphType = \"heatmap\" pkg = \"pheatmap\". show_colnames boolean (default = TRUE) specifying column names shown. argument works graphType = \"heatmap\" pkg = \"pheatmap\". show_rownames boolean (default = TRUE) specifying row names shown. argument works graphType = \"heatmap\" pkg = \"pheatmap\". M.thres absolute threshold value M (log fold-change) (default = 1) used plot two vertical lines (-M.thres M.thres) MA plot graphType = \"MA\". transformLabel string (default = \"Log2\") used label title axes transformation type transformed MA plot graphType = \"MA\". center boolean (default = TRUE) indicating whether variables shifted zero centered graphType = \"PCA_scree\", graphType = \"PCA_ind\", graphType = \"PCA_var\", graphType = \"PCA_biplot\". scale boolean (default = TRUE) indicating whether variables scaled unit variance analysis takes place graphType = \"PCA_scree\", graphType = \"PCA_ind\", graphType = \"PCA_var\", graphType = \"PCA_biplot\". addlabels boolean (default = TRUE) specifying whether elements labeled. graphType = \"PCA_scree\", specifies whether labels added top bars points show information retained dimension. graphType = \"PCA_ind\", specifies whether active individuals labeled. graphType = \"PCA_var\", specifies whether active variables labeled. choice text (default = \"variance\") specifying PCA data plotted scree plot graphType = \"PCA_scree\". Allowed values \"variance\" \"eigenvalue\". ncp numeric value (default = 10) specifying number dimensions shown graphType = \"PCA_scree\". addEllipses boolean (default = TRUE) specifying whether draw ellipses around individuals graphType = \"PCA_ind\" graphType = \"PCA_biplot\". ellipse.level numeric value (default = 0.95) specifying size concentration ellipse normal probability graphType = \"PCA_ind\" graphType = \"PCA_biplot\". label text (default = \"\") specifying elements labelled graphType = \"PCA_biplot\". Allowed values: \"\": Label active individuals active variables. \"ind\": Label active individuals. \"var\": Label active variables. \"none\": labels. show_percentage boolean (default = TRUE) specifying whether show percentage set graphType = \"Venn\". fill_color text (default = c(\"blue\", \"yellow\", \"green\", \"red\")) specifying colors fill circles graphType = \"Venn\". show_universal boolean (default = FALSE) specifying whether return data.frame logical columns representing sets graphType = \"Venn\". P.thres threshold value P-value (default = 0.05) used plot horizontal line (-log10(P.thres)) volcano plot graphType = \"volcano\". logF.thres absolute threshold value log2(fold change) (default = 0.6) used plot two vertical lines (-logF.thres logF.thres) volcano plot graphType = \"volcano\".","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generating visualizations for MS Data — visualize","text":"object class ggplot.","code":""},{"path":"https://uconn-scs.github.io/msDiaLogue/reference/visualize.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generating visualizations for MS Data — visualize","text":"function visualize() designed work directly output function analyze(). Please sure arguments graphType testType match.","code":""}] diff --git a/vignettes/usage_template.Rmd b/vignettes/usage_template.Rmd index 70fec69..18a77cf 100644 --- a/vignettes/usage_template.Rmd +++ b/vignettes/usage_template.Rmd @@ -219,26 +219,31 @@ knitr::kable( **Extension** Besides protein names, the function `filterProtein()` provides a similar function to -filter proteins by additional protein information: gene, accession, and description. +filter proteins by additional protein information. + ++ For **Spectronaut**: "PG.Genes", "PG.ProteinAccessions", "PG.ProteinDescriptions", and +"PG.ProteinNames". + ++ For **Scaffold**: "ProteinDescriptions", "AccessionNumber", and "AlternateID". ```{r eval=FALSE} filterProtein(dataTran, proteinInformation = "preprocess_protein_information.csv", text = c("Ras-related protein Rab-3D", "Alcohol dehydrogenase 1"), - by = "description", + by = "PG.ProteinDescriptions", removeList = FALSE) ``` where `proteinInformation` is the file name for protein information, automatically -generated by `preprocessing()`. In this case, the proteins with descriptions -"Ras-related protein Rab-3D" or "Alcohol dehydrogenase 1" will be kept. Note that the -search value `text` is used for exact equality search. +generated by `preprocessing()`. In this case, the proteins whose `"PG.ProteinDescriptions"` +match with "Ras-related protein Rab-3D" or "Alcohol dehydrogenase 1" will be kept. +Note that the search value `text` is used for exact equality search.

```{r echo=FALSE} knitr::kable( filterProtein(dataTran, proteinInformation = "preprocess_protein_information.csv", text = c("Ras-related protein Rab-3D", "Alcohol dehydrogenase 1"), - by = "description", + by = "PG.ProteinDescriptions", removeList = FALSE)) ```
@@ -461,49 +466,65 @@ knitr::kable(dataSumm) The column "Stat" in the generated result includes the following statistics: -+ n: number. -+ mean: mean. -+ sd: standard deviation. -+ median: median. -+ trimmed: trimmed mean with a trim of 0.1. -+ mad: median absolute deviation (from the median). -+ min: minimum. -+ max: maximum. -+ range: the difference between the maximum and minimum value. -+ skew: skewness. -+ kurtosis: kurtosis. -+ se: standard error. ++ n: Number. ++ mean: Mean. ++ sd: Standard deviation. ++ median: Median. ++ trimmed: Trimmed mean with a trim of 0.1. ++ mad: Median absolute deviation (from the median). ++ min: Minimum. ++ max: Maximum. ++ range: The difference between the maximum and minimum value. ++ skew: Skewness. ++ kurtosis: Kurtosis. ++ se: Standard error. ## Analysis The function `analyze()` calculates the results that can be used in subsequent -visualizations. If more than two conditions exist in the data, precisely two conditions -for comparison must be specified via the argument `conditions`. +visualizations. + +
+**Note:** The following listed analysis compare data under two conditions. The **order** +of `conditions` will affect downstream analysis, as the **second condition** serves as +the reference of comparison. + ++ If only two conditions exist in the data and `conditions` is not specified, `conditions` +will automatically be generated by sorting the unique values alphabetically and in +ascending order. + ++ If more than two conditions exist in the data, precisely two conditions for comparison +must be specified via the argument `conditions`. +
```{r} -cond <- c("50fmol", "100fmol") +cond <- c("100fmol", "50fmol") ``` ### Student's t-test The Student's t-test is used to compare the means between two conditions for each protein, -reporting both the difference in means between the conditions (calculated as Condition 1 - -Condition 2) and the P-value of the test. +reporting both the difference in means between the conditions and the P-value of the test. + +
+**Note:** The difference is calculated by subtracting the mean of the second condition +from the mean of the first condition (condition 1 - Condition 2).
```{r} anlys_t <- analyze(dataImput, conditions = cond, testType = "t-test") ``` -Oops! The warning message shows "Data are essentially constant," which means that the data -contain proteins with the same value in all samples. In this case, the P-value of t-test -returns NA. -
```{r echo=FALSE} knitr::kable(anlys_t) ```
+
+**Note:** In the Student's t-test, a warning message might appear, stating +"**Data are essentially constant**," which means that the data contain proteins with the +same value in all samples. In this case, the P-value of t-test returns NA.
+ ### Moderated t-test @@ -516,29 +537,36 @@ from all the chosen proteins to calculate variance. anlys_mod.t <- analyze(dataImput, conditions = cond, testType = "mod.t-test") ``` -In the moderated t-test, a warning message might occur stating, "Zero sample variances -detected, have been offset away from zero." This warning corresponds to examples of -proteins that exhibited identical quant values, either pre- or post-imputation, and -therefore no variance is present across conditions for those proteins. This does not -impede downstream analysis; it merely serves to alert users to its occurrence. - - - - - -
```{r echo=FALSE} knitr::kable(anlys_mod.t) ```
+
+**Note:** In the moderated t-test, a warning message might occur stating, +"**Zero sample variances detected, have been offset away from zero.**" +This warning corresponds to examples of proteins that exhibited identical quant values, +either pre- or post-imputation, and therefore no variance is present across conditions +for those proteins. This does not impede downstream analysis; it merely serves to alert +users to its occurrence.
+ + + + + + ### MA The result of `testType = "MA"` is to generate the data for plotting an MA plot, which represents the protein-wise averages within each condition. +
+**Note:** The rows of the output are ordered by conditions, impacting the subsequent +MA plot visualization. Specifically, the first row represents the protein-wise average of +the first condition, and the second row represents the second condition.
+ ```{r} anlys_MA <- analyze(dataImput, conditions = cond, testType = "MA") ``` @@ -612,15 +640,21 @@ $$A = \frac{1}{2}log_2(XY) = \frac{1}{2}\left[log_2(X)+log_2(Y)\right]$$ Most proteins are expected to exhibit little variation, leading to the majority of points concentrating around the line M = 0 (indicating no difference between group means). +
+**Note:** Again, the **order** of `conditions` in the `analyze()` will determine +how the MA plot is visualized. The second row of `anlys_MA` acts as the comparison +reference: the first and second rows refer to variables $log_2 X$ and $log_2 Y$, +respectively.
+ ```{r} visualize(anlys_MA, graphType = "MA", M.thres = 1, transformLabel = "Log2") ``` where `M.thres = 1` means the M thresholds are set to −1 and 1. The scatters are split into three parts: significant up (M > 1), no significant (-1 $\leq$ M $\leq$ 1), and -significant down (M < -1). And `transformLabel = "Log2"` is used to label the title. -Additionally, the warning message "Removed 16 rows containing missing values" indicates -that there are 16 proteins with no significance. +significant down (M < -1). And `transformLabel = "Log2"` is used to prefix the title, +x-axis, and y-axis labels. Additionally, the warning message "Removed 16 rows containing +missing values" indicates that there are 16 proteins with no significance. ### Normalize