Skip to content

Commit a98dfca

Browse files
committed
refactor(diann): move q-value filtering to MSstatsClean for DIANN (#116)
1 parent 4c36723 commit a98dfca

7 files changed

Lines changed: 98 additions & 50 deletions

File tree

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ License: Artistic-2.0
1414
Encoding: UTF-8
1515
LazyData: true
1616
Roxygen: list(markdown = TRUE)
17-
RoxygenNote: 7.3.2
17+
RoxygenNote: 7.3.3
1818
biocViews: MassSpectrometry, Proteomics, Software, DataImport, QualityControl
1919
Depends:
2020
R (>= 4.0)

R/clean_DIANN.R

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#' Clean raw Diann files
22
#' @param msstats_object an object of class `MSstatsDIANNFiles`.
3-
#' @param MBR True if analysis was done with match between runs
4-
#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities for DIANN 1.8.x.
5-
#' Use 'FragmentQuantRaw' for quantified intensities for DIANN 1.9.x.
6-
#' Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensity is a separate column, e.g. Fr0Quantity.
3+
#' @inheritParams DIANNtoMSstatsFormat
74
#' @return data.table
85
#' @importFrom stats na.omit
96
#' @keywords internal
107
.cleanRawDIANN <- function(msstats_object, MBR = TRUE,
11-
quantificationColumn = "FragmentQuantCorrected") {
8+
quantificationColumn = "FragmentQuantCorrected",
9+
global_qvalue_cutoff = 0.01,
10+
qvalue_cutoff = 0.01,
11+
pg_qvalue_cutoff = 0.01) {
1212
dn_input <- getInputFile(msstats_object, "input")
1313
dn_input <- data.table::as.data.table(dn_input)
1414

@@ -28,7 +28,10 @@
2828
dn_input <- .cleanDIANNProcessFragmentInfo(dn_input, quantificationColumn)
2929

3030
# Clean and filter data
31-
dn_input <- .cleanDIANNCleanAndFilterData(dn_input, quantificationColumn)
31+
dn_input <- .cleanDIANNCleanAndFilterData(dn_input, MBR, quantificationColumn,
32+
global_qvalue_cutoff,
33+
qvalue_cutoff,
34+
pg_qvalue_cutoff)
3235

3336
# Rename columns
3437
dn_input <- .cleanDIANNRenameColumns(dn_input, quantificationColumn)
@@ -145,14 +148,50 @@
145148

146149
#' Clean and filter data by removing unwanted fragments and NA values
147150
#' @param dn_input data.table input
148-
#' @param quantificationColumn quantification column name
151+
#' @inheritParams DIANNtoMSstatsFormat
149152
#' @return cleaned data.table
150153
#' @noRd
151-
.cleanDIANNCleanAndFilterData <- function(dn_input, quantificationColumn) {
154+
.cleanDIANNCleanAndFilterData <- function(dn_input, MBR, quantificationColumn,
155+
global_qvalue_cutoff,
156+
qvalue_cutoff,
157+
pg_qvalue_cutoff) {
152158
# Remove NH3 and H2O loss fragments & remove rows with NA in quant column
153159
dn_input <- dn_input[!grepl("NH3|H2O", FragmentIon) &
154160
!is.na(get(quantificationColumn))]
155161

162+
msg = paste0('** Filtering on Q.Value < ', global_qvalue_cutoff)
163+
getOption("MSstatsLog")("INFO", msg)
164+
getOption("MSstatsMsg")("INFO", msg)
165+
166+
dn_input = dn_input[QValue < global_qvalue_cutoff, ]
167+
if (MBR) {
168+
msg = '** MBR was used to analyze the data. Now setting names and filtering'
169+
msg_1_mbr = paste0('-- LibPGQValue < ', pg_qvalue_cutoff)
170+
msg_2_mbr = paste0('-- LibQValue < ', qvalue_cutoff)
171+
dn_input = dn_input[LibPGQValue < pg_qvalue_cutoff, ]
172+
dn_input = dn_input[LibQValue < qvalue_cutoff, ]
173+
getOption("MSstatsLog")("INFO", msg)
174+
getOption("MSstatsMsg")("INFO", msg)
175+
getOption("MSstatsLog")("INFO", msg_1_mbr)
176+
getOption("MSstatsMsg")("INFO", msg_1_mbr)
177+
getOption("MSstatsLog")("INFO", msg_2_mbr)
178+
getOption("MSstatsMsg")("INFO", msg_2_mbr)
179+
# getOption("MSstatsLog")("INFO", "\n")
180+
} else{
181+
msg = '** MBR was not used to analyze the data. Now setting names and filtering'
182+
msg_1 = paste0('-- Filtering on GlobalPGQValue < ', pg_qvalue_cutoff)
183+
msg_2 = paste0('-- Filtering on GlobalQValue < ', qvalue_cutoff)
184+
dn_input = dn_input[GlobalPGQValue < pg_qvalue_cutoff, ]
185+
dn_input = dn_input[GlobalQValue < qvalue_cutoff, ]
186+
getOption("MSstatsLog")("INFO", msg)
187+
getOption("MSstatsMsg")("INFO", msg)
188+
getOption("MSstatsLog")("INFO", msg_1)
189+
getOption("MSstatsMsg")("INFO", msg_1)
190+
getOption("MSstatsLog")("INFO", msg_2)
191+
getOption("MSstatsMsg")("INFO", msg_2)
192+
# getOption("MSstatsLog")("INFO", "\n")
193+
}
194+
156195
return(dn_input)
157196
}
158197

R/converters_DIANNtoMSstatsFormat.R

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
#' @param pg_qvalue_cutoff If MBR is false, the qvalue cutoff for the Global.PG.Q.Value
1515
#' column, i.e. the global q-value for the protein group. If MBR is true, the
1616
#' qvalue cutoff for the Lib.PG.Q.Value column, i.e. the protein group q-value for
17-
#' the library created after the first MBR pass. Run should be the same as filename.
18-
#' Default is 0.01.
17+
#' the library created after the first MBR pass. Default is 0.01.
1918
#' @param useUniquePeptide should unique pepties be removed
2019
#' @param removeFewMeasurements should proteins with few measurements be removed
2120
#' @param removeOxidationMpeptides should peptides with oxidation be removed
@@ -71,7 +70,10 @@ DIANNtoMSstatsFormat = function(input, annotation = NULL,
7170
input = MSstatsConvert::MSstatsImport(list(input = input),
7271
"MSstats", "DIANN")
7372
input = MSstatsConvert::MSstatsClean(input, MBR = MBR,
74-
quantificationColumn = quantificationColumn)
73+
quantificationColumn = quantificationColumn,
74+
global_qvalue_cutoff = global_qvalue_cutoff,
75+
qvalue_cutoff = qvalue_cutoff,
76+
pg_qvalue_cutoff = pg_qvalue_cutoff)
7577
annotation = MSstatsConvert::MSstatsMakeAnnotation(input, annotation)
7678

7779
decoy_filter = list(col_name = "ProteinName",
@@ -83,39 +85,6 @@ DIANNtoMSstatsFormat = function(input, annotation = NULL,
8385
filter = removeOxidationMpeptides,
8486
drop_column = FALSE)
8587

86-
msg = paste0('** Filtering on Global Q Value < ', global_qvalue_cutoff)
87-
getOption("MSstatsLog")("INFO", msg)
88-
getOption("MSstatsMsg")("INFO", msg)
89-
90-
input = input[DetectionQValue < global_qvalue_cutoff, ]
91-
if (MBR) {
92-
msg = '** MBR was used to analyze the data. Now setting names and filtering'
93-
msg_1_mbr = paste0('-- LibPGQValue < ', pg_qvalue_cutoff)
94-
msg_2_mbr = paste0('-- LibQValue < ', qvalue_cutoff)
95-
input = input[LibPGQValue < pg_qvalue_cutoff, ]
96-
input = input[LibQValue < qvalue_cutoff, ]
97-
getOption("MSstatsLog")("INFO", msg)
98-
getOption("MSstatsMsg")("INFO", msg)
99-
getOption("MSstatsLog")("INFO", msg_1_mbr)
100-
getOption("MSstatsMsg")("INFO", msg_1_mbr)
101-
getOption("MSstatsLog")("INFO", msg_2_mbr)
102-
getOption("MSstatsMsg")("INFO", msg_2_mbr)
103-
# getOption("MSstatsLog")("INFO", "\n")
104-
} else{
105-
msg = '** MBR was not used to analyze the data. Now setting names and filtering'
106-
msg_1 = paste0('-- Filtering on GlobalPGQValue < ', pg_qvalue_cutoff)
107-
msg_2 = paste0('-- Filtering on GlobalQValue < ', qvalue_cutoff)
108-
input = input[GlobalPGQValue < pg_qvalue_cutoff, ]
109-
input = input[GlobalQValue < qvalue_cutoff, ]
110-
getOption("MSstatsLog")("INFO", msg)
111-
getOption("MSstatsMsg")("INFO", msg)
112-
getOption("MSstatsLog")("INFO", msg_1)
113-
getOption("MSstatsMsg")("INFO", msg_1)
114-
getOption("MSstatsLog")("INFO", msg_2)
115-
getOption("MSstatsMsg")("INFO", msg_2)
116-
# getOption("MSstatsLog")("INFO", "\n")
117-
}
118-
11988
feature_columns = c("PeptideSequence", "PrecursorCharge",
12089
"FragmentIon", "ProductCharge")
12190
input = MSstatsConvert::MSstatsPreprocess(

inst/tinytest/test_clean_DIANN.R

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,14 @@ output = MSstatsConvert:::.cleanRawDIANN(input)
2525
output = MSstatsConvert:::.cleanRawDIANN(input, quantificationColumn = "FragmentQuantRaw")
2626
.validateOutput(output)
2727

28+
# Q-value filtering
29+
output = MSstatsConvert:::.cleanRawDIANN(input, global_qvalue_cutoff = 0.005)
30+
expect_equal(sum(output$DetectionQValue < 0.005), nrow(output))
31+
output = MSstatsConvert:::.cleanRawDIANN(input, qvalue_cutoff = 0.00001)
32+
expect_equal(sum(output$LibQValue < 0.00001), nrow(output))
33+
output = MSstatsConvert:::.cleanRawDIANN(input, pg_qvalue_cutoff = 0.001)
34+
expect_equal(sum(output$LibPGQValue < 0.001), nrow(output))
35+
output = MSstatsConvert:::.cleanRawDIANN(input, MBR = TRUE, qvalue_cutoff = 0.005)
36+
expect_equal(sum(output$LibQValue < 0.005), nrow(output))
37+
output = MSstatsConvert:::.cleanRawDIANN(input, MBR = TRUE, pg_qvalue_cutoff = 0.001)
38+
expect_equal(sum(output$LibPGQValue < 0.001), nrow(output))

man/DIANNtoMSstatsFormat.Rd

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/MSstatsClean.Rd

Lines changed: 16 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/dot-cleanRawDIANN.Rd

Lines changed: 17 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)