This app uses the same model and follows the same overall setup as the Antiviral Treatment app. You should go through that app first before exploring this one. The major difference is that for this app, instead of comparing model results to data in a qualitative manner, here the model is fit to the data. This provides a more rigorous, statistical way of comparing models and thus hypotheses. While this app does model fitting, the topic of fitting is not discussed here. There is a section in DSAIRM with multiple fitting related apps that focus on the details of how fitting simulation models to data works. For the purpose of this app, we treat all the fitting machinery as a ‘black box.’
Read about the model in the “Model” tab. Then do the tasks described in the “What to do” tab. Learn more about the model and its origins in the “Further Information” tab.
For this app, viral load data from patients infected with influenza is being fit. The data is average log viral titer on days 1-8 post infection. The data comes from (Hayden et al. 1996). Three treatment conditions are shown. One group of individuals did not receive treatment, one group received drug treatment (oseltamivir) early (around 24 hours) and one group late (around 48 hours).
The underlying model that is being fit to the data is the antiviral treatment model. See that app for a description of the model. For convenience, here are the flow diagram and equations.
\[\dot U = n - d_U U - (1-f)bUV\] \[\dot I = (1-f)bUV - d_I I\] \[\dot V = (1-e)pI - d_V V - (1-f)gbUV\]
While the underlying model is able to simulate a chronic infection, we are looking at data for influenza and neuraminidase inhibitor drugs, which is an acute infection. To mimic that setting, natural birth and death of uninfected cells have been turned off, i.e. \(n = d_U = 0\).
Terminology and setup for this model are just a little bit different than the previous model. Instead of setting either \(e\) or \(f\) in the model through the graphical interface, there is only a single drug efficacy parameter, \(e\), and a selector to switch between model 1 and model 2. Model 1 corresponds to a model that assumes the drug acts on virus production, i.e. the actual \(e\) in the model above. Model 2 corresponds to a model where the mechanism is assumed to reduce rate of cell infection, i.e. \(e\) is being mapped onto model parameter \(f\) above. For either model, the value provided for \(e\) is only a starting value. The fit to the data determines the value which best describes the data.
This app fits the log viral titer of the data to the virus kinetics produced by the model simulation. The fit is evaluated by computing the sum of square errors between data and model for all data points. For details on how fitting works, see the apps in the fitting section.
Model parameters that are being fit are b, p, g and e. The other parameters are assumed to be known and kept fixed (otherwise, given the sparse amount of data, the model would likely overfit).
Note that for this app, the model is being run three times. During one run, treatment (parameters \(f\) or \(e\) in the model) are not turned on. This simulation is fit to the no-treatment data. Similarly, treatment is turned on by setting the treatment parameters to non-zero values early or late, and fit to the data for the corresponding scenario. What is being fit is the model results for all three simulations to all the data for the three scenarios.
For the purpose of using and exploring this app, you can ignore the fitting details and just note that the fit allows us to statistically compare the model with the two drug mechanisms to the data so we can determine which model/mechanism fits the data better (and thus is more plausible).
Note: This simulation can take time to run, so be patient.
Once done, look at the fit. You can turn off uninfected and infected cells by clicking on their legends in the plotly plot. This way you can see more clearly the data and the model component that is fit to the data, namely virus load.
Next, take a look at the numbers below the plot. Those are the estimated values for the parameters at the final iteration of the model (this might or might not be the overall best fit, this is further discussed in the apps in the fitting section). For now, focus on the value for drug efficacy, \(e\). You should find it to be 1, i.e. a perfect drug. Next, note the line below. It shows SSR (Sum of Square Residuals) and AICc (Akaike’s Information Criterion corrected for small sample size). Again, more information on those is covered in the fitting section. What you should note for now is the value of AICc, which should be -35.93. If you compare models, a smaller value indicates a better model. We’ll now compare model 1 we just fit (with mechanism of drug reducing virus production) to model 2.
simulate_fludrug_fit
. That function repeatedly calls simulate_virusandtx_ode
.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.