CITE THIS NOTEBOOK: Low dimensionality to visualize the antibody–virus landscape for influenza by Tal Einav. Wolfram Community JAN 4 2023.
ORIGINAL ARTICLE: Einav, T., Creanga, A., Andrews, S.F. et al. Harnessing low dimensionality to visualize the antibody–virus landscape for influenza. NATURE Computational Science (2022). https://doi.org/10.1038/s43588-022-00375-1.
Article Abstract: Antibodies constitute a key line of defense against the diverse pathogens we encounter in our lives. Although the interactions between a single antibody and a single virus are routinely characterized in exquisite detail, the inherent tradeoffs between attributes such as potency and breadth remain unclear. Moreover, there is a wide gap between the discrete interactions of single antibodies and the collective behavior of antibody mixtures. Here we develop a form of antigenic cartography called a ‘neutralization landscape’ that visualizes and quantifies antibody–virus interactions for antibodies targeting the influenza hemagglutinin stem. This landscape transforms the potency–breadth tradeoff into a readily solvable geometry problem. With it, we decompose the collective neutralization from multiple antibodies to characterize the composition and functional properties of the stem antibodies within. Looking forward, this framework can leverage the serological assays routinely performed for influenza surveillance to analyze how an individual’s antibody repertoire evolves after vaccination or infection.
The following code reproduces the plots in the main text. Made on Mathematica version 13.0.0 for Windows. Sections can be opened by mouse click.
Raw data can be found in these initialization sections.

Figures

Figure 1: Neutralization Landscape for the HA Stem

Constructing the Neutralization Landscape using monoclonal antibody neutralization data against a panel of influenza viruses.

Panel C: Neutralization Landscape

We use multidimensional scaling (MDS) to compute positions of antibodies and viruses, where an antibody-virus distance
d
corresponds to the 50% inhibitory concentration
IC
50
=
-10+d
10
Molar
. In the landscape below, placing the mouse above a virus or antibody will display its name.
The error at the bottom-right of the landscape shows the fold-error between the predicted
IC
50
(on the landscape) and measured
IC
50
for all antibody-virus pairs. We define
fold-error=
Max[Predicted
IC
50
,Measured
IC
50
]
Min[Predicted
IC
50
,Measured
IC
50
]
(so that
fold-error≥1
for each antibody-virus interactions) and average over all antibody-virus pairs with available measurements.
Some measurements lie outside the dynamic range of the experiment (
IC
50
>
max
IC
50
where
max
IC
50
=1.6·
-7
10
Molar=25
μg
mL
). When both the
Measured
IC
50
>
max
IC
50
and
Predicted
IC
50
>
max
IC
50
(i.e. the lower bound is satisfied), we exclude this measurement from the average fold-error to prevent artificially deflating the error. When the
Measured
IC
50
>
max
IC
50
but
Predicted
IC
50
<
max
IC
50
, we define the fold-error as
max
IC
50
Predicted
IC
50
.
In[]:=
createLandscape{coordsVirusStem,coordsAbStem},"Tooltip"True,"ErrorLabel""〈Error〉=","ErrorValue"landscapeError,"LabelColor"->

Out[]=

Panel D: Examples for an Antibody and Virus

