7  Classification

This tutorial focuses on understanding (i) what the classification algorithm aims to do, (ii) how to interpret these data, and (iii) how to visualise these data.

7.1 P. vivax Machine Learning Classification Algorithm

Plasma samples from year-long observational cohort studies conducted in malaria-endemic regions in Thailand (Kanchanaburi and Ratchaburi provinces), Brazil (Manaus) and Solomon Islands (Ngella) were measured for antigen-specific IgG antibody responses toward a panel of eight antigens using the method outlined in (Longley et al. 2020).

Enrolled individuals in the year-long cohort studies provided a blood sample every month. Light microscopy and qPCR targeting the blood-stages of P. vivax were performed to detect which individuals were infected and at which time point during these studies. IgG antibody responses towards a panel of P. vivax antigens were measured at the last visit of the year-long study, enabling us to characterise antibody responses related with time since P. vivax infection. Negative controls from the Australian Red Cross, Brazil Red Cross, Thai Red Cross and the Volunteer Blood Donor Registry in Victoria, Australia were included. These data were used as our training dataset (#tbl-table1).

Table 1: Description of sample size for training and testing dataset, including plasma samples from year-long observational cohort studies in malaria-endemic regions of Brazil, Thailand, and the Solomon Islands, as well as negative controls from Australia, Thailand and Brazil.
Source.Country Type No..samples
Brazil Year-long cohort study 886
Thailand Year-long cohort study 680
Solomon Islands Year-long cohort study 709
Volunteer Blood Donor Registry Negative control 98
Australian Red Cross Negative control 97
Thai Red Cross Negative control 69
Brazil Blood Donor Registry Negative control 96

This work develops a sero-diagnostic test to balance the selection of serological exposure markers that are associated with high classification performance, with the selection of proteins that are easier to manufacture and are more stable.

(#tbl-table2) outlines the top eight P. vivax proteins selected in the model (discussed further below in the random forest classification methods), their associated lifecycle stage and description of the proteins and expression system.

Table 2. P. vivax proteins considered in the selection of our serological exposure markers.
Antigen Gene.ID..PlasmoDB.
RBP2b PVX_094255
MSP1-19 PVX_099980
Pv-fam-a PVX_096995
MSP5 PVX_003770
EBP KMZ83376.1
PTEX150 PVX_084720
PvCSS PVX_086200
MSP8 PVX_097625

Random forests are a machine learning algorithm which creates an “ensemble” or “sets” of decision trees (i.e., a “forest”) from slightly different versions of the training dataset. Each ensemble makes a separate prediction which is then averaged to get a more accurate and stable final prediction, resulting in good classification performance compared to a single decision tree and little overfitting to the training data due to the use of multiple trees.

We trained a random forest classification algorithm to learn the patterns in antibody response for someone infected in the previous nine months. Because of our sampling method, our training dataset includes “true positives” and “true negatives” which allows us to compare to the model predicted “positives” and “negatives”.

A random forest classification algorithm was created for all possible combinations for the eight antigens using 10-fold cross-validations with five repeats. The final random forest was fit with 1,000 trees and all hyperparameters were default.

7.1.1 Setup

library(SeroTrackR)
library(tidyverse)

your_raw_data <- c(
  system.file("extdata", "example_MAGPIX_plate1.csv", package = "SeroTrackR"),
  system.file("extdata", "example_MAGPIX_plate2.csv", package = "SeroTrackR"), 
  system.file("extdata", "example_MAGPIX_plate3.csv", package = "SeroTrackR")
)
your_plate_layout <- system.file("extdata", "example_platelayout_1.xlsx", package = "SeroTrackR")

sero_data <- readSeroData(
  raw_data = your_raw_data, 
  platform = "magpix",        # default 
  version = "4.2"             # default 
)

plate_list <- readPlateLayout(
  plate_layout = your_plate_layout, 
  sero_data  = sero_data
)

qc_results  <- runQC(
  sero_data = sero_data,       # load in your serological data variable 
  plate_list = plate_list      # load your plate list variable 
)

mfi_to_rau_output <- MFItoRAU(
  sero_data = sero_data, 
  plate_list = plate_list,
  qc_results = qc_results, 
  std_point = 10
)

The classifyResults() function classifies samples as recently exposed within the last nine months (“seropositive”) or not (“seronegative”).

7.2 Which algorithm do I choose?

The algorithm_type is only “antibody_model”, which is also written by default.

7.3 Sensitivity and Specificity

7.3.1 Some definitions

  • True Positive (TP), True Negative (TN), False Positive (FP), False Negative (FN).
  • Sensitivity: Tests the proportion of people who test positive among all of those who actually have the disease.
    • Sens = TP / (TP + FN).
  • Specificity: Tests the proportion of people who test negative among all those who actually do not have the disease.
    • Spec = TN / (TN + FP).
  • Positive Predictive Value (PPV): Probability that following a positive test result, that individual will truly have the specific disease.
    • PPV = TP / (TP + FP).
  • Negative Predictive Value (NPV): Probability that following a negative test result, the individual will truly not have that specific disease.
    • NPV = TN / (TN + FN).

7.3.2 Options

We have provided multiple options for you to choose which classification you would like to run. The sens_spec can be:

  • “balanced” (default)
  • “90% specificity”

7.3.3 Which sensitivity/specificity threshold do I use?

The balanced sensitivity / specificity is when both metrics are at their highest and correspond to 81% each.

High specificity with lower sensitivity is suited for surveillance settings and aims to correctly identify non-carriers and minimise treatment of uninfected individual, while the impact of false negatives can be mitigated by increasing survey size.

7.4 Applying the Random Forest

classifyResults_output <- classifyResults(
  mfi_to_rau_output, 
  algorithm_type = "antibody_model", 
  sens_spec = "balanced", 
  qc_results
)

The results from the classification are displayed in a table. The exposure status (seropositive/seronegative) is displayed for each sample.

To form an educated guess about the seropositivity/exposure status for your samples, take into consideration all relevant epidemiological information that you may have available to you (e.g. time since possible exposure, timing of sampling with respect to incidence of P. vivax infections/cases) and explore the results using the classifier/s.

classifyResults_output
SampleID Plate QC_total PvEBP Pv-fam-a PvMSP5 PvMSP1-19 PvMSP8 PvRBP2b PvPTEX150 PvCSS pred_class_max
ABC013 plate1 pass 0.0008186 0.0013988 0.0002178 0.0001306 0.0000544 0.0005770 0.0008127 0.0002842 seropositive
ABC097 plate2 pass 0.0009348 0.0014012 0.0002128 0.0001217 0.0000447 0.0015043 0.0008059 0.0002840 seropositive
ABC181 plate3 pass 0.0009247 0.0014825 0.0002101 0.0001255 0.0000532 0.0003089 0.0008214 0.0002777 seropositive
ABC022 plate1 pass 0.0200000 0.0194273 0.0008140 0.0034177 0.0006996 0.0007638 0.0017082 0.0028055 seropositive
ABC106 plate2 pass 0.0200000 0.0166113 0.0008213 0.0033747 0.0006723 0.0200000 0.0016322 0.0027944 seropositive
ABC190 plate3 pass 0.0200000 0.0188708 0.0008167 0.0038346 0.0006614 0.0200000 0.0017157 0.0029083 seropositive
ABC023 plate1 pass 0.0002469 0.0066799 0.0001356 0.0001112 0.0001541 0.0008822 0.0103627 0.0010007 seropositive
ABC107 plate2 pass 0.0002680 0.0063864 0.0001255 0.0001013 0.0001431 0.0104717 0.0092607 0.0010093 seropositive
ABC191 plate3 pass 0.0002668 0.0071560 0.0001312 0.0001068 0.0001443 0.0200000 0.0106456 0.0010214 seropositive
ABC024 plate1 pass 0.0004662 0.0003515 0.0002854 0.0001166 0.0000897 0.0003178 0.0002971 0.0004278 seropositive
ABC108 plate2 pass 0.0005239 0.0003427 0.0002838 0.0001070 0.0000793 0.0002930 0.0003043 0.0004297 seropositive
ABC192 plate3 pass 0.0005171 0.0003445 0.0002761 0.0001120 0.0000853 0.0014281 0.0002999 0.0004233 seropositive
ABC014 plate1 pass 0.0000506 0.0003779 0.0000420 0.0000830 0.0000195 0.0002524 0.0001229 0.0001354 seropositive
ABC098 plate2 pass 0.0000478 0.0003693 0.0000262 0.0000717 0.0000195 0.0001479 0.0001220 0.0001332 seronegative
ABC182 plate3 pass 0.0000527 0.0003718 0.0000437 0.0000800 0.0000195 0.0000604 0.0001195 0.0001316 seronegative
ABC015 plate1 pass 0.0000672 0.0002221 0.0000724 0.0001473 0.0000657 0.0002511 0.0002780 0.0008856 seropositive
ABC099 plate2 pass 0.0000654 0.0002131 0.0000580 0.0001392 0.0000557 0.0001953 0.0002849 0.0008933 seronegative
ABC183 plate3 pass 0.0000700 0.0002132 0.0000719 0.0001416 0.0000635 0.0001722 0.0002804 0.0009003 seronegative
ABC016 plate1 pass 0.0000569 0.0002418 0.0000364 0.0000400 0.0000195 0.0003184 0.0001103 0.0001568 seropositive
ABC100 plate2 pass 0.0000545 0.0002327 0.0000206 0.0000274 0.0000195 0.0000470 0.0001082 0.0001548 seronegative
ABC184 plate3 pass 0.0000593 0.0002328 0.0000385 0.0000401 0.0000195 0.0000860 0.0001063 0.0001521 seronegative
ABC017 plate1 pass 0.0003415 0.0002480 0.0001016 0.0001933 0.0000623 0.0003606 0.0014240 0.0003288 seropositive
ABC101 plate2 pass 0.0003780 0.0002389 0.0000892 0.0001876 0.0000524 0.0003529 0.0013733 0.0003292 seropositive
ABC185 plate3 pass 0.0003741 0.0002390 0.0000992 0.0001870 0.0000604 0.0003426 0.0014322 0.0003225 seropositive
ABC018 plate1 pass 0.0000645 0.0003930 0.0000615 0.0000353 0.0000213 0.0000486 0.0002793 0.0001341 seronegative
ABC102 plate2 pass 0.0000625 0.0003845 0.0000465 0.0000227 0.0000195 0.0001498 0.0002862 0.0001319 seronegative
ABC186 plate3 pass 0.0000671 0.0003875 0.0000618 0.0000357 0.0000229 0.0001436 0.0002817 0.0001304 seronegative
ABC019 plate1 pass 0.0001411 0.0018596 0.0001734 0.0000644 0.0002753 0.0007979 0.0002324 0.0003450 seropositive
ABC103 plate2 pass 0.0001469 0.0018613 0.0001658 0.0000524 0.0002624 0.0010216 0.0002380 0.0003457 seropositive
ABC187 plate3 pass 0.0001492 0.0019939 0.0001673 0.0000627 0.0002567 0.0002739 0.0002334 0.0003389 seropositive
ABC020 plate1 pass 0.0000195 0.0000508 0.0000195 0.0000195 0.0000195 0.0000195 0.0000258 0.0000217 seronegative
ABC104 plate2 pass 0.0000195 0.0000463 0.0000195 0.0000195 0.0000195 0.0000195 0.0000195 0.0000196 seronegative
ABC188 plate3 pass 0.0000195 0.0000513 0.0000195 0.0000195 0.0000195 0.0000195 0.0000195 0.0000272 seronegative
ABC021 plate1 pass 0.0000195 0.0000457 0.0000195 0.0000195 0.0000195 0.0000195 0.0000269 0.0000217 seronegative
ABC105 plate2 pass 0.0000195 0.0000416 0.0000195 0.0000195 0.0000195 0.0000195 0.0000195 0.0000196 seronegative
ABC189 plate3 pass 0.0000195 0.0000469 0.0000195 0.0000195 0.0000195 0.0000195 0.0000195 0.0000272 seronegative
ABC025 plate1 pass 0.0000548 0.0004049 0.0003595 0.0000374 0.0000303 0.0001648 0.0005793 0.0001809 seropositive
ABC109 plate2 pass 0.0000523 0.0003966 0.0003609 0.0000248 0.0000219 0.0002329 0.0005830 0.0001792 seropositive
ABC193 plate3 pass 0.0000571 0.0003999 0.0003497 0.0000377 0.0000313 0.0000965 0.0005866 0.0001755 seropositive
ABC034 plate1 pass 0.0000195 0.0000643 0.0000195 0.0000195 0.0000195 0.0000195 0.0000391 0.0000396 seronegative
ABC118 plate2 pass 0.0000195 0.0000591 0.0000195 0.0000195 0.0000195 0.0000195 0.0000276 0.0000372 seronegative
ABC202 plate3 pass 0.0000195 0.0000633 0.0000195 0.0000195 0.0000195 0.0000195 0.0000313 0.0000430 seronegative
ABC035 plate1 pass 0.0000621 0.0005750 0.0000869 0.0001314 0.0012803 0.0007887 0.0007034 0.0016006 seropositive
ABC119 plate2 pass 0.0000600 0.0005687 0.0000735 0.0001225 0.0012195 0.0020972 0.0007021 0.0016095 seropositive
ABC203 plate3 pass 0.0000646 0.0005798 0.0000855 0.0001262 0.0012300 0.0008669 0.0007116 0.0016533 seropositive
ABC036 plate1 pass 0.0005559 0.0045148 0.0001381 0.0136007 0.0053044 0.0200000 0.0045946 0.0042141 seropositive
ABC120 plate2 pass 0.0006289 0.0044150 0.0001281 0.0120746 0.0048849 0.0081155 0.0041982 0.0041479 seropositive
ABC204 plate3 pass 0.0006206 0.0048924 0.0001336 0.0144135 0.0052803 0.0075679 0.0046200 0.0043363 seropositive
ABC026 plate1 pass 0.0003965 0.0027887 0.0003080 0.0000742 0.0000240 0.0005894 0.0001765 0.0001341 seropositive
ABC110 plate2 pass 0.0004423 0.0027736 0.0003074 0.0000626 0.0000195 0.0006318 0.0001795 0.0001319 seropositive
ABC194 plate3 pass 0.0004370 0.0030211 0.0002985 0.0000718 0.0000255 0.0003783 0.0001754 0.0001304 seropositive
ABC027 plate1 pass 0.0001225 0.0039273 0.0001132 0.0000609 0.0001133 0.0106491 0.0103504 0.0060078 seropositive
ABC111 plate2 pass 0.0001260 0.0038638 0.0001015 0.0000487 0.0001027 0.0104750 0.0092499 0.0058289 seropositive
ABC195 plate3 pass 0.0001289 0.0042619 0.0001101 0.0000594 0.0001069 0.0074520 0.0106324 0.0060911 seropositive
ABC028 plate1 pass 0.0001585 0.0016667 0.0001399 0.0000775 0.0005192 0.0014750 0.0021348 0.0004708 seropositive
ABC112 plate2 pass 0.0001666 0.0016693 0.0001301 0.0000660 0.0004994 0.0011805 0.0020174 0.0004735 seropositive
ABC196 plate3 pass 0.0001683 0.0017797 0.0001354 0.0000748 0.0004877 0.0012294 0.0021415 0.0004676 seropositive
ABC029 plate1 pass 0.0001785 0.0011498 0.0001119 0.0000707 0.0000234 0.0001333 0.0005191 0.0002905 seropositive
ABC113 plate2 pass 0.0001893 0.0011506 0.0001002 0.0000589 0.0000195 0.0001228 0.0005246 0.0002904 seronegative
ABC197 plate3 pass 0.0001904 0.0012069 0.0001089 0.0000685 0.0000249 0.0001182 0.0005258 0.0002840 seropositive
ABC030 plate1 pass 0.0002880 0.0005575 0.0000811 0.0000589 0.0009290 0.0005578 0.0047092 0.0093008 seropositive
ABC114 plate2 pass 0.0003157 0.0005509 0.0000673 0.0000467 0.0008899 0.0058959 0.0042990 0.0088117 seropositive
ABC198 plate3 pass 0.0003132 0.0005611 0.0000801 0.0000575 0.0008846 0.0064372 0.0047368 0.0091448 seropositive
ABC031 plate1 pass 0.0001733 0.0013673 0.0001067 0.0000879 0.0007773 0.0019350 0.0024287 0.0085588 seropositive
ABC115 plate2 pass 0.0001833 0.0013696 0.0000946 0.0000769 0.0007462 0.0005900 0.0022809 0.0081501 seropositive
ABC199 plate3 pass 0.0001845 0.0014476 0.0001040 0.0000847 0.0007367 0.0049079 0.0024354 0.0084741 seropositive
ABC032 plate1 pass 0.0002394 0.0200000 0.0001362 0.0032046 0.0042219 0.0200000 0.0055468 0.0070982 seropositive
ABC116 plate2 pass 0.0002593 0.0186107 0.0001261 0.0031735 0.0039078 0.0108335 0.0050346 0.0068303 seropositive
ABC200 plate3 pass 0.0002583 0.0200000 0.0001318 0.0035905 0.0041857 0.0200000 0.0055933 0.0071250 seropositive
ABC033 plate1 pass 0.0000491 0.0002513 0.0000261 0.0000292 0.0000195 0.0000823 0.0001992 0.0000748 seronegative
ABC117 plate2 pass 0.0000463 0.0002422 0.0000195 0.0000195 0.0000195 0.0000754 0.0002035 0.0000723 seronegative
ABC201 plate3 pass 0.0000512 0.0002423 0.0000289 0.0000301 0.0000195 0.0000741 0.0001991 0.0000748 seronegative
ABC037 plate1 pass 0.0000913 0.0013446 0.0000420 0.0000565 0.0000503 0.0002643 0.0007897 0.0001276 seropositive
ABC121 plate2 pass 0.0000915 0.0013467 0.0000262 0.0000442 0.0000408 0.0001616 0.0007841 0.0001254 seronegative
ABC205 plate3 pass 0.0000953 0.0014224 0.0000437 0.0000553 0.0000495 0.0001548 0.0007983 0.0001242 seronegative
ABC046 plate1 pass 0.0002421 0.0005545 0.0000832 0.0000738 0.0004278 0.0004830 0.0012862 0.0003227 seropositive
ABC130 plate2 pass 0.0002623 0.0005479 0.0000695 0.0000622 0.0004112 0.0002307 0.0012468 0.0003230 seropositive
ABC214 plate3 pass 0.0002613 0.0005579 0.0000820 0.0000714 0.0004006 0.0005918 0.0012947 0.0003163 seropositive
ABC047 plate1 pass 0.0001510 0.0004120 0.0000450 0.0000305 0.0000195 0.0002178 0.0001801 0.0000923 seropositive
ABC131 plate2 pass 0.0001581 0.0004037 0.0000293 0.0000195 0.0000195 0.0000684 0.0001834 0.0000898 seronegative
ABC215 plate3 pass 0.0001600 0.0004073 0.0000465 0.0000313 0.0000195 0.0001315 0.0001793 0.0000910 seronegative
ABC048 plate1 pass 0.0000739 0.0010301 0.0000490 0.0000750 0.0000608 0.0005894 0.0004568 0.0005161 seropositive
ABC132 plate2 pass 0.0000726 0.0010298 0.0000334 0.0000634 0.0000510 0.0001044 0.0004637 0.0005193 seronegative
ABC216 plate3 pass 0.0000769 0.0010750 0.0000502 0.0000725 0.0000591 0.0004973 0.0004628 0.0005142 seropositive
ABC038 plate1 pass 0.0000195 0.0000508 0.0000195 0.0000195 0.0000195 0.0000195 0.0000269 0.0000217 seronegative
ABC122 plate2 pass 0.0000195 0.0000463 0.0000195 0.0000195 0.0000195 0.0000195 0.0000195 0.0000196 seronegative
ABC206 plate3 pass 0.0000195 0.0000513 0.0000195 0.0000195 0.0000195 0.0000195 0.0000195 0.0000272 seronegative
ABC039 plate1 pass 0.0001303 0.0015216 0.0001102 0.0004161 0.0002822 0.0005617 0.0002837 0.0002031 seropositive
ABC123 plate2 pass 0.0001347 0.0015243 0.0000983 0.0004203 0.0002692 0.0005078 0.0002907 0.0002016 seropositive
ABC207 plate3 pass 0.0001373 0.0016187 0.0001072 0.0004162 0.0002631 0.0009869 0.0002862 0.0001972 seropositive
ABC040 plate1 pass 0.0000765 0.0004952 0.0000766 0.0000807 0.0000270 0.0001100 0.0003781 0.0002318 seropositive
ABC124 plate2 pass 0.0000754 0.0004878 0.0000625 0.0000694 0.0000195 0.0002076 0.0003858 0.0002308 seropositive
ABC208 plate3 pass 0.0000797 0.0004948 0.0000758 0.0000779 0.0000282 0.0001436 0.0003827 0.0002255 seronegative
ABC041 plate1 pass 0.0001206 0.0003185 0.0000584 0.0000396 0.0000201 0.0001112 0.0001956 0.0002412 seronegative
ABC125 plate2 pass 0.0001239 0.0003095 0.0000432 0.0000270 0.0000195 0.0000850 0.0001997 0.0002403 seronegative
ABC209 plate3 pass 0.0001268 0.0003105 0.0000589 0.0000397 0.0000218 0.0001053 0.0001953 0.0002348 seronegative
ABC042 plate1 pass 0.0003817 0.0061955 0.0000940 0.0000956 0.0000413 0.0011964 0.0015072 0.0012159 seropositive
ABC126 plate2 pass 0.0004249 0.0059530 0.0000810 0.0000849 0.0000322 0.0012398 0.0014493 0.0012254 seropositive
ABC210 plate3 pass 0.0004200 0.0066577 0.0000921 0.0000919 0.0000413 0.0003908 0.0015152 0.0012481 seropositive
ABC043 plate1 pass 0.0001105 0.0003948 0.0000464 0.0000571 0.0000237 0.0004852 0.0012942 0.0003878 seropositive
ABC127 plate2 pass 0.0001126 0.0003863 0.0000308 0.0000448 0.0000195 0.0002608 0.0012542 0.0003892 seropositive
ABC211 plate3 pass 0.0001159 0.0003893 0.0000478 0.0000558 0.0000252 0.0002220 0.0013027 0.0003825 seropositive
ABC044 plate1 pass 0.0001621 0.0027318 0.0001337 0.0023109 0.0011158 0.0044126 0.0005149 0.0056841 seropositive
ABC128 plate2 pass 0.0001707 0.0027183 0.0001235 0.0023171 0.0010656 0.0046875 0.0005205 0.0055288 seropositive
ABC212 plate3 pass 0.0001722 0.0029585 0.0001295 0.0025618 0.0010678 0.0051104 0.0005216 0.0057795 seropositive
ABC045 plate1 pass 0.0051640 0.0008022 0.0001124 0.0000711 0.0002263 0.0005911 0.0003844 0.0003247 seropositive
ABC129 plate2 pass 0.0053458 0.0007990 0.0001007 0.0000593 0.0002143 0.0003546 0.0003921 0.0003251 seropositive
ABC213 plate3 pass 0.0056594 0.0008252 0.0001093 0.0000689 0.0002110 0.0003253 0.0003892 0.0003184 seropositive
ABC049 plate1 pass 0.0001152 0.0005908 0.0001234 0.0050175 0.0006990 0.0038303 0.0014107 0.0094279 seropositive
ABC133 plate2 pass 0.0001178 0.0005847 0.0001124 0.0048535 0.0006717 0.0041471 0.0013611 0.0089245 seropositive
ABC217 plate3 pass 0.0001210 0.0005967 0.0001197 0.0056405 0.0006608 0.0045122 0.0014189 0.0092588 seropositive
ABC058 plate1 pass 0.0003117 0.0023967 0.0004721 0.0001181 0.0039125 0.0200000 0.0033830 0.0200000 seropositive
ABC142 plate2 pass 0.0003432 0.0023913 0.0004767 0.0001085 0.0036279 0.0129060 0.0031296 0.0200000 seropositive
ABC226 plate3 pass 0.0003401 0.0025890 0.0004631 0.0001134 0.0038727 0.0137702 0.0033933 0.0200000 seropositive
ABC059 plate1 pass 0.0001674 0.0047321 0.0011415 0.0000559 0.0000570 0.0038742 0.0159341 0.0028020 seropositive
ABC143 plate2 pass 0.0001767 0.0046170 0.0011443 0.0000436 0.0000472 0.0016835 0.0141915 0.0027910 seropositive
ABC227 plate3 pass 0.0001781 0.0051239 0.0011638 0.0000547 0.0000556 0.0005000 0.0167561 0.0029046 seropositive
ABC060 plate1 pass 0.0002714 0.0017419 0.0002431 0.0002202 0.0000369 0.0004455 0.0003912 0.0001702 seropositive
ABC144 plate2 pass 0.0002963 0.0017442 0.0002394 0.0002158 0.0000280 0.0002076 0.0003988 0.0001683 seropositive
ABC228 plate3 pass 0.0002944 0.0018632 0.0002347 0.0002138 0.0000373 0.0002719 0.0003960 0.0001651 seropositive
ABC050 plate1 pass 0.0001814 0.0098546 0.0001462 0.0000561 0.0000425 0.0011679 0.0018459 0.0014489 seropositive
ABC134 plate2 pass 0.0001926 0.0091295 0.0001367 0.0000438 0.0000333 0.0002261 0.0017570 0.0014584 seropositive
ABC218 plate3 pass 0.0001935 0.0103116 0.0001413 0.0000549 0.0000424 0.0014854 0.0018531 0.0014936 seropositive
ABC051 plate1 pass 0.0001659 0.0003439 0.0000540 0.0000637 0.0000273 0.0003231 0.0018737 0.0002268 seropositive
ABC135 plate2 pass 0.0001749 0.0003351 0.0000386 0.0000516 0.0000195 0.0001528 0.0017821 0.0002257 seropositive
ABC219 plate3 pass 0.0001763 0.0003366 0.0000549 0.0000619 0.0000285 0.0001996 0.0018809 0.0002206 seropositive
ABC052 plate1 pass 0.0000906 0.0003681 0.0001310 0.0000400 0.0000429 0.0001533 0.0002824 0.0001903 seronegative
ABC136 plate2 pass 0.0000908 0.0003594 0.0001206 0.0000274 0.0000337 0.0001663 0.0002893 0.0001887 seronegative
ABC220 plate3 pass 0.0000947 0.0003616 0.0001269 0.0000401 0.0000428 0.0001593 0.0002848 0.0001847 seronegative
ABC053 plate1 pass 0.0002728 0.0017437 0.0001452 0.0000738 0.0001461 0.0005438 0.0006262 0.0019413 seropositive
ABC137 plate2 pass 0.0002979 0.0017461 0.0001358 0.0000622 0.0001351 0.0004619 0.0006282 0.0019473 seropositive
ABC221 plate3 pass 0.0002959 0.0018652 0.0001404 0.0000714 0.0001369 0.0010050 0.0006339 0.0020108 seropositive
ABC054 plate1 pass 0.0001426 0.0016730 0.0000651 0.0045446 0.0090314 0.0200000 0.0013555 0.0011122 seropositive
ABC138 plate2 pass 0.0001486 0.0016756 0.0000503 0.0044219 0.0082439 0.0200000 0.0013105 0.0011213 seropositive
ABC222 plate3 pass 0.0001508 0.0017867 0.0000652 0.0051118 0.0090345 0.0200000 0.0013639 0.0011388 seropositive
ABC055 plate1 pass 0.0020987 0.0011666 0.0006138 0.0000918 0.0016241 0.0014342 0.0051931 0.0022534 seropositive
ABC139 plate2 pass 0.0023603 0.0011675 0.0006207 0.0000810 0.0015390 0.0031830 0.0047242 0.0022548 seropositive
ABC223 plate3 pass 0.0023881 0.0012254 0.0006082 0.0000884 0.0015710 0.0034396 0.0052308 0.0023366 seropositive
ABC056 plate1 pass 0.0200000 0.0200000 0.0006379 0.0070025 0.0028312 0.0200000 0.0045893 0.0033727 seropositive
ABC140 plate2 pass 0.0200000 0.0200000 0.0006450 0.0066197 0.0026465 0.0200000 0.0041936 0.0033433 seropositive
ABC224 plate3 pass 0.0200000 0.0200000 0.0006331 0.0078070 0.0027812 0.0176802 0.0046146 0.0034887 seropositive
ABC057 plate1 pass 0.0001913 0.0200000 0.0001245 0.0000950 0.0001541 0.0200000 0.0088615 0.0013704 seropositive
ABC141 plate2 pass 0.0002039 0.0200000 0.0001136 0.0000843 0.0001431 0.0192940 0.0079416 0.0013801 seropositive
ABC225 plate3 pass 0.0002045 0.0200000 0.0001207 0.0000914 0.0001443 0.0151456 0.0090475 0.0014110 seropositive
ABC061 plate1 pass 0.0002975 0.0113461 0.0001672 0.0000792 0.0003708 0.0200000 0.0200000 0.0128639 seropositive
ABC145 plate2 pass 0.0003267 0.0103665 0.0001592 0.0000678 0.0003558 0.0074739 0.0196656 0.0119146 seropositive
ABC229 plate3 pass 0.0003240 0.0117330 0.0001614 0.0000765 0.0003466 0.0057903 0.0200000 0.0122411 seropositive
ABC070 plate1 pass 0.0005434 0.0182268 0.0001544 0.0165401 0.0130777 0.0200000 0.0058159 0.0053387 seropositive
ABC154 plate2 pass 0.0006142 0.0157263 0.0001455 0.0143419 0.0119087 0.0200000 0.0052708 0.0052070 seropositive
ABC238 plate3 pass 0.0006061 0.0178640 0.0001491 0.0170964 0.0130628 0.0067501 0.0058699 0.0054445 seropositive
ABC071 plate1 pass 0.0000875 0.0014839 0.0000585 0.0000545 0.0000463 0.0001220 0.0006336 0.0001629 seronegative
ABC155 plate2 pass 0.0000873 0.0014865 0.0000434 0.0000421 0.0000369 0.0001120 0.0006353 0.0001610 seropositive
ABC239 plate3 pass 0.0000913 0.0015769 0.0000590 0.0000534 0.0000458 0.0001080 0.0006414 0.0001580 seronegative
ABC072 plate1 pass 0.0001588 0.0038297 0.0001296 0.0013424 0.0028364 0.0145342 0.0037835 0.0026962 seropositive
ABC156 plate2 pass 0.0001669 0.0037715 0.0001191 0.0013636 0.0026512 0.0016456 0.0034836 0.0026880 seropositive
ABC240 plate3 pass 0.0001686 0.0041565 0.0001256 0.0014467 0.0027864 0.0029278 0.0037974 0.0027956 seropositive
ABC062 plate1 pass 0.0002458 0.0017337 0.0001536 0.0000903 0.0059064 0.0050893 0.0038331 0.0007896 seropositive
ABC146 plate2 pass 0.0002667 0.0017361 0.0001447 0.0000794 0.0054275 0.0034437 0.0035274 0.0007964 seropositive
ABC230 plate3 pass 0.0002655 0.0018541 0.0001484 0.0000870 0.0058888 0.0188942 0.0038475 0.0007994 seropositive
ABC063 plate1 pass 0.0001341 0.0008985 0.0002953 0.0000581 0.0000240 0.0001383 0.0019997 0.0010737 seropositive
ABC147 plate2 pass 0.0001390 0.0008966 0.0002941 0.0000459 0.0000195 0.0001277 0.0018959 0.0010827 seropositive
ABC231 plate3 pass 0.0001415 0.0009305 0.0002859 0.0000568 0.0000255 0.0001228 0.0020067 0.0010982 seropositive
ABC064 plate1 pass 0.0003348 0.0005818 0.0001199 0.0000826 0.0034099 0.0200000 0.0057520 0.0200000 seropositive
ABC148 plate2 pass 0.0003702 0.0005756 0.0001087 0.0000713 0.0031725 0.0005155 0.0052146 0.0200000 seropositive
ABC232 plate3 pass 0.0003664 0.0005871 0.0001164 0.0000797 0.0033650 0.0143496 0.0058041 0.0200000 seropositive
ABC065 plate1 pass 0.0002917 0.0021289 0.0002089 0.0001525 0.0035616 0.0200000 0.0066384 0.0200000 seropositive
ABC149 plate2 pass 0.0003199 0.0021279 0.0002034 0.0001447 0.0033101 0.0124392 0.0059919 0.0200000 seropositive
ABC233 plate3 pass 0.0003173 0.0022926 0.0002015 0.0001468 0.0035181 0.0050142 0.0067194 0.0200000 seropositive
ABC066 plate1 pass 0.0003899 0.0200000 0.0004239 0.0052792 0.0062343 0.0200000 0.0053968 0.0092407 seropositive
ABC150 plate2 pass 0.0004345 0.0200000 0.0004274 0.0050904 0.0057228 0.0200000 0.0049030 0.0087583 seropositive
ABC234 plate3 pass 0.0004294 0.0200000 0.0004144 0.0059310 0.0062199 0.0122844 0.0054394 0.0090909 seropositive
ABC067 plate1 pass 0.0001446 0.0003815 0.0000609 0.0000467 0.0000195 0.0002600 0.0005818 0.0004287 seropositive
ABC151 plate2 pass 0.0001509 0.0003729 0.0000458 0.0000342 0.0000195 0.0003227 0.0005854 0.0004307 seropositive
ABC235 plate3 pass 0.0001530 0.0003755 0.0000612 0.0000462 0.0000198 0.0003124 0.0005891 0.0004243 seropositive
ABC068 plate1 pass 0.0000601 0.0002882 0.0008196 0.0000469 0.0000195 0.0001680 0.0006036 0.0005287 seropositive
ABC152 plate2 pass 0.0000578 0.0002791 0.0008269 0.0000344 0.0000195 0.0002602 0.0006064 0.0005321 seropositive
ABC236 plate3 pass 0.0000625 0.0002796 0.0008226 0.0000464 0.0000195 0.0002504 0.0006111 0.0005273 seropositive
ABC069 plate1 pass 0.0001464 0.0006834 0.0001324 0.0007346 0.0041172 0.0200000 0.0116240 0.0086279 seropositive
ABC153 plate2 pass 0.0001528 0.0006785 0.0001221 0.0007488 0.0038132 0.0143344 0.0103716 0.0082119 seropositive
ABC237 plate3 pass 0.0001549 0.0006963 0.0001283 0.0007615 0.0040798 0.0083445 0.0120045 0.0085370 seropositive
ABC073 plate1 pass 0.0002081 0.0028578 0.0001660 0.0085405 0.0007000 0.0062476 0.0003336 0.0011928 seropositive
ABC157 plate2 pass 0.0002232 0.0028407 0.0001579 0.0079437 0.0006727 0.0004457 0.0003412 0.0012023 seropositive
ABC241 plate3 pass 0.0002233 0.0030971 0.0001602 0.0094265 0.0006617 0.0018792 0.0003373 0.0012238 seropositive
ABC082 plate1 pass 0.0000625 0.0006422 0.0000468 0.0000834 0.0000408 0.0002136 0.0002772 0.0003170 seropositive
ABC166 plate2 pass 0.0000603 0.0006368 0.0000311 0.0000721 0.0000317 0.0001693 0.0002840 0.0003173 seropositive
ABC250 plate3 pass 0.0000650 0.0006519 0.0000481 0.0000804 0.0000409 0.0001077 0.0002795 0.0003106 seronegative
ABC083 plate1 pass 0.0000665 0.0002855 0.0000714 0.0017209 0.0007687 0.0017113 0.0006385 0.0025842 seropositive
ABC167 plate2 pass 0.0000647 0.0002764 0.0000569 0.0017398 0.0007381 0.0019436 0.0006400 0.0025787 seropositive
ABC251 plate3 pass 0.0000692 0.0002768 0.0000710 0.0018811 0.0007284 0.0003513 0.0006463 0.0026798 seropositive
ABC084 plate1 pass 0.0000892 0.0039618 0.0000860 0.0000429 0.0000207 0.0005499 0.0008325 0.0007108 seropositive
ABC168 plate2 pass 0.0000892 0.0038964 0.0000724 0.0000304 0.0000195 0.0003840 0.0008245 0.0007167 seropositive
ABC252 plate3 pass 0.0000931 0.0042992 0.0000846 0.0000428 0.0000223 0.0002914 0.0008412 0.0007169 seropositive
ABC074 plate1 pass 0.0000872 0.0005438 0.0002240 0.0000613 0.0000240 0.0001853 0.0017861 0.0014202 seropositive
ABC158 plate2 pass 0.0000870 0.0005370 0.0002193 0.0000492 0.0000195 0.0005677 0.0017029 0.0014297 seropositive
ABC242 plate3 pass 0.0000909 0.0005465 0.0002161 0.0000597 0.0000255 0.0007772 0.0017935 0.0014634 seropositive
ABC075 plate1 pass 0.0004190 0.0010139 0.0001268 0.0000660 0.0000502 0.0005460 0.0013278 0.0016625 seropositive
ABC159 plate2 pass 0.0004686 0.0010134 0.0001161 0.0000541 0.0000407 0.0002542 0.0012851 0.0016711 seropositive
ABC243 plate3 pass 0.0004628 0.0010572 0.0001230 0.0000641 0.0000494 0.0007663 0.0013362 0.0017184 seropositive
ABC076 plate1 pass 0.0001546 0.0076371 0.0000821 0.0000742 0.0000541 0.0083312 0.0014197 0.0010795 seropositive
ABC160 plate2 pass 0.0001622 0.0072305 0.0000683 0.0000626 0.0000444 0.0005094 0.0013693 0.0010884 seropositive
ABC244 plate3 pass 0.0001640 0.0081271 0.0000810 0.0000718 0.0000529 0.0011934 0.0014279 0.0011043 seropositive
ABC077 plate1 pass 0.0001138 0.0005963 0.0000684 0.0000524 0.0000818 0.0004224 0.0017617 0.0021119 seropositive
ABC161 plate2 pass 0.0001163 0.0005903 0.0000538 0.0000401 0.0000715 0.0001649 0.0016808 0.0021156 seropositive
ABC245 plate3 pass 0.0001195 0.0006026 0.0000682 0.0000515 0.0000781 0.0001075 0.0017691 0.0021891 seropositive
ABC078 plate1 pass 0.0003380 0.0200000 0.0002190 0.0064802 0.0090958 0.0200000 0.0031913 0.0144542 seropositive
ABC162 plate2 pass 0.0003739 0.0200000 0.0002141 0.0061616 0.0083020 0.0200000 0.0029598 0.0132637 seropositive
ABC246 plate3 pass 0.0003701 0.0200000 0.0002113 0.0072453 0.0090991 0.0026367 0.0032003 0.0135633 seropositive
ABC079 plate1 pass 0.0066003 0.0007553 0.0000876 0.0000799 0.0006687 0.0023751 0.0005282 0.0003206 seropositive
ABC163 plate2 pass 0.0065838 0.0007514 0.0000742 0.0000686 0.0006428 0.0002533 0.0005334 0.0003209 seropositive
ABC247 plate3 pass 0.0070873 0.0007742 0.0000861 0.0000772 0.0006315 0.0005818 0.0005350 0.0003143 seropositive
ABC080 plate1 pass 0.0002326 0.0007574 0.0001062 0.0001170 0.0039092 0.0132567 0.0027014 0.0007149 seropositive
ABC164 plate2 pass 0.0002514 0.0007536 0.0000941 0.0001074 0.0036249 0.0004260 0.0025244 0.0007208 seropositive
ABC248 plate3 pass 0.0002507 0.0007765 0.0001035 0.0001124 0.0038694 0.0004817 0.0027085 0.0007211 seropositive
ABC081 plate1 pass 0.0002269 0.0011267 0.0001016 0.0001039 0.0000288 0.0003823 0.0003663 0.0001803 seropositive
ABC165 plate2 pass 0.0002448 0.0011273 0.0000892 0.0000936 0.0000205 0.0004457 0.0003740 0.0001786 seropositive
ABC249 plate3 pass 0.0002443 0.0011814 0.0000992 0.0000998 0.0000299 0.0000975 0.0003707 0.0001749 seronegative
ABC085 plate1 pass 0.0001580 0.0002036 0.0000378 0.0000573 0.0000201 0.0008026 0.0014748 0.0001543 seropositive
ABC169 plate2 pass 0.0001659 0.0001947 0.0000220 0.0000450 0.0000195 0.0004494 0.0014197 0.0001523 seropositive
ABC253 plate3 pass 0.0001676 0.0001949 0.0000398 0.0000560 0.0000218 0.0002034 0.0014829 0.0001497 seropositive
ABC094 plate1 pass 0.0002221 0.0018647 0.0002542 0.0000723 0.0000201 0.0005332 0.0002501 0.0000980 seropositive
ABC178 plate2 pass 0.0002393 0.0018664 0.0002511 0.0000605 0.0000195 0.0005059 0.0002562 0.0000955 seropositive
ABC262 plate3 pass 0.0002389 0.0019995 0.0002455 0.0000700 0.0000218 0.0002066 0.0002516 0.0000963 seropositive
ABC095 plate1 pass 0.0001120 0.0050089 0.0000905 0.0000475 0.0001849 0.0127660 0.0104244 0.0056052 seropositive
ABC179 plate2 pass 0.0001143 0.0048730 0.0000772 0.0000350 0.0001735 0.0056178 0.0093150 0.0054555 seropositive
ABC263 plate3 pass 0.0001175 0.0054174 0.0000888 0.0000470 0.0001727 0.0017492 0.0107118 0.0057032 seropositive
ABC096 plate1 pass 0.0001252 0.0009664 0.0000889 0.0000450 0.0028297 0.0006545 0.0015762 0.0003976 seropositive
ABC180 plate2 pass 0.0001290 0.0009653 0.0000755 0.0000325 0.0026450 0.0017733 0.0015123 0.0003991 seropositive
ABC264 plate3 pass 0.0001318 0.0010049 0.0000873 0.0000447 0.0027796 0.0009318 0.0015840 0.0003925 seropositive
ABC086 plate1 pass 0.0000611 0.0003322 0.0000810 0.0000301 0.0000230 0.0001417 0.0002492 0.0001302 seropositive
ABC170 plate2 pass 0.0000589 0.0003232 0.0000671 0.0000195 0.0000195 0.0001310 0.0002553 0.0001280 seronegative
ABC254 plate3 pass 0.0000636 0.0003245 0.0000799 0.0000309 0.0000245 0.0001258 0.0002507 0.0001267 seropositive
ABC087 plate1 pass 0.0000993 0.0015983 0.0001374 0.0000340 0.0001356 0.0004304 0.0003229 0.0007758 seropositive
ABC171 plate2 pass 0.0001002 0.0016010 0.0001274 0.0000214 0.0001247 0.0002020 0.0003304 0.0007824 seronegative
ABC255 plate3 pass 0.0001038 0.0017038 0.0001330 0.0000345 0.0001273 0.0002727 0.0003263 0.0007849 seropositive
ABC088 plate1 pass 0.0000954 0.0009664 0.0000501 0.0031836 0.0076618 0.0162981 0.0007047 0.0005235 seropositive
ABC172 plate2 pass 0.0000959 0.0009653 0.0000346 0.0031536 0.0070089 0.0122238 0.0007033 0.0005269 seropositive
ABC256 plate3 pass 0.0000997 0.0010049 0.0000513 0.0035665 0.0076590 0.0130842 0.0007129 0.0005220 seropositive
ABC089 plate1 pass 0.0010039 0.0003815 0.0001552 0.0000438 0.0006923 0.0011796 0.0013006 0.0012310 seropositive
ABC173 plate2 pass 0.0011483 0.0003729 0.0001463 0.0000312 0.0006653 0.0012405 0.0012601 0.0012405 seropositive
ABC257 plate3 pass 0.0011392 0.0003755 0.0001499 0.0000435 0.0006543 0.0016700 0.0013091 0.0012640 seropositive
ABC090 plate1 pass 0.0200000 0.0200000 0.0006473 0.0048386 0.0020459 0.0200000 0.0039987 0.0029553 seropositive
ABC174 plate2 pass 0.0200000 0.0200000 0.0006544 0.0046908 0.0019280 0.0191706 0.0036735 0.0029399 seropositive
ABC258 plate3 pass 0.0200000 0.0200000 0.0006428 0.0054411 0.0019921 0.0200000 0.0040151 0.0030622 seropositive
ABC091 plate1 pass 0.0001335 0.0141030 0.0000733 0.0000575 0.0000950 0.0020525 0.0043372 0.0010675 seropositive
ABC175 plate2 pass 0.0001383 0.0125777 0.0000590 0.0000452 0.0000846 0.0095263 0.0039717 0.0010764 seropositive
ABC259 plate3 pass 0.0001409 0.0142686 0.0000728 0.0000562 0.0000902 0.0022043 0.0043583 0.0010917 seropositive
ABC092 plate1 pass 0.0002774 0.0016676 0.0002548 0.0000734 0.0021836 0.0012417 0.0011169 0.0074226 seropositive
ABC176 plate2 pass 0.0003032 0.0016702 0.0002517 0.0000618 0.0020544 0.0061144 0.0010904 0.0071256 seropositive
ABC260 plate3 pass 0.0003011 0.0017807 0.0002461 0.0000711 0.0021301 0.0003998 0.0011257 0.0074281 seropositive
ABC093 plate1 pass 0.0001120 0.0017916 0.0006236 0.0000471 0.0000570 0.0014923 0.0080006 0.0016270 seropositive
ABC177 plate2 pass 0.0001143 0.0017938 0.0006306 0.0000346 0.0000472 0.0008549 0.0071862 0.0016358 seropositive
ABC261 plate3 pass 0.0001175 0.0019184 0.0006183 0.0000466 0.0000556 0.0017808 0.0081404 0.0016810 seropositive

You can visualise these results using the ggplot2 R package, loaded previously when we ran the library(tidyverse) line.

classifyResults_output %>%
  pivot_longer(
    -c(SampleID, Plate, QC_total, pred_class_max),
    names_to = "Antigen",
    values_to = "RAU"
  )  %>%
  ggplot(aes(x = pred_class_max, y = RAU, fill = pred_class_max)) +
  geom_boxplot() +
  scale_y_log10() +
  scale_fill_manual(values = c(seronegative = "#878787", seropositive = "#d6604d")) +
  labs(
    x = "Classification",
    y = "RAU",
    fill = "Classification"
  ) +
  facet_grid(~Antigen) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

You can also visualise the classification results across multiple sensitivity/specificity thresholds using the plotBoxPlotClassification() function. From here you can choose a specific threshold to visualise.

# Sensitivity/specificity thresholds of interest
sens_spec_all <- c("balanced", "90% specificity")

# Classify results across all thresholds
all_classifications <- purrr::map_dfr(sens_spec_all, ~{
   classifyResults(
     mfi_to_rau_output = mfi_to_rau_output,
     algorithm_type = "antibody_model",
     sens_spec = .x,
     qc_results = qc_results
   ) |>
   as.data.frame() |>
   dplyr::mutate(sens_spec = .x)
 })

# Plot classification for a single threshold
plotBoxPlotClassification(all_classifications, "balanced")

Here are the results of all classification thresholds explored in the PvSeroApp: balanced and 90% specificity. The N’s for the random forest model classifications based on these classifications are displayed.

7.5 Customisations

For more customisations on how to manipulate your ggplot2 see the manual here or the book (Wickham 2016).