This app allows exploration of a virus infection model that includes several components of the immune response. Read about the model in the “Model” tab. Then do the tasks described in the “What to do” tab.
This model consists of several compartments that capture some of the basic dynamics of virus and immune response during an infection. In this model, we track the following entities, by assigning each to a compartment:
The innate response is modeled in a rather abstract sense. We could think of it as some form of cumulative effect of all innate response components, or alternatively a single dominant innate response component, e.g. interferon. If one knows more about a specific system and has enough data, one can of course include the innate response in more detail (i.e. with several compartments) in the model. For the sake of simplicity, we only look at a single compartment.
In addition to specifying the compartments of a model, we need to specify the dynamics determining the changes for each compartment. Broadly speaking, there are processes that increase the numbers in a given compartment/stage, and processes that lead to a reduction. Those processes are sometimes called in-flows and out-flows.
For our system, we specify the following processes/flows:
We are ignoring the death of T-cells and B-cells in this model. As such, it is only applicable to systems where we want to study the dynamics during the growth/expansion phase of the adaptive response and not further. This is valid for most acute infections, but would not be a suitable model for something like HIV or other chronic viral infections.
While this model and these processes make some biological sense, there are many other possible alternatives one could formulate the detailed processes going on. Based on what you know about the system you want to model, you might have good information about some of the components and for other parts you will have to make reasonable assumptions. Another app deals specifically with this issue of having different ways to formulate a model and how that can sometimes impact results. For this app, reasonable terms were chosen with a focus on showcasing a variety of different ways certain immune response processes are often implemented.
The diagram illustrating this compartmental model is shown in the figure.
Implementing this model as a continuous-time, deterministic model leads to the following set of ordinary differential equations.
\[\dot U = n - d_U U - bUV\] \[\dot I = bUV - d_I I - k_T T I\] \[\dot V = \frac{pI}{1+s_F F} - d_V V - b UV - k_A AV\] \[\dot F = p_F - d_F F + \frac{V}{V+ h_V}g_F(F_{max}-F) \] \[\dot T = F V g_T + r_T T\]
\[\dot B = \frac{F V}{F V + h_F} g_B B\] \[\dot A = r_A B - d_A A - k_A A V\]
The tasks below are described in a way that assumes everything is in units of days (rate parameters, therefore, have units of inverse days). If any quantity is not given in those units, you need to convert it first (e.g. if it says a week, you need to convert it to 7 days).
So far, we have only had a single immune response component at a time act on the virus or infected cells. Now it’s time to look at “everything.” This is a free and open exploration. Turn on any and all immune response components you like, play around with any other parameters, and see what happens. You might notice that the model - while still in some sense fairly small and simple - is nevertheless already fairly complex, with lots of ‘knobs to turn’ and parameters to adjust, and things going on. This is a challenge when building models: Smaller models are less realistic, but easier to build and study. Larger models are potentially more realistic, but harder to build, harder to study, and if you want to apply the model to a specific pathogen, you will need to find values for all the model parameters somewhere in the literature. That’s often tricky.
simulate_virusandir_ode
. You can call them directly, without going through the shiny app. Use the help()
command for more information on how to use the functions directly. If you go that route, you need to use the results returned from this function and produce useful output (such as a plot) yourself.vignette('DSAIRM')
into the R console.