A deeper look into how one virus (H1N1 A/Michigan/45/2015) and one antibody (315-23-1C09) are positioned on the map. Each
IC
50
measurement is represented by a red circle with radius
r=
log
10
IC
50
-10
10
Molar
, and an antibody or virus must lie as close to all of these circles as possible. For clarity, we only show a small number of the measurements used to constrain their positions.
In[]:=
Block{extraViruses={},virusOfInterest,antibodyOfInterest,coords,showEntries},​​(*Emphasizeavirusorantibody*)​​If[MemberQ[labelVirus,#],​​{virusOfInterest,antibodyOfInterest,coords}={#,None,coordsAbStem},​​{virusOfInterest,antibodyOfInterest,coords}={None,#,coordsVirusStem}​​];​​Show​​(*Showallentriesonlandscapewithsmallopacity*)​​createLandscape[{coordsVirusStem,coordsAbStem},"MarkerVirusOpacity"0.02,"MarkerAbOpacity"0.1],​​(*Entrieswhose
IC
50
sareshownasredcircles*)​​showEntries=CasesReplaceIf[virusOfInterest=!=None,Table[{antibody,data[virusOfInterest,antibody]},{antibody,labelAbStem}],Table[{virus,data[virus,antibodyOfInterest]},{virus,labelVirus}]],val:(_Real|_Integer):>Log10,
val
-10
10
,{2},{Switch[#,​​"H1N1 A/Michigan/45/2015","315-02-1H01"|"315-53-1A09"|"CR6261"|"CR9114"|"55-1D06",​​"315-23-1C09","H1N1 A/Weiss/1943"|"H1N1 A/USSR/90/1977"|"H1N1 A/Beijing/262/1995"|"H1N1 A/California/07/2009"|"H1N1 A/Michigan/45/2015"|"H3N2 A/Colorado/2/1986"|"H3N2 A/Sichuan/2/1987"|"H3N2 A/Brisbane/10/2007"|"H3N2 A/Victoria/361/2011"|"H3N2 A/Singapore/INFIMH-160019/2016"],_};​​Graphics[{Opacity[0.3],{{Lighter[colorAbDecomposition,0.6],Thickness[0.0225],Circle[coords@#[[1]],#[[2]]]},{colorAbDecomposition,Thickness[0.0075],Circle[coords@#[[1]],#[[2]]]}}&/@showEntries}],createLandscape[If[virusOfInterest=!=None,{Association[],KeySelect[coordsAbStem,MatchQ[#,Alternatives@@First/@showEntries]&]},{KeySelect[coordsVirusStem,MatchQ[#,Alternatives@@Join[First/@showEntries,extraViruses]]&],Association[]}],"Tooltip"True],​​(*Antibodyorvirusofinterest*)​​If[virusOfInterest=!=None,ListPlot[{coordsVirusStem@virusOfInterest},PlotMarkersmarkerVirus[0.13,"OpacityFaceFormFactor"1],PlotStyleplotStyleVirus@virusOfInterest],ListPlot[{coordsAbStem@antibodyOfInterest},PlotMarkersmarkerAb[0.13],PlotStylecolorAbInMixture]],FrameTicksStyle22​​&/@{"H1N1 A/Michigan/45/2015","315-23-1C09"}
Out[]=

,


Figure 2: Quantifying the Spectrum of mAb Behavior

Once the positions of antibodies or viruses are determined on the landscape, additional entries can be rapidly added by using a few measurements to triangulate their coordinates and then predict their behavior against all other mapped entries. Currently, this implies that 6 antibody measurements can provide ~45 predictions; as the number of antibodies and viruses on the landscape grows, this predictive power will grow correspondingly.
In[]:=
resLeaveOneOutAntibody=
Leave-One-Out: Antibody MDS
;​​resLeaveMultiOutAntibody=
Leave-Multi-Out: Antibody MDS
;​​resLeaveOneOutVirus=
Leave-One-Out: Virus MDS
;​​resLeaveMultiOutVirus=
Leave-Multi-Out: Virus MDS
;

Canned: Leave-One-Out Analysis


Panel A: Example of Triangulation

To test the predictive power of a new antibody not used for the MDS, we withhold one antibody from our dataset and recreate the landscape. On the new landscape, we triangulate the antibody using 6 neutralization measurements, and then predict the remaining 45 measurements.
◼
  • For visualization purposes, all landscapes are oriented as closely as possible to the Neutralization Landscape in Figure 1C (using translations, rotations, and reflections).
  • In[]:=
    Block{coordsVirus,coordsAb,​​(*Antibodytowithhold*)​​leftOutAb="315-23-1C09",​​(*Virusesusedtotriangulatethewithheldantibody*)​​virusSubset={"H3N2 A/Brisbane/10/2007","H3N2 A/Sichuan/2/1987","H3N2 A/Colorado/2/1986","H1N1 A/Weiss/1943","H1N1 A/Michigan/45/2015","H1N1 A/Beijing/262/1995"},boxSize={0.37,0.42},plotRange=2.2{{-1,1},{-1,1}},frameTicksStyle=20},​​(*MDSresultsafterwithholdingantibody*)​​{coordsVirus,coordsAb}=resLeaveOneOutAntibody[leftOutAb];​​(*Showtheoriginallandscapewiththewithheldantibodyboxed*)​​mapA=ShowcreateLandscape[{coordsVirusStem,Delete[coordsAbStem,Key[leftOutAb]]},"MarkerVirusSize"0.13,"MarkerVirusOpacity"1],GraphicsEdgeFormThickness[0.012],
    ,FaceForm
    ,Rectangle[coordsAbStem@leftOutAb-boxSize,coordsAbStem@leftOutAb+boxSize],ListPlot[{coordsAbStem@leftOutAb},PlotMarkersmarkerAb[0.15],PlotStylecolorAbInMixture],PlotRangeplotRange,FrameTicksStyleframeTicksStyle;​​(*Onthenewlandscape,triangulatethewithheldantibodyusing6measurements*)​​mapB=Show[triangulate[virusSubset,leftOutAb,{coordsVirus,coordsAb},"ShowMap"True]/.{​​(*Redcircles*)Opacity[0.8]Opacity[0.5]​​},PlotRangeplotRange,FrameTicksStyleframeTicksStyle];​​(*Wecannowpredicttheantibody'sinteractionwiththeremaining45viruses*)​​mapC=Show[createLandscape[{coordsVirus,coordsAb},"MarkerVirusSize"0.13,"MarkerVirusOpacity"1,"MarkerAbOpacity"0.05],ListPlot[{newCoord},PlotMarkersmarkerAb[0.15],PlotStylecolorAbDecomposition],PlotRangeplotRange,FrameTicksStyleframeTicksStyle];​​(*Plotting*)​​Grid[{{mapA,mapB,mapC}}]​​

    Panel B: Summary Statistics for Ab Triangulation

    This algorithm was carried out for all 27 stem antibodies, predicting 623 antibody-virus neutralization measurements.

    Figure 4: Head+Stem Antibody Mixtures

    By defining the range of all possible stem antibody behavior, we can also detect and computationally remove any non-stem behavior. In particular, we can create antibody mixtures containing both HA head and HA stem antibodies, and use their collective neutralization to characterize just the stem antibody within.

    Panel C: Removing Head Neutralization

    The right panel shows what happens when we computationally remove the head neutralization signal. The neutralization from all the blue H3N2 viruses are now given as lower bounds, since we correctly detected that the head antibody was causing their neutralization patterns. As a result, we can now predict the behavior of the stem antibody (red) and compare it to the true location of the stem antibody (gray, inferred from this antibody’s individual neutralization measurements that we did not access during the decomposition).
    ◼
  • We remove the head neutralization using measurements against the full H1N1 and H3N2 panel. For simplicity, we just show the resulting changes to a subset of viruses. (If we only considered this subset of measurements when removing the head neutralization, the results would have been slightly different, since we would not have as many virus pairs to constrain the neutralization measurements.)
  • Panel D: Two More Example Decompositions

    We apply this decomposition to two additional mixtures containing (1 head + 1 stem, mixture #1) or (2 head + 1 stem, mixture #12).

    Figure 5: Stem+Stem Antibody Mixtures

    Using the positions of each virus [Figure 1C], we can take a mixture’s neutralization data and infer the number of stem antibodies within as well as their stoichiometry and individual neutralization properties (i.e. their locations on these maps). We call this process a decomposition, since it takes the net neutralization of multiple antibodies and teases apart their individual behavior. We visualize the results by drawing the locations of the actual antibodies in the mixture in gray and the predicted antibodies from the decomposition in red.

    Panel B: Predicted vs Measured Mixture IC50

    We test how well the neutralization of each individual antibody predicts the combined neutralization of a mixture. We assume a competitive binding model, where all antibodies inhibit one another’s binding (i.e. no two antibodies can be simultaneously bound).

    Panel C: Mixtures on the Landscape

    We can visualize the competitive binding model on our map by considering a mixture with two antibodies with a 50%/50% composition. We outline the regions inside which any virus will be ≥50% at different concentrations of antibody. Compared to each antibody’s individual neutralization (dashed circles), a mixture’s collective neutralization occurs over a larger region.

    Panel D: Decomposing a Stem+Stem Mixture

    An example of the mixture #9 (stem+stem antibodies, true positions shown in gray) decomposed as two stem antibodies (red).
    ◼
  • Note that although the decomposition did not perfectly predict the positions of the antibodies nor their stoichiometry. However, both of these discrepancies somewhat offset each other, so that the neutralization profile is well-described by either the gray or red antibody mixture. In other words, this exemplifies that neutralization measurements may not uniquely identify an antibody mixture (especially when considering measurement error), and that multiple distinct antibody combinations could give rise to similar neutralization responses.
  • Panel E: Statistics for all Antibody Mixtures

    Analysis of all 14 antibody mixtures mixtures, stratified by the number of antibodies they contain. A monoclonal antibody is considered to be a "mixture" of 1 antibody.

    Panel F: Two More Example Decompositions

    Two additional examples where we decompose either a stem+stem mixture (#10) or a head+stem+stem mixture (#14).

    Extra Figure: Neutralization Profiles (3D Visualization)

    A neat visualization tool to examine how the monoclonal antibodies and mixtures are decomposed using 1-3 antibodies.

    Extra Figure: Removing Head Neutralization (3D Visualization)

    Figure S1: Overview of MDS

    We visualize the antibody-virus data and assess what fraction of the data is needed to make accurate predictions on withheld measurements.

    Panel C: Schematic of Dataset

    Figure S5: Predicting Antibody Behavior in External Dataset

    Validating the maps and the ability to position and predict new mAb behavior using an external source of data [Nakamura 2013, Table 1]. We make the following substitutions to have a few extra predictions:
    ◼
  • ΔAA=2: H1N1 A/Brisbane/59/2007  H1N1 A/New York/08-1326/2008
  • ◼
  • ΔAA=5: H3N2 A/Victoria/3/1975  H3N2 A/Bilthoven/1761/1976
  • Panel A: Triangulating New Antibodies using All Data

    Panel B: Predictions using a Subset of Data

    Figure S6: Triangle Inequality

    For our bipartite data (where antibody-virus distance can be directly measured but not virus-virus or antibody-antibody distance), the typical triangle inequality is modified to the following form:

    Interpretation of Virus-Virus Distance

    Figure S9: Decomposition Pathway

    Here, we follow the decomposition algorithm for two mixtures: