Title: | Reading, Quality Control and Preprocessing of MBA (Multiplex Bead Assay) Data |
---|---|
Description: | Speeds up the process of loading raw data from MBA (Multiplex Bead Assay) examinations, performs quality control checks, and automatically normalises the data, preparing it for more advanced, downstream tasks. The main objective of the package is to create a simple environment for a user, who does not necessarily have experience with R language. The package is developed within the project of the same name - 'PvSTATEM', which is an international project aiming for malaria elimination. |
Authors: | Tymoteusz Kwiecinski [aut, cre] , Jakub Grzywaczewski [aut], Mateusz Nizwantowski [aut], Przemyslaw Biecek [ths] , Nuno Sepulveda [ths] |
Maintainer: | Tymoteusz Kwiecinski <[email protected]> |
License: | BSD_3_clause + file LICENSE |
Version: | 0.1.1 |
Built: | 2024-11-08 12:31:03 UTC |
Source: | https://github.com/mini-pw/pvstatem |
Create a standard curve model for a certain analyte
create_standard_curve_model_analyte( plate, analyte_name, data_type = "Median", source_mfi_range_from_all_analytes = FALSE, detect_high_dose_hook = TRUE, ... )
create_standard_curve_model_analyte( plate, analyte_name, data_type = "Median", source_mfi_range_from_all_analytes = FALSE, detect_high_dose_hook = TRUE, ... )
plate |
( |
analyte_name |
( |
data_type |
( |
source_mfi_range_from_all_analytes |
( |
detect_high_dose_hook |
( |
... |
Additional arguments passed to the model Standard curve samples should not contain |
(Model()
) Standard Curve model
This function generates a report for a plate. The report contains all the necessary information about the plate, from the general plate parameters, such as examination date, to the breakdown of the analytes' plots.
The report is generated using the plate_report_template.Rmd
template.
generate_plate_report( plate, use_model = TRUE, filename = NULL, output_dir = "reports", counts_lower_threshold = 50, counts_higher_threshold = 70, additional_notes = NULL )
generate_plate_report( plate, use_model = TRUE, filename = NULL, output_dir = "reports", counts_lower_threshold = 50, counts_higher_threshold = 70, additional_notes = NULL )
plate |
A plate object. |
use_model |
( |
filename |
( If the passed filename does not contain |
output_dir |
( |
counts_lower_threshold |
( |
counts_higher_threshold |
( |
additional_notes |
( |
A report.
plate_file <- system.file("extdata", "CovidOISExPONTENT_CO_reduced.csv", package = "PvSTATEM") # a plate file with reduced number of analytes to speed up the computation layout_file <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM") note <- "This is a test report.\n**Author**: Jane Doe \n**Tester**: John Doe" plate <- read_luminex_data(plate_file, layout_file, verbose = FALSE) example_dir <- tempdir(check = TRUE) # a temporary directory generate_plate_report(plate, output_dir = example_dir, counts_lower_threshold = 40, counts_higher_threshold = 50, additional_notes = note )
plate_file <- system.file("extdata", "CovidOISExPONTENT_CO_reduced.csv", package = "PvSTATEM") # a plate file with reduced number of analytes to speed up the computation layout_file <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM") note <- "This is a test report.\n**Author**: Jane Doe \n**Tester**: John Doe" plate <- read_luminex_data(plate_file, layout_file, verbose = FALSE) example_dir <- tempdir(check = TRUE) # a temporary directory generate_plate_report(plate, output_dir = example_dir, counts_lower_threshold = 40, counts_higher_threshold = 50, additional_notes = note )
The function calculates the normalised MFI (nMFI) values for each of the analytes in the plate.
The nMFI values are calculated as the ratio of the test samples' MFI values to the standard curve samples with the target dilution.
When nMFI could be used? In general, it is preferred to use Relative Antibody Unit (RAU) values for any analysis. However, it is sometimes impossible to fit a model to the standard curve samples. This may happen if the MFI values of test samples are much higher than the MFI of standard curve samples. Then, the prediction would require significant data extrapolation, which could lead to unreliable results.
In such cases, the nMFI values could be used as a proxy for RAU values if we want, for instance, to account for plate-to-plate variation.
get_nmfi( plate, reference_dilution = 1/400, data_type = "Median", verbose = TRUE )
get_nmfi( plate, reference_dilution = 1/400, data_type = "Median", verbose = TRUE )
plate |
( |
reference_dilution |
( |
data_type |
( |
verbose |
( |
nmfi (data.frame
) a data frame with normalised MFI values for each analyte in the plate and all test samples.
# read the plate plate_file <- system.file("extdata", "CovidOISExPONTENT.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_layout.csv", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_file) # artificially bump up the MFI values of the test samples (the Median data type is default one) plate$data[["Median"]][plate$sample_types == "TEST", ] <- plate$data[["Median"]][plate$sample_types == "TEST", ] * 10 # calculate the nMFI values nmfi <- get_nmfi(plate, reference_dilution = 1 / 400) # we don't do any extrapolation and the values should be comparable across plates head(nmfi) # different params nmfi <- get_nmfi(plate, reference_dilution = "1/50")
# read the plate plate_file <- system.file("extdata", "CovidOISExPONTENT.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_layout.csv", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_file) # artificially bump up the MFI values of the test samples (the Median data type is default one) plate$data[["Median"]][plate$sample_types == "TEST", ] <- plate$data[["Median"]][plate$sample_types == "TEST", ] * 10 # calculate the nMFI values nmfi <- get_nmfi(plate, reference_dilution = 1 / 400) # we don't do any extrapolation and the values should be comparable across plates head(nmfi) # different params nmfi <- get_nmfi(plate, reference_dilution = "1/50")
Typically, the MFI values associated with standard curve
samples should decrease as we dilute the samples. However,
sometimes in high dilutions, the MFI presents a non monotonic behavior.
In that case, MFI values associated with dilutions above (or equal to)
high_dose_threshold
should be removed from the analysis.
For the nplr
model the recommended number of standard curve samples
is at least 4. If the high dose hook effect is detected but the number
of samples below the high_dose_threshold
is lower than 4,
additional warning is printed and the samples are not removed.
The function returns a logical vector that can be used to subset the MFI values.
handle_high_dose_hook(mfi, dilutions, high_dose_threshold = 1/200)
handle_high_dose_hook(mfi, dilutions, high_dose_threshold = 1/200)
mfi |
( |
dilutions |
( |
high_dose_threshold |
( |
sample selector (logical()
)
Check if the data type is valid. The data type is valid if it is one of the
elements of the VALID_DATA_TYPES
vector. The valid data types are:
c(Median, Net MFI, Count, Avg Net MFI, Mean, Peak)
.
is_valid_data_type(data_type)
is_valid_data_type(data_type)
data_type |
A string representing the data type. |
TRUE
if the data type is valid, FALSE
otherwise.
Check if the sample type is valid. The sample type is valid if it is one of the
elements of the VALID_SAMPLE_TYPES
vector. The valid sample types are:
c(ALL, BLANK, TEST, NEGATIVE CONTROL, STANDARD CURVE, POSITIVE CONTROL)
.
is_valid_sample_type(sample_type)
is_valid_sample_type(sample_type)
sample_type |
A string representing the sample type. |
TRUE
if the sample type is valid, FALSE
otherwise.
The Model class is a wrapper around the nplr
model. It allows to predict the RAU (Relative Antibody Unit) values
directly from the MFI values of a given sample.
The nplr
model is fitted using the formula:
where:
is the predicted value, MFI in our case,
is the independent variable, dilution in our case,
is the bottom plateau - the right horizontal asymptote,
is the top plateau - the left horizontal asymptote,
is the slope of the curve at the inflection point,
is the x-coordinate at the inflection point,
is the asymmetric coefficient.
This equation is referred to as the Richards' equation. More information about the model can be found in the nplr
package documentation.
After the model is fitted to the data, the RAU values can be predicted using the predict
method.
The RAU value is simply a predicted dilution value (using the standard curve) for a given MFI
multiplied by 1,000 000 to have a more readable value.
For more information about the differences between dilution, RAU and MFI values, please see the
"Normalisation" section in the "Basic PvSTATEM functionalities" vignette.
analyte
(character(1)
)
Name of the analyte for which the model was fitted
dilutions
(numeric()
)
Dilutions used to fit the model
mfi
(numeric()
)
MFI values used to fit the model
mfi_min
(numeric(1)
)
Minimum MFI used for scaling MFI values to the range [0, 1]
mfi_max
(numeric(1)
)
Maximum MFI used for scaling MFI values to the range [0, 1]
model
(nplr
)
Instance of the nplr
model fitted to the data
log_dilution
(logical()
)
Indicator should the dilutions be transformed using the log10
function
log_mfi
(logical()
)
Indicator should the MFI values be transformed using the log10
function
scale_mfi
(logical()
)
Indicator should the MFI values be scaled to the range [0, 1]
top_asymptote
(numeric(1)
)
The top asymptote of the logistic curve
bottom_asymptote
(numeric(1)
)
The bottom asymptote of the logistic curve
new()
Create a new instance of Model R6 class
Model$new( analyte, dilutions, mfi, npars = 5, verbose = TRUE, log_dilution = TRUE, log_mfi = TRUE, scale_mfi = TRUE, mfi_min = NULL, mfi_max = NULL )
analyte
(character(1)
)
Name of the analyte for which the model was fitted.
dilutions
(numeric()
)
Dilutions used to fit the model
mfi
MFI (numeric()
)
values used to fit the model
npars
(numeric(1)
)
Number of parameters to use in the model
verbose
(logical()
)
If TRUE
prints messages, TRUE
by default
log_dilution
(logical()
)
If TRUE
the dilutions are transformed using the log10
function, TRUE
by default
log_mfi
(logical()
)
If TRUE
the MFI values are transformed using the log10
function, TRUE
by default
scale_mfi
(logical()
)
If TRUE
the MFI values are scaled to the range [0, 1], TRUE
by default
mfi_min
(numeric(1)
)
Enables to set the minimum MFI value used for scaling MFI values to the range [0, 1].
Use values before any transformations (e.g., before the log10
transformation)
mfi_max
(numeric(1)
)
Enables to set the maximum MFI value used for scaling MFI values to the range [0, 1].
Use values before any transformations (e.g., before the log10
transformation)
predict()
Predict RAU values from the MFI values
Model$predict(mfi, over_max_extrapolation = 0, eps = 1e-06)
mfi
(numeric()
)
MFI values for which we want to predict the RAU values
over_max_extrapolation
(numeric(1)
)
How much we can extrapolate the values above the maximum RAU value
seen in standard curve samples . Defaults to 0.
If the value of the predicted RAU is above
,
the value is censored to the value of that sum.
eps
(numeric(1)
)
A small value used to avoid numerical issues close to the asymptotes
(data.frame()
)
Dataframe with the predicted RAU values for given MFI values
The columns are named as follows:
RAU
- the Relative Antibody Units (RAU) value
MFI
- the predicted MFI value
get_plot_data()
Data that can be used to plot the standard curve.
Model$get_plot_data()
(data.frame()
)
Prediction dataframe for scaled MFI (or logMFI) values in the range [0, 1].
Columns are named as in the predict
method
print()
Function prints the basic information about the model such as the number of parameters or samples used
Model$print()
clone()
The objects of this class are cloneable with this method.
Model$clone(deep = FALSE)
deep
Whether to make a deep clone.
plate_file <- system.file("extdata", "CovidOISExPONTENT.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_layout.csv", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_filepath = layout_file) model <- create_standard_curve_model_analyte(plate, "S2", log_mfi = TRUE) print(model)
plate_file <- system.file("extdata", "CovidOISExPONTENT.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_layout.csv", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_filepath = layout_file) model <- create_standard_curve_model_analyte(plate, "S2", log_mfi = TRUE) print(model)
A class to represent the luminex plate. It contains information about the samples and analytes that were examined on the plate as well as some additional metadata and batch info
plate_name
(character(1)
)
Name of the plate. Set to the name of the file from which the plate was read.
analyte_names
(character()
)
Names of the analytes that were examined on the plate.
sample_names
(character()
)
Names of the samples that were examined on the plate.
batch_name
(character(1)
)
Name of the batch to which the plate belongs.
plate_datetime
(POSIXct()
)
A date and time when the plate was created by the machine
sample_locations
(character()
)
Locations of the samples on the plate.
sample_types
(character()
)
Types of the samples that were examined on the plate.
The possible values are c(ALL, BLANK, TEST, NEGATIVE CONTROL, STANDARD CURVE, POSITIVE CONTROL)
.
dilutions
(character()
)
A list containing names of the samples as keys and string representing dilutions as values.
The dilutions are represented as strings.
dilution_values
(numeric()
)
A list containing names of the samples as keys and numeric values representing dilutions as values.
default_data_type
(character(1)
)
The default data type that will be returned by the get_data
method.
By default is set to Median
.
data
(list()
)
A list containing dataframes with the data for each sample and analyte.
The possible data types - the keys of the list are:
c(Median, Net MFI, Count, Avg Net MFI, Mean, Peak)
.
In each dataframe, the rows represent samples and the columns represent analytes.
batch_info
(list()
)
A list containing additional, technical information about the batch.
layout
(character()
)
A list containing information about the layout of the plate.
The layout is read from the separate file and usually provides additional
information about the dilutions, sample names, and the sample layout
on the actual plate.
blank_adjusted
(logical
)
A flag indicating whether the blank values have been adjusted.
new()
Method to initialize the Plate object
Plate$new( plate_name, sample_names, analyte_names, batch_name = "", plate_datetime = NULL, sample_locations = NULL, sample_types = NULL, dilutions = NULL, dilution_values = NULL, default_data_type = NULL, data = NULL, batch_info = NULL, layout = NULL )
plate_name
(character(1)
)
Name of the plate.
By default is set to an empty string,
during the reading process it is set to the name
of the file from which the plate was read.
sample_names
(character()
)
Names of the samples that were examined on the plate.
analyte_names
(character()
)
Names of the analytes that were examined on the plate.
batch_name
(character(1)
)
Name of the batch to which the plate belongs.
By default is set to an empty string, during the reading process it is set to
the batch
field of the plate
plate_datetime
(POSIXct()
)
Datetime object representing the date and time when the plate was created by the machine.
sample_locations
(character()
)
Locations of the samples on the plate.
sample_types
(character()
)
Types of the samples that were examined on the plate.
The possible values are c(ALL, BLANK, TEST, NEGATIVE CONTROL, STANDARD CURVE, POSITIVE CONTROL)
.
dilutions
(character()
)
A list containing names of the samples as keys and string representing dilutions as values.
The dilutions are represented as strings.
dilution_values
(numeric()
)
A list containing names of the samples as keys and numeric values representing dilutions as values.
default_data_type
(character(1)
)
The default data type that will be returned by the get_data
method.
By default is set to Median
.
data
(list()
)
A list containing dataframes with the data for each sample and analyte.
The possible data types - the keys of the list are c(Median, Net MFI, Count, Avg Net MFI, Mean, Peak)
.
In each dataframe, the rows represent samples and the columns represent analytes.
batch_info
(list()
)
A list containing additional, technical information about the batch.
layout
(character()
)
A list containing information about the layout of the plate.
The layout is read from the separate file and usually provides additional
information about the dilutions, sample names, and the sample layout
on the actual plate.
print()
Function prints the basic information about the plate such as the number of samples and analytes
Plate$print(...)
...
Additional parameters to be passed to the print function Print the summary of the plate
summary()
Function outputs basic information about the plate, such as examination date, batch name, and sample types.
Plate$summary(..., include_names = FALSE)
...
Additional parameters to be passed to the print function Get data for a specific analyte and sample type
include_names
If include_names
parameter is TRUE
, a
part from count of control samples, provides also their names.
By default FALSE
get_data()
Function returns data for a specific analyte and sample.
Plate$get_data( analyte, sample_type = "ALL", data_type = self$default_data_type )
analyte
An analyte name or its id of which data we want to extract. If set to 'ALL' returns data for all analytes.
sample_type
is a type of the sample we want to extract data from.
The possible values are c(ALL, BLANK, TEST, NEGATIVE CONTROL, STANDARD CURVE, POSITIVE CONTROL)
. Default value is ALL
.
data_type
The parameter specifying which data type should be returned.
This parameter has to take one of values: c(Median, Net MFI, Count, Avg Net MFI, Mean, Peak)
.
What's more, the data_type
has to be present in the plate's data
Default value is plate's default_data_type
, which is usually Median
.
Dataframe containing information about a given sample type and analyte Get the string representation of dilutions
get_dilution()
Function returns the dilution represented as strings for a specific sample type.
Plate$get_dilution(sample_type)
sample_type
type of the samples that we want to obtain the dilution for.
The possible values are c(ALL, BLANK, TEST, NEGATIVE CONTROL, STANDARD CURVE, POSITIVE CONTROL)
Default value is ALL
.
A list containing names of the samples as keys and string representing dilutions as values. Get the numeric representation of dilutions
get_dilution_values()
Function returns the dilution values for a specific sample type.
Plate$get_dilution_values(sample_type)
sample_type
type of the samples that we want to obtain the dilution values for.
The possible values are c(ALL, BLANK, TEST, NEGATIVE CONTROL, STANDARD CURVE, POSITIVE CONTROL)
Default value is ALL
.
A list containing names of the samples as keys and numeric values representing dilutions as values.
Adjust the MFI values by subtracting the background
blank_adjustment()
Function adjusts the values of samples (all samples excluding the blanks) by clamping the
values to the aggregated value of the BLANK
samples for each analyte separately.
The purpose of this operation is to unify the data by clamping values below the background noise. how this method works was inspired by the paper https://doi.org/10.1038/s41598-020-57876-0 which covers the quality control in the MBA.
In short, this operation firstly calculates the aggregate of MFI in the BLANK
samples
(available methods are: min
, max
, mean
, median
)
and then replaces all values below this threshold with the threshold value.
Method does not modifies the data of type Count
.
This operation is recommended to be performed before any further analysis, but is optional. Skipping it before further analysis is allowed, but will result in a warning.
Plate$blank_adjustment(threshold = "max", in_place = TRUE)
threshold
The method used to calculate the background value for each analyte.
Every value below this threshold will be clamped to the threshold value.
By default max
. Available methods are: min
, max
, mean
, median
.
inplace
Whether the method should produce new plate with adjusted
values or not, By default TRUE
- operates on the current plate.
clone()
The objects of this class are cloneable with this method.
Plate$clone(deep = FALSE)
deep
Whether to make a deep clone.
This class helps creating the Plate object. It is used to store the data and validate the final fields.
layout_as_vector
Print the layout associated with the plate as a flattened vector of values.
new()
Initialize the PlateBuilder object
PlateBuilder$new(sample_names, analyte_names, batch_name = "", verbose = TRUE)
sample_names
vector of sample names measured during an examination in the same order as in the data
analyte_names
vector of analytes names measured during an examination in the same order as in the data
batch_name
name of the batch during which the plate was examined
obtained from the plate info. An optional parameter, by default set to
""
- an empty string.
verbose
logical value indicating whether to print additional information. This parameter is stored as a private attribute of the object and reused in other methods
set_sample_locations()
Set the sample types used during the examination
PlateBuilder$set_sample_locations(sample_locations)
sample_locations
vector of sample locations pretty name ie. A1, B2
set_dilutions()
Extract and set the dilutions from layout, sample names or use a provided vector of values. The provided vector should be the same length as the number of samples and should contain dilution factors saved as strings
PlateBuilder$set_dilutions(use_layout_dilutions = TRUE, values = NULL)
use_layout_dilutions
logical value indicating whether to use names
extracted from layout files to extract dilutions. If set to FALSE
the
function uses the sample names as a source for dilution
values
a vector of dilutions to overwrite the extraction process
Set and extract sample types from the sample names. Optionally use the layout file to extract the sample types
set_sample_types()
PlateBuilder$set_sample_types(use_layout_types = TRUE, values = NULL)
use_layout_types
logical value indicating whether to use names extracted from layout files to extract sample types
values
a vector of sample types to overwrite the extraction process
set_sample_names()
Set the sample names used during the examination. If the layout is provided, extract the sample names from the layout file. Otherwise, uses the original sample names from the Luminex file
PlateBuilder$set_sample_names(use_layout_sample_names = TRUE)
use_layout_sample_names
logical value indicating whether to use names extracted from layout files. If set to false, this function only checks if the sample names are provided in the plate
set_plate_datetime()
Set the plate datetime for the plate
PlateBuilder$set_plate_datetime(plate_datetime)
plate_datetime
a POSIXct datetime object representing the date and time of the examination
set_data()
Set the data used during the examination
PlateBuilder$set_data(data)
data
a named list of data frames containing information about
the samples and analytes. The list is named by the type of the data
e.g. Median
, Net MFI
, etc.
The data frames contain information about the samples and analytes
The rows are different measures, whereas the columns represent
different analytes
Example of how data$Median
looks like:
Sample | Analyte1 | Analyte2 | Analyte3 |
Sample1 | 1.2 | 2.3 | 3.4 |
Sample2 | 4.5 | 5.6 | 6.7 |
... | ... | ... | ... |
Sample96 | 7.8 | 8.9 | 9.0 |
set_default_data_type()
Set the data type used for calculations
PlateBuilder$set_default_data_type(data_type = "Median")
data_type
a character value representing the type of data that is currently used for calculations. By default, it is set to Median
set_batch_info()
Set the batch info for the plate
PlateBuilder$set_batch_info(batch_info)
batch_info
a raw list containing metadata about the plate read from the Luminex file
set_plate_name()
Set the plate name for the plate. The plate name is extracted from the filepath
PlateBuilder$set_plate_name(file_path)
set_layout()
Set the layout matrix for the plate. This function performs basic validation
verifies if the plate is a matrix of shape 8x12 with 96 wells
PlateBuilder$set_layout(layout_matrix)
layout_matrix
a matrix containing information about the sample names. dilutions, etc.
build()
Create a Plate object from the PlateBuilder object
PlateBuilder$build(validate = TRUE)
clone()
The objects of this class are cloneable with this method.
PlateBuilder$clone(deep = FALSE)
deep
Whether to make a deep clone.
This function plots counts in a 96-well plate using a colour to represent the count ranges.
There is a possibility of plotting exact counts in each well.
If the plot window is resized, it's best to re-run the function to adjust the scaling.
Sometimes, when a legend is plotted, the whole layout may be shifted. It's best to stretch the window, and everything will be adjusted automatically.
plot_counts( plate, analyte_name, plot_counts = TRUE, plot_legend = FALSE, lower_threshold = 50, higher_threshold = 70 )
plot_counts( plate, analyte_name, plot_counts = TRUE, plot_legend = FALSE, lower_threshold = 50, higher_threshold = 70 )
plate |
The plate object with the counts data |
analyte_name |
The name of the analyte |
plot_counts |
Logical indicating if the counts should be plotted |
plot_legend |
Logical indicating if the legend should be plotted |
lower_threshold |
The lower threshold for the counts, it separates green and yellow colours |
higher_threshold |
The higher threshold for the counts, it separates yellow and red colours |
A ggplot object
plate_filepath <- system.file("extdata", "CovidOISExPONTENT_CO.csv", package = "PvSTATEM", mustWork = TRUE ) layout_filepath <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM", mustWork = TRUE ) plate <- read_luminex_data(plate_filepath, layout_filepath) plot_counts( plate = plate, analyte_name = "OC43_NP_NA", plot_counts = TRUE, plot_legend = FALSE )
plate_filepath <- system.file("extdata", "CovidOISExPONTENT_CO.csv", package = "PvSTATEM", mustWork = TRUE ) layout_filepath <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM", mustWork = TRUE ) plate <- read_luminex_data(plate_filepath, layout_filepath) plot_counts( plate = plate, analyte_name = "OC43_NP_NA", plot_counts = TRUE, plot_legend = FALSE )
This function plots the layout of a 96-well plate using a colour to represent the sample types.
If the plot window is resized, it's best to re-run the function to adjust the scaling.
Sometimes, the whole layout may be shifted when a legend is plotted. It's best to stretch the window, and everything will be adjusted automatically.
plot_layout(plate, plot_legend = TRUE)
plot_layout(plate, plot_legend = TRUE)
plate |
The plate object with the layout information |
plot_legend |
Logical indicating if the legend should be plotted |
A ggplot object
plate_filepath <- system.file("extdata", "CovidOISExPONTENT_CO.csv", package = "PvSTATEM", mustWork = TRUE ) layout_filepath <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM", mustWork = TRUE ) plate <- read_luminex_data(plate_filepath, layout_filepath) plot_layout(plate = plate, plot_legend = TRUE)
plate_filepath <- system.file("extdata", "CovidOISExPONTENT_CO.csv", package = "PvSTATEM", mustWork = TRUE ) layout_filepath <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM", mustWork = TRUE ) plate <- read_luminex_data(plate_filepath, layout_filepath) plot_layout(plate = plate, plot_legend = TRUE)
Plot MFI value distribution for a given analyte
plot_mfi_for_analyte( plate, analyte_name, data_type = "Median", plot_type = "violin", scale_y = "log10", plot_outliers = FALSE )
plot_mfi_for_analyte( plate, analyte_name, data_type = "Median", plot_type = "violin", scale_y = "log10", plot_outliers = FALSE )
plate |
A plate object |
analyte_name |
The analyte to plot |
data_type |
The type of data to plot. Default is "Median" |
plot_type |
The type of plot to generate. Default is "violin". Available options are "boxplot" and "violin". |
scale_y |
What kind of transformation of the scale to apply.
By default MFI is presented in a "log10" scale. Available options are
described in the documentation of scale_y_continuous
under |
plot_outliers |
When using "boxplot" type of a plot one can set this parameter to TRUE and display the names of samples for which MFI falls outside the 1.5 IQR interval |
A ggplot object
Plot standard curve samples of a plate of a given analyte.
plot_standard_curve_analyte( plate, analyte_name, data_type = "Median", decreasing_rau_order = TRUE, log_scale = c("all"), plot_line = TRUE, plot_blank_mean = TRUE, plot_rau_bounds = TRUE, plot_legend = TRUE, verbose = TRUE )
plot_standard_curve_analyte( plate, analyte_name, data_type = "Median", decreasing_rau_order = TRUE, log_scale = c("all"), plot_line = TRUE, plot_blank_mean = TRUE, plot_rau_bounds = TRUE, plot_legend = TRUE, verbose = TRUE )
plate |
A plate object |
analyte_name |
Name of the analyte of which standard curve we want to plot. |
data_type |
Data type of the value we want to plot - the same datatype as in the plate file. By default equals to |
decreasing_rau_order |
If |
log_scale |
Which elements on the plot should be displayed in log scale. By default |
plot_line |
If |
plot_blank_mean |
If |
plot_rau_bounds |
If |
plot_legend |
If |
verbose |
If |
ggplot object with the plot
Function plots the values of standard curve samples and the fitted model.
plot_standard_curve_analyte_with_model( plate, model, data_type = "Median", decreasing_rau_order = TRUE, log_scale = c("all"), plot_asymptote = TRUE, plot_test_predictions = TRUE, plot_blank_mean = TRUE, plot_rau_bounds = TRUE, plot_legend = TRUE, verbose = TRUE, ... )
plot_standard_curve_analyte_with_model( plate, model, data_type = "Median", decreasing_rau_order = TRUE, log_scale = c("all"), plot_asymptote = TRUE, plot_test_predictions = TRUE, plot_blank_mean = TRUE, plot_rau_bounds = TRUE, plot_legend = TRUE, verbose = TRUE, ... )
plate |
Plate object |
model |
fitted |
data_type |
Data type of the value we want to plot - the same datatype as in the plate file. By default equals to |
decreasing_rau_order |
If |
log_scale |
Which elements on the plot should be displayed in log scale. By default |
plot_asymptote |
If |
plot_test_predictions |
If |
plot_blank_mean |
If |
plot_rau_bounds |
If |
plot_legend |
If |
verbose |
If |
... |
Additional arguments passed to the |
a ggplot object with the plot
More details can be found here: Model
## S3 method for class 'Model' predict(object, mfi, ...)
## S3 method for class 'Model' predict(object, mfi, ...)
object |
( |
mfi |
( |
... |
Additional arguments passed to the method |
(data.frame()
)
Depending on the normalisation_type
argument, the function will compute the RAU or nMFI values for each analyte in the plate.
RAU is the default normalisation type.
The behaviour of the function, in the case of RAU normalisation type, can be summarised as follows:
Adjust blanks if not already done.
Fit a model to each analyte using standard curve samples.
Compute RAU values for each analyte using the corresponding model.
Aggregate computed RAU values into a single data frame.
Save the computed RAU values to a CSV file.
More info about the RAU normalisation can be found in
create_standard_curve_model_analyte
function documentation create_standard_curve_model_analyte or in the Model reference Model.
In case the normalisation type is nMFI, the function will:
Adjust blanks if not already done.
Compute nMFI values for each analyte using the target dilution.
Aggregate computed nMFI values into a single data frame.
Save the computed nMFI values to a CSV file.
More info about the nMFI normalisation can be found in get_nmfi
function documentation get_nmfi.
process_plate( plate, filename = NULL, output_dir = "normalised_data", normalisation_type = "RAU", data_type = "Median", include_raw_mfi = TRUE, adjust_blanks = FALSE, verbose = TRUE, reference_dilution = 1/400, ... )
process_plate( plate, filename = NULL, output_dir = "normalised_data", normalisation_type = "RAU", data_type = "Median", include_raw_mfi = TRUE, adjust_blanks = FALSE, verbose = TRUE, reference_dilution = 1/400, ... )
plate |
( |
filename |
( If the passed filename does not contain |
output_dir |
( |
normalisation_type |
( |
data_type |
( |
include_raw_mfi |
( |
adjust_blanks |
( |
verbose |
( |
reference_dilution |
( |
... |
Additional arguments to be passed to the fit model function ( |
a data frame with normalised values
plate_file <- system.file("extdata", "CovidOISExPONTENT_CO_reduced.csv", package = "PvSTATEM") # a plate file with reduced number of analytes to speed up the computation layout_file <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_file, verbose = FALSE) example_dir <- tempdir(check = TRUE) # a temporary directory # create and save dataframe with computed dilutions process_plate(plate, output_dir = example_dir) # process plate without adjusting blanks and save the output to a file with a custom name process_plate(plate, filename = "plate_without_blanks_adjusted.csv", output_dir = example_dir, adjust_blanks = FALSE ) # nMFI normalisation process_plate(plate, output_dir = example_dir, normalisation_type = "nMFI", reference_dilution = 1 / 400 )
plate_file <- system.file("extdata", "CovidOISExPONTENT_CO_reduced.csv", package = "PvSTATEM") # a plate file with reduced number of analytes to speed up the computation layout_file <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_file, verbose = FALSE) example_dir <- tempdir(check = TRUE) # a temporary directory # create and save dataframe with computed dilutions process_plate(plate, output_dir = example_dir) # process plate without adjusting blanks and save the output to a file with a custom name process_plate(plate, filename = "plate_without_blanks_adjusted.csv", output_dir = example_dir, adjust_blanks = FALSE ) # nMFI normalisation process_plate(plate, output_dir = example_dir, normalisation_type = "nMFI", reference_dilution = 1 / 400 )
Read the Intelliflex format data
read_intelliflex_format(path, verbose = TRUE)
read_intelliflex_format(path, verbose = TRUE)
path |
Path to the INTELLIFLEX file |
verbose |
Print additional information. Default is |
Read layout data from a file
read_layout_data(layout_file_path, ...)
read_layout_data(layout_file_path, ...)
layout_file_path |
Path to the layout file |
... |
Additional arguments to pass to the underlying read function |
A matrix with the layout data. The row names are supposed to be letters A,B,C, etc. The column names are supposed to be numbers 1,2,3, etc.
Reads a file containing Luminex data and returns a Plate object. If provided, can also read a layout file, which usually contains information about the sample names, sample types or its dilutions.
The function is capable of reading data in two different formats:
xPONENT
INTELLIFLEX which are produced by two different Luminex machines.
read_luminex_data( plate_filepath, layout_filepath = NULL, format = "xPONENT", plate_file_separator = ",", plate_file_encoding = "UTF-8", use_layout_sample_names = TRUE, use_layout_types = TRUE, use_layout_dilutions = TRUE, default_data_type = "Median", sample_types = NULL, dilutions = NULL, verbose = TRUE )
read_luminex_data( plate_filepath, layout_filepath = NULL, format = "xPONENT", plate_file_separator = ",", plate_file_encoding = "UTF-8", use_layout_sample_names = TRUE, use_layout_types = TRUE, use_layout_dilutions = TRUE, default_data_type = "Median", sample_types = NULL, dilutions = NULL, verbose = TRUE )
plate_filepath |
Path to the Luminex plate file |
layout_filepath |
Path to the Luminex layout file |
format |
The format of the Luminex data. Select from: xPONENT, INTELLIFLEX |
plate_file_separator |
The separator used in the plate file |
plate_file_encoding |
The encoding used in the plate file |
use_layout_sample_names |
Whether to use names from the layout file in extracting sample names. |
use_layout_types |
Whether to use names from the layout file in extracting sample types. Works only when layout file is provided |
use_layout_dilutions |
Whether to use dilutions from the layout file in extracting dilutions. Works only when layout file is provided |
default_data_type |
The default data type to use if none is specified |
sample_types |
a vector of sample types to use instead of the extracted ones |
dilutions |
a vector of dilutions to use instead of the extracted ones |
verbose |
Whether to print additional information and warnings. |
Plate file containing the Luminex data
plate_file <- system.file("extdata", "CovidOISExPONTENT.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_layout.csv", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_file) plate_file <- system.file("extdata", "CovidOISExPONTENT_CO.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM") # To suppress warnings and additional information use verbose = FALSE plate <- read_luminex_data(plate_file, layout_file, verbose = FALSE)
plate_file <- system.file("extdata", "CovidOISExPONTENT.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_layout.csv", package = "PvSTATEM") plate <- read_luminex_data(plate_file, layout_file) plate_file <- system.file("extdata", "CovidOISExPONTENT_CO.csv", package = "PvSTATEM") layout_file <- system.file("extdata", "CovidOISExPONTENT_CO_layout.xlsx", package = "PvSTATEM") # To suppress warnings and additional information use verbose = FALSE plate <- read_luminex_data(plate_file, layout_file, verbose = FALSE)
Read the xPONENT format data
read_xponent_format( path, exact_parse = FALSE, encoding = "utf-8", separator = ",", verbose = TRUE )
read_xponent_format( path, exact_parse = FALSE, encoding = "utf-8", separator = ",", verbose = TRUE )
path |
Path to the xPONENT file |
exact_parse |
Whether to parse the file exactly or not Exact parsing means that the batch, calibration and assay metadata will be parsed as well |
encoding |
Encoding of the file |
separator |
Separator for the CSV values |
verbose |
Whether to print the progress. Default is |
Function translates sample names to sample types based on the sample name from Luminex file and the sample name from the layout file, which may not be provided. The function uses regular expressions to match the sample names to the sample types.
It parses the names as follows:
If sample_names
or sample_names_from_layout
equals to BLANK
, BACKGROUND
or B
,
then SampleType equals to BLANK
If sample_names
or sample_names_from_layout
equals to STANDARD CURVE
,
SC
, S
, contains substring 1/\d+
and has prefix
, S_
, S
,
S
or CP3
, then SampleType equals to STANDARD CURVE
If sample_names
or sample_names_from_layout
equals to NEGATIVE CONTROL
, N
,
or contains substring NEG
, then SampleType equals to NEGATIVE CONTROL
If sample_names
or sample_names_from_layout
starts with P
followed by
whitespace, POS
followed by whitespace, some sample name followed by
substring 1/\d+
SampleType equals to POSITIVE CONTROL
Otherwise, the returned SampleType is TEST
translate_sample_names_to_sample_types( sample_names, sample_names_from_layout = NULL )
translate_sample_names_to_sample_types( sample_names, sample_names_from_layout = NULL )
sample_names |
( |
sample_names_from_layout |
( |
A vector of valid sample_type strings of length equal to the length of sample_names
translate_sample_names_to_sample_types(c("B", "BLANK", "NEG", "TEST1")) translate_sample_names_to_sample_types(c("S", "CP3"))
translate_sample_names_to_sample_types(c("B", "BLANK", "NEG", "TEST1")) translate_sample_names_to_sample_types(c("S", "CP3"))