The function normalizePlates
uses the content of the assayData
slot of object
.
For dual-channel data, a recommended workflow is (i) to correct for
plate effects using the normalizePlates
function, (ii) combine
the two channels using the function summarizeChannels
, and
(iii) finally, if necessary, normalize the summarized intensities
calling normalizePlates
again. In this function, the normalization is performed in a plate-by-plate fashion, following this workflow:
- Log transformation of the data (optional)
- Per-plate normalization
- Variance adjustment of the plate intensity corrected data (optional)
The argument scale
defines the scale of the data. If the data are on a multiplicative scale
(scale="multiplicative"
), the data can be log2
transformed by setting log=TRUE
. This then changes the scale of the data to code"additive".
In the next step of preprocessing, intensities are corrected in a
plate-by-plate basis using the chosen normalization method:
- If
method="median"
, plates effects are corrected by the
median value across wells that are annotated as sample
in
wellAnno(object)
, for each plate and replicate.
- If
method="mean"
, the average in the sample
wells is used instead.
- If
method="shorth"
, the midpoint of the
shorth
of the distribution of values in the wells annotated
as sample
is used.
- If
method="negatives"
, the median of the negative
controls is used.
Depending on the scale of the data prior to normalization, the data are
divided by the above defined correction factors (scale:
"multiplicative"
), or the value is subtracted (scale:
"additive"
).
Further available normalization methods are:
-
method="POC"
(percent of control): for each plate and
replicate, each measurement is divided by the average of the
measurements on the plate positive controls, and multiplied by 100.
method="NPI"
(normalized percent inhibition): each
measurement is subtracted from the average of the intensities on the
plate positive controls, and this result is divided by the difference
between the means of the measurements on the positive and the negative
controls.
method="Bscore"
: for each plate and replicate, the
B-score method
, which is based on a
2-way median polish, is applied to remove row and column biases.
method="locfit"
(robust local fit regression): for each
plate and replicate, spatial effects are removed by fitting a
bivariate local polynomial regression
(see spatialNormalization
).
In the final preprocessing step, variance of plate-corrected intensities
can be adjusted as follows:
-
varianceAdjust="byPlate"
: per plate normalized intensities are divided by the per-plate median absolute deviations (MAD) in "sample" wells. This is done separately for each replicate and channel;
-
varianceAdjust="byBatch"
: using the content of slot batch
, plates are split according to assay batches and the individual normalized intensities in each group of plates (batch) are divided by the per-batch of plates MAD values (calculated based on "sample" wells). This is done separately for each replicate and channel;
-
varianceAdjust="byExperiment"
: each normalized measurement is divided by the overall MAD of normalized values in wells containing "sample". This is done separately for each replicate and channel;
By default, no variance adjustment is performed
(varianceAdjust="none"
).
The arguments posControls
and negControls
are required for
applying the normalization methods based on the control measurements
that is, when method="POC"
, or method="NPI"
, or
method="negatives"
). posControls
and negControls
should be vectors of regular expression patterns specifying the name of
the positive(s) and negative(s) controls, respectivey, as provided in
the plate configuration file (and accessed via
wellAnno(object)
). The length of these vectors should be equal to
the current number of channels in object
(i.e. to the
dim(Data(object))[3]
). By default, if posControls
is not
given, pos will be taken as the name for the wells containing
positive controls. Similarly, if negControls
is missing, by
default neg will be considered as the name used to annotate the
negative controls. The content of posControls
and
negControls
will be passed to regexpr
for pattern matching within the well annotation given in the featureData
slot of object
(which can be accessed via
wellAnno(object)
) (see examples for
summarizeChannels
). The
arguments posControls
and negControls
are particularly
useful in multi-channel data since the controls might be
reporter-specific, or after normalizing multi-channel data.
See the Examples section for an example on how this function can be used
to apply a robust version of the Z score method, whereby, for each plate and replicate, the
per-plate median (computed only from sample wells) is subtracted from the
measurements, and the result is divided by the per-plate MAD
(only from sample wells).