Abstract
Abstract
Pharmacokinetics is the study of how drugs are absorbed, distributed, metabolized, and eliminated by the body. Understanding these processes is crucial for determining appropriate dosing regimens and ensuring therapeutic efficacy while minimizing toxicity. In this project, we modeled drug concentrations in different compartments in both two- and three- compartment systems with the central compartment (blood), peripheral compartment (tissue), and fat. Additionally, we generated functionality for users and enabled dynamic plotting with custom user input data. We were motivated to complete this project because of its direct application to creating dosage regimens in the field of clinical pharmacology, the study of what drugs do in humans.
Intro
Intro
What is Pharmacokinetics?
What is Pharmacokinetics?
Pharmacokinetics is the branch of pharmacology dedicated to understanding what happens to a drug or dosage once it enters the human body. It revolves around the idea of ADME (absorption, distribution, metabolism, and elimination) to determine drug concentrations in different compartments of the body over time. This field is essential for optimizing drug dosages, ensuring efficacy, and minimizing toxicity.
In today’s age of personalized medicine, understanding pharmacokinetics is more crucial than ever. With our interest in the topic, we chose to do my project on modeling pharmacokinetics within two and three compartment systems over time. These models will then be presented as graphs of concentration versus time and can be easily modified by the user through a manipulate interface with various parameters such as dose amount, number of doses, and dose frequency. This allows for a customizable exploration of drug behavior, enhancing both theoretical understanding and practical application in clinical settings. In addition, it would provide users assistance in designing dosing regimens that can withstand patient non-compliance such as missing a dose or doubling a dose.
Key Objectives
Key Objectives
Modeling: Develop a robust model to simulate the drug concentration in all compartments, accounting for absorption, elimination, and interaction.
Functionality: Ensure the application provides comprehensive features that allows for various input parameters and the viewing of the resulting data, statistics, and other information as well.
User Interface: Provide an interface that accepts user input, runs the pharmacokinetic simulations, and visually presents the data, including information on concentrations for drug toxicity and efficacy to help users discover a suitable dosing regimen.
Turning Off Unnecessary Warnings
In[]:=
Off[NIntegrate::slwcon];Off[NIntegrate::ncvb];Off[General::stop];Off[NMaximize::cvmit];
Differential Equation Model
Differential Equation Model
Our first objective is to be able to model the drug concentration in every compartment through their interactions, absorption, and elimination.
Definition of Some Dosing Variables
Definition of Some Dosing Variables
numberDoses = Total Number of Doses to be Given
td = Time Between Doses
da = Dose Amount (Mass of each pill)
ka = Parameter determining rate of absorption of drug from the gastrointestinal (GI) tract to the blood. It influences concentration time profile in blood following a single dose. A large value of ka results in rapid and brief delivery. A small value of ka results in a slow and prolonged delivery.
dose = Function determining d from dose schedule
d[t] = Unabsorbed drug amount in GI tract at time t
firstDoseMultiplier = Multiplier for first dose
dod = Different other dose multiplier
dodn = Different other dose index
td = Time Between Doses
da = Dose Amount (Mass of each pill)
ka = Parameter determining rate of absorption of drug from the gastrointestinal (GI) tract to the blood. It influences concentration time profile in blood following a single dose. A large value of ka results in rapid and brief delivery. A small value of ka results in a slow and prolonged delivery.
dose = Function determining d from dose schedule
d[t] = Unabsorbed drug amount in GI tract at time t
firstDoseMultiplier = Multiplier for first dose
dod = Different other dose multiplier
dodn = Different other dose index
Dosing
Dosing
The first step in modeling drug concentrations involves developing a function that describes the schedule at which the arrival of drug into the GI tract occurs. d[t] is the amount of unabsorbed drug in the GI tract resulting from pills being delivered orally at one or several time points. At time t=0, the initial condition sets the dose amount, reflecting the first dose administered. To incorporate administration of additional doses at specific times, we use the function WhenEvent.
To model the rate of change of the amount of drug remaining in the GI tract, we have to take into account the fraction absorbed into blood and the fraction excreted from the GI tract through feces plus the minor metabolism by the gut bacteria. Let this be accounted in the coefficient kelgi. In most models, this is unknown and it is assumed that all of the drug moves into the blood. Finally, we chose not to model the backflow from blood into the GI tract as it is generally negligible.
′
d
Using the function WhenEvent, at certain points in time, additional doses will be administered.
In[]:=
Clear[dose,d];dose[numberDoses_,td_,da_,ka_,kelgi_]:=NDSolve[{d'[t]==-ka*d[t]-kelgi*d[t],d[0]==da,WhenEvent[Mod[t,td]==0&&t>0&&t<numberDoses*td,d[t]->d[t]+da]},d,{t,0,(numberDoses+1)*td}];
If we define some values of numberDoses, td (time between doses) and da (dose amount), we can obtain an interpolating function for d.
In[]:=
numberDoses=4;td=5;da=2;ka=0.4;kelgi=0;dsol=d/.dose[numberDoses,td,da,ka,kelgi]
dsol is only for explanatory and showcase purposes.
Out[]=
InterpolatingFunction
We are now able to obtain the amount of drug in the GI tract that has not been absorbed into the blood at any point in time.
In[]:=
dsol[[1]][0.5]
Out[]=
1.63746
This isn’t the entire picture, however. Sometimes, it is necessary to administer a greater first dose in order to see effects sooner. To do this, we need to have a multiplier for the first dose that can be used in the dosing function.
Let’s call the multiplier for the first dose, firstDoseMultiplier.
In[]:=
Clear[dose,d];dose[numberDoses_,td_,da_,ka_,kelgi_,firstDoseMultiplier_]:=NDSolve[{d'[t]==-ka*d[t]-kelgi*d[t],d[0]==da*firstDoseMultiplier,(*Theinitialconditionischangedforthefirstdose@time0*)WhenEvent[Mod[t,td]==0&&t>0&&t<numberDoses*td,d[t]->d[t]+da]},d,{t,0,(numberDoses+1)*td}];
Now, if we try to same variables again with a doubled first dose, we get an interpolating function that reflects this.
In[]:=
firstDoseMultiplier=2;dsol=d/.dose[numberDoses,td,da,ka,kelgi,firstDoseMultiplier]
Out[]=
InterpolatingFunction
Sometimes, people forget or take double of their regular dose. This means that it is necessary to implement a multiplier for any dose other than just the first dose.
Let the other dose’s multiplier be dod (different other dose).
And the dose number be dodn (different other dose number).
We could implement this by editing the whenEvent calls using the dod and dodn, but the WhenEvent function is very finicky.
Thus, we’ll need to change the way we run the WhenEvents.
And the dose number be dodn (different other dose number).
We could implement this by editing the whenEvent calls using the dod and dodn, but the WhenEvent function is very finicky.
Thus, we’ll need to change the way we run the WhenEvents.
In[]:=
Clear[dose,d];dose[numberDoses_,td_,da_,ka_,kelgi_,firstDoseMultiplier_,dod_,dodn_,listOfTimes_]:=NDSolve[{d'[t]==-ka*d[t]-kelgi*d[t],d[0]==firstDoseMultiplier*da,Table[With[{tEvent=time},WhenEvent[t==tEvent,d[t]->d[t]+da]],{time,listOfTimes}],WhenEvent[t==listOfTimes[[dodn-1]]&&dodn!=0,d[t]->d[t]+(dod-1)*da]},d,{t,0,(numberDoses+1)*td}]
We can now run this with a different other dose. For example, let’s remove the third dose by setting dod to 0 and dodn to 3 and have a list of time at which we want the dose.
In[]:=
dod=0;dodn=3;listOfTimes=#*td&/@Range[1,numberDoses,1];dsol=d/.dose[numberDoses,td,da,ka,kelgi,firstDoseMultiplier,dod,dodn,listOfTimes]
Out[]=
InterpolatingFunction
As you can see, the third dose is now missing because we set the multiplier to 0 for the dose at index 3. Another benefit of using the listOfTimes is that it enables the removing of doses without using dod and dodn as well. This will allow the dod and dodn to be reserved for other doses as well.
Let’s say the patient forgot the third dose but took double the forth dose.
We can do this in the following fashion:
We can do this in the following fashion:
In[]:=
listOfTimes=Delete[listOfTimes,3];dod=2;dodn=4;dsol=d/.dose[numberDoses,td,da,ka,kelgi,firstDoseMultiplier,dod,dodn,listOfTimes]
Out[]=
InterpolatingFunction
This brings up another issue. Sometimes, given the coefficients, the range of t isn’t enough to model everything we want to see in the interpolating function. Thus, we need to adjust the range when necessary to model all of the function accurately, given the parameters in a normal use case. It would also be useful to have a minimum range of 10 by default. Along with this, sometimes people aren’t able to take their doses at regular intervals. They may take it bi-daily or tri-daily, which have times at {0700, 1700} and {0700, 1200, 1700}, respectively. This will be represented in the listOfTimes. Finally, users may want to implement their own custom times. To find the td for custom times, we can take the maximum value and modify it to fit our scale. This may mean that the previous maximum time might be too large or small, as numberDoses doesn’t represent the number of doses in the custom listOfTimes. Thus, by using this new td, we can simply use td as our max t.
2*
In[]:=
dose[numberDoses_,td_,da_,ka_,kelgi_,firstDoseMultiplier_,dod_,dodn_,bitri_,listOfTimes_]:=NDSolve[{d'[t]== -ka*d[t]-kelgi*d[t],d[0]==firstDoseMultiplier*da, Table[With[{tEvent=time},WhenEvent[t==tEvent,d[t]->d[t]+da]],{time,listOfTimes}],WhenEvent[t== listOfTimes[[dodn-1]]&&dodn!=0 ,d[t]->d[t]+(dod-1)*da]},d,{t,0,If[bitri!=4,Max[(2*numberDoses*td),10],Max[td*2,10]]}]
Two-Compartment System
Two-Compartment System
After modeling the dose in GI tract, we can use the results to find the drug concentration in each compartment for a two compartment system. To begin, the first compartment, blood, receives the drug from the pill through absorption. The absorption of the drug into the blood can be modeled as ka . In order to accurately generate a concentration level, this needs to be divided by the volume of compartment 1. Thus, the model can be represented as the following:
*d[t]
Let c1[t] equal the concentration in compartment 1, the blood, and let c2[t] equal the concentration in compartment 2, the peripheral compartment (tissue).
′
c1
ka*d[t]
volume
Next, we need to model distribution, another crucial element of ADME. Since we are working with a two-compartment system, we need a flow from the first compartment, the blood, into the second compartment, the peripheral. In our model, this is reflected by a forward flow with a coefficient, k12, to model the transfer of drug to the second compartment from the first. This is essentially the rate of distribution.
′
c1
ka*d[t]
volume
We also chose to model the backflow from the peripheral compartment into the central compartment. This can be done in a similar way using k21. The equation with both forward flow and back flow would be the following:
′
c1
ka*d[t]
volume
Metabolism and elimination are also important parts of ADME. In this context, we assume first-order elimination, which applies to the majority (95%) of drugs. First-order elimination means that the rate at which the drug is eliminated at is proportional to the current concentration in a compartment. For drugs exhibiting zero-order elimination (the remaining 5%), the elimination rate is independent of drug concentration, but this can be modeled using saturable kinetics (to be addressed later). As a practical example, consider a drug with first-order kinetics. If a patient starts with a concentration of 100 mg/L, there might be 90mg/L left after an hour but 82mg/L left after two hours, demonstrating an elimination rate that is continuously decreasing as the concentration decreases. In contrast, with zero-order kinetics (e.g., alcohol), if 10 mg/hour is eliminated regardless of concentration, the drug will be eliminated at a constant rate until the concentration drops below a certain threshold where first-order kinetics might take over.
For the central compartment, the drug may be metabolized by the liver’s enzymes or excreted via the kidneys (the renal pathway). To model first-order elimination from compartment 1, we chose to combine metabolism and elimination into a single coefficient as they have similar effects on the concentration: kel1.
′
c1
ka*d[t]
volume
Now, we need to write a differential equation for the rate of change of concentration in the peripheral compartment. We already have two interactions with the central compartment: the ones with k12 and k21.
Again, we need another elimination constant to model the first-order metabolism and elimination from the compartment. However, it is very complicated such as through sweat and breathing. Therefore, it is usually not modeled. However, we will still include this coefficient: kel2.
Our two-compartment model is now ready. The figure below provides a visual of the scenario. There are many variations on pharmacokinetic modeling that utilize other compartments and may be different than this one.
Now, we can call NDSolve to find c1 and c2 and return them as interpolating function. Let’s call the function that does this compartments2.
Note that both concentrations have an initial value of 0 as there is no drug in the system at the very beginning.
Note that both concentrations have an initial value of 0 as there is no drug in the system at the very beginning.
Using some new coefficients and numbers, we can obtain the drug concentration in both compartments. Note that coefficients are arbitrary as of now.
Three-Compartment System
Three-Compartment System
Other than the first two compartments, we can also choose to have a third compartment, fat. Fat is capable of acting like storage for drug and releasing it back slowly over time. The drug can enter the fatty tissues from the central compartment through methods such as diffusion. Thus, it should only have interactions with the central compartment. We can call these coefficients k13 and k31 for going from the central compartment to the compartment 3 and from compartment 3 to the central compartment respectively.
Thus, the concentration of the drug in fat can be modeled as the following with a forward flow from the blood and a backward flow from fat to the blood.
where c3[t] is the drug concentration in fat. We should also take into account that the concentration in the central compartment will be affected as well.
Finally, the initial value of compartment 3 should be 0 as well.
With the third compartment, a visual would look more like this.
Now, we are ready to plug it into NDSolve and get the interpolating functions for all three compartments. Let’s call the function that does this compartments3.
We can plug in some numbers:
Saturable Kinetics
Saturable Kinetics
We can write a function, compartments2sat that plugs equations into NDSolve using Michaelis-Menten kinetics instead of the elimination constants from earlier. In this case, vmax1 and km1 represent vmax and km for elimination from the central compartment (replacing kel1).
We can now plug in some numbers and see the saturable kinetics in play.
The same Michaelis-Menten Kinetics can be applied to a system with three compartments as well. However, with the third compartment, the rate at which drug can enter it from the central compartment is limited with Michaelis-Menten Kinetics. This directly impacts the equations for the central compartment and compartment 3.
We can write a function, compartments3sat, that plugs the equations for a three compartment model into an NDSolve. Here, vmax3 and km3 are used for the forward flow from the central compartment to compartment 3 (replacing k13).
Now, we can, once again, plug in some numbers and obtain the concentrations of the drug in all three compartments.
For all of these interpolating functions, we can plot them together on the same graph using Show. We will do these in the Manipulate section.
Now, we have functions that can model both 2 and 3 compartment systems.
Optimization
Optimization
Our second goal is provide functionality for the user.
Frequency
Frequency
Drugs are usually administered at several different dosage schedules. These can range from a weekly administration that occurs every 168 hours to a schedule that delivers the drug every four hours. In addition, as mentioned before, some dosage schedules, such as BID (bi-daily) and TID (tri-daily), don’t administer dosages at a constant rate. BID usually delivers the doses at 0700 and 1700 (morning at 7 am and afternoon at 5 pm) while TID usually delivers the doses at 0700, 1200, and 1700 (morning at 7 am, noon at 12pm, and afternoon at 5pm).
These schedules, their acronyms, and time between doses can be found below.
Thus, we will need to create an association to map the dosage schedule acronym to the time between doses with a scale of 1 unit of time to 4 hours. BID and TID are still denoted as 6 because they are special cases and require additional manipulation, but they still take a dose at the same time every day.
In order to be able to represent the BID and TID and have it communicate with the dose function, we first check if the frequency, let’s call it freq, is equal to BID or TID and storing the result in a variable, bitriTemp, which is then used to create a list of times. This can be implemented through the following:
Important Concentration Thresholds
Important Concentration Thresholds
To provide an effective optimization service, we need to understand the key constraints involved. In this case, there are three major thresholds: the effective concentration, the toxic concentration, and the lethal concentration of the drug in the blood. The drug concentration in the blood (central compartment (c1)) must surpass the effective concentration for it to show desired effects, stay below the toxic concentration to avoid adverse side effects, and remain sufficiently below the lethal concentration to ensure patient safety.
For example, the following is a plot with effective concentration of 1, toxic concentration of 2, and lethal concentration of 3.
Once we have these values, our goal is to optimize the drug amount per dose and/or frequency of dosing to maximize the time the drug concentration in the central compartment remains within the effective and toxic thresholds, minimizing potential side effects for the patient and providing the most benefits. To achieve this, we first have to obtain the interpolating functions by calling the models from earlier. We can check what type of model the user wanted and get the interpolating functions with the following code:
cn is the number of compartments (either 2 or 3)
Now, we need to obtain the drug concentration of the central compartment.
We will also need to find the domain in order to have the NIntegrate run well.
Weighting and Scoring
Weighting and Scoring
After we get the interpolating functions, we have to assign weights to the different portions of the graph. A weight of 1 is assigned to the time spent between the effective and toxic concentrations as these are the desirable levels. On the other hand, to discourage extended time spent above the toxic concentration, we assign a weight of -0.5. Finally, when the concentration is under the effective concentration, there are no positive or negative effects, so a weight of 0 is applied to these periods. The lethal/toxic/effective concentrations generally only apply to the concentration in blood, so we will only need to evaluate the central compartment (compartment 1).
The following piecewise function represents the previous statement where concentration is the drug concentration in the blood.
By numerically integrating (NIntegrate) this piecewise and dividing by the domain, we obtain a score for any combination of dose amount and frequency. Sometimes, this may result in a blood concentration function that exceed the lethal concentration at times. Thus, if the blood concentration exceeds the lethal concentration level, the final score is set to 0 because the combination of measurements will most likely result in death and not be beneficial to the patient.
Maximizing
Maximizing
Next, we want to find the maximum out of all of these combinations. To achieve this, we can use Table with two variables: a dose amount multiplier that allows for flexible and a frequency from a list of frequencies to create a 2d list. After this, we want to consider the size of the table. Currently, there are nine different preset frequencies for drug administration. However, determining the appropriate dose amount is more complex. To achieve this, we generate a list of dose amounts using multipliers, which also enables easier data extraction from the table indices after identifying the maximum score and its index at the end.
The optimization function should also take in and utilize a parameter called specificity to dictate the increment by which the multiplier should increase. For example, a lower specificity tests would more multipliers. The maximum multiplier is capped at 10 to accommodate for variations between the user’s current dosage amount input and the optimal dosage amount. Any higher cap could excessively prolong computation time. One drawback is that this method may lack precision. Nevertheless, in reality, exact precision is often unobtainable due to variations in pill manufacturing, making the issue negligible.
As the function call may take some time, users may also choose to only optimize one of the two. This can be done by passing a choice variable into the optimization function like the following code:
where choice is represents
In this case, doseAs represents the different dose amount multipliers and freqs represents the index of a different type of dosing schedule in the following list:
Progress Indicator
Progress Indicator
Finally, due to the fact that the optimization function may take some time, it would be useful to dynamically update the user on how much of the computation for the optimization has been completed. We can set the default value of percentageComplete to 100 before any optimization occurs.
After optimization starts, we can set it to 0 to indicate that the optimization has started.
This percent can then be updated with the following:
We then divide this into five addition for every element in the 2d list to allow for a more dynamic progress display.
Function Code
Function Code
Using all of this, we can write the optimization function:
Statistics
Statistics
Statistics Over Entire Domain
Statistics Over Entire Domain
To add onto the functionality we offer to the user, we should display some statistics about the interpolating functions from the user’s input. Since the blood compartment (compartment 1) is what is most important, we will first find statistics for the percentage of time that the drug concentration in blood is under, between, or over the effective, toxic, and lethal concentrations (effCon, toxicCon, and lethalCon respectively). These will be displayed on the user interface later on in the Manipulate using dynamics.
First, we must obtain the interpolating functions through the same means as earlier.
Now, we need to obtain the drug concentration of the central compartment.
In order to be able to collect the statistics we want, we will need to find the domain in order to have the NIntegrate to run well.
Now, we can find the statistics by using NIntegrates. by setting the segments of the graph that we require to 1 and everything else to 0. The following piecewise functions represent this and can be plugged directly into NIntegrate.
Piecewise Functions
Piecewise Functions
Below Effective Concentration:
Between Effective and Toxic Concentrations:
Between Toxic and Lethal Concentrations:
Above Lethal Concentration:
For example, below effective concentration can have an NIntegrate of
When returning the statistics back to the user, however, we need to multiply it by 100 and divide it by the domain to find the percentage of the interpolating function that fits the criteria.
Statistics During Regular Dosing
Statistics During Regular Dosing
Second, it is important that the drug concentration in the central compartment always stays between the effective and toxic concentrations after getting into it for the first time. Thus, we need to display the percentage of time that the drug concentration stays between the effective and toxic concentrations after it first enters and before it last exists. To do this, we can create a list of all the points at which the concentration is equal to the effective concentration. We then NIntegrate with the domain between the first and last points of the list and the following piecewise:
Now, we can multiply it by 100 and then divide by the difference between the first and last points to obtain the percentage of time that it stayed in the range while the patient took regular doses.
Function Code
Function Code
This is all implemented in the following function that returns a list of the statistics.
User Interface / Manipulate
User Interface / Manipulate
Now that we have defined the multi-compartment model and some additional functionalities to provide more information, we need to create a way for the end user to interact and insert data to access the model. To do this, we created a Manipulate that creates plots based on the interpolating functions from the multi-compartment model and can also call the other functionalities on demand.
Dynamic Graphing
Dynamic Graphing
The most crucial part of the Manipulate is the ability to display a dynamic graph that adjusts based on the parameters input in the Manipulate input fields.
Dynamic Domain Display
Dynamic Domain Display
In addition, we needed to use the UnitStep function in order to be able to change the x value of the plot range dynamically so that the entire interpolating function can fit onto the screen. The UnitStep function was chosen over the HeavisideTheta function because UnitStep is defined at 0.
One example application of the UnitStep function being used can be found in the following line of code:
The 0.0001 is a remnant of the time when HeavisideTheta was being used as it would result in the value inside the HeavisideTheta to almost never hit 0.
Dynamic Range Display
Dynamic Range Display
On the other hand, we found the maximum drug concentration over all the interpolating functions to dynamically change maximum value for the y value of our plot range and fit everything onto the screen as well.
With a two-compartment system, the following code is used:
Status Display
Status Display
Another key feature is notifying the user when the blood concentration crosses a toxic or lethal concentration by using the maximum blood concentration stored in maxBloodCon. This is represented in bold at the bottom of the Manipulate and utilizes the maximum blood concentration.
Which statement to assign status. lethalCon, toxicCon, (and effCon) are their corresponding drug concentration thresholds.
Manipulate Code (Requires Wolfram to Run)
Manipulate Code (Requires Wolfram to Run)
We can use all of the functionality and models we have created in a Manipulate to generate a user interface. Elements not available at any specific moment are made invisible as to not confuse the user.
The above image is a bitmap of the Manipulate with the default parameters of the manipulate. The bitmap remove some portions of the image, so a screenshot of the Manipulate can be found below. More screenshots (of other combinations of parameters) can be also found below in the image examples subsection.
The Manipulate cannot be executed on the cloud page. Please download the file at the bottom to run the code and use the manipulate.
Image Examples
Image Examples
Default
Default, Show Peripheral
Default, Three Compartments, Show Peripheral, Fat
Default, Three Compartments, Show Peripheral, Fat, Saturable Kinetics
Default, Show Peripheral, Double First Dose, Missing Third Dose
Default, Three Compartments, Show Peripheral, Double First Dose, Missing Third Dose, Bi-daily, Dose Amount 3
Optimization Results and Statistics for Default
Please download the file at the bottom to run the code and use the manipulate for more images.
Conclusion
Conclusion
Summary and Application
Summary and Application
In conclusion, we developed and implemented models for both two and three compartment systems to track drug concentrations in the gastrointestinal (GI) tract, blood, peripheral tissue, and fat. The models are integrated in a Manipulate that enables users to input custom values and receive dynamic graphing. The tool also performs on-demand optimization and statistics to provide the user with more information about their custom input values. This tool can be particularly valuable in clinical settings, where it may assist in designing dosing regimens that are robust against patient non-compliance while maintaining drug concentrations within a safe and effective range.
Future Directions
Future Directions
Moving forward, it would be beneficial to make the model more realistic with various other compartments in order to better characterize the drugs and their specific effects. A possible extension could involve creating a parameter estimation process to better align the model with real-world clinical data. The accuracy of the model is significant to its effectiveness in deciding dosages for different demographics of people. Implementing methods to generate pharmacokinetic coefficients based on the data would enhance the model’s efficiency in clinical settings and its relevance to users. In addition, by incorporating data from diverse patient populations, variability in drug metabolism and distribution could be more comprehensively captured, allowing for personalized dosage recommendations that account for individual differences in drug response. This approach would not only strengthen the model’s predictive capabilities but also its ability to target specific patient profiles. We could also improve the user interface by implementing the model in a web app. This would present a sophisticated model for personalised medicine that gives people remote access to dosage control. Finally, as of now, most of the variables are unit-less. It would be beneficial if the Manipulate were to obtain some sort of unit system in the future.
As of July 2024, a functional version of this Manipulate can’t be published onto cloud, so sample outputs are presented as images. If we had more time, we would try to make the program more modular, faster, and fit the requirements for the cloud to run it.
As of July 2024, a functional version of this Manipulate can’t be published onto cloud, so sample outputs are presented as images. If we had more time, we would try to make the program more modular, faster, and fit the requirements for the cloud to run it.
Acknowledgements
Acknowledgements
We would like to thank Stephen Wolfram and the directors, Eryn Gillam, Megan Davis, and Rory Foulger for the opportunity to attend this camp and to work on this project. We would also like to thank Dave DeBrota for his infinite mentorship and support. Finally, we would like to thank Shivika Gupta and Annie Zhu for their support and suggestions.
References
References
1
.Elimination Kinetics – Pharmacokinetics. https://sepia2.unil.ch/pharmacology/parameters/elimination-kinetics/.
2
.Pharmacokinetic Modeling - Wolfram Demonstrations Project. http://demonstrations.wolfram.com/PharmacokineticModeling/.
3
.“Michaelis-Menten Kinetics.” Chemistry LibreTexts, 2 Oct. 2013, https://chem.libretexts.org/Bookshelves/Biological_Chemistry/Supplemental_Modules_(Biological_Chemistry)/Enzymes/Enzymatic_Kinetics/Michaelis-Menten_Kinetics.
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Optimizing dosing regimens for multi-compartment pharmacokinetic models
by Tony Song
Wolfram Community, STAFF PICKS, July 12, 2024
https://community.wolfram.com/groups/-/m/t/3216380
by Tony Song
Wolfram Community, STAFF PICKS, July 12, 2024
https://community.wolfram.com/groups/-/m/t/3216380