2. Pharmacokinetics
Pharmacokinetics (PK) describes what the body does to the drug -- the quantitative study of absorption, distribution, metabolism, and excretion (ADME). These principles determine drug dosing regimens and predict plasma concentration-time profiles.
Historical Development
Torsten Teorell (1937) is considered the father of pharmacokinetics. His landmark papers established the mathematical foundations using compartmental analysis, describing drug distribution as a system of differential equations analogous to chemical engineering.
The one-compartment model was refined by Dost (1953) and Nelson (1961). Milo Gibaldi and Donald Perrier's textbook "Pharmacokinetics" (1975) standardized the field. The development of high-performance liquid chromatography (HPLC) in the 1970s enabled precise measurement of drug levels, making clinical pharmacokinetics practical.
The introduction of population pharmacokinetics by Lewis Sheiner and Stuart Beal (1970s-80s) using the NONMEM software revolutionized the field by allowing analysis of sparse clinical data and identification of patient covariates affecting drug disposition.
Derivation 1: One-Compartment IV Bolus Model
After an intravenous bolus dose D, the drug distributes instantaneously into a single compartment of volume $V_d$. Elimination follows first-order kinetics:
Integrating with the initial condition $C(0) = D/V_d$:
The elimination rate constant relates to clearance and half-life:
The area under the concentration-time curve (AUC) from 0 to infinity:
This fundamental relationship $AUC = D/CL$ means clearance can be determined from any IV dosing study by measuring the AUC. The relationship is independent of the compartmental model and holds for all drugs.
Derivation 2: Oral Absorption (Bateman Equation)
For oral administration, drug must first be absorbed from the GI tract. With first-order absorption (rate constant $k_a$) and first-order elimination:
Solving these coupled differential equations yields the Bateman equation:
The time of peak concentration $t_{\max}$ is found by setting $dC/dt = 0$:
The peak concentration $C_{\max}$ is obtained by substituting $t_{\max}$back into the Bateman equation. Note that $t_{\max}$ depends only on rate constants, not on dose or bioavailability, while $C_{\max}$ is proportional to $F \cdot D$.
Derivation 3: Volume of Distribution
The apparent volume of distribution $V_d$ relates the total amount of drug in the body to the plasma concentration:
For a drug distributed between plasma (volume $V_p$) and tissue (volume $V_T$), with unbound fractions $f_u$ and$f_{uT}$ respectively:
This explains why $V_d$ can exceed total body water. If the drug binds extensively to tissues ($f_{uT}$ is small), the ratio $f_u/f_{uT}$is large, making $V_d$ very large. For the steady-state volume:
Clinically, $V_d$ determines the loading dose: $\text{Loading dose} = C_{\text{target}} \times V_d$. Drugs with large $V_d$ (chloroquine: 13,000 L) are extensively tissue-bound; those with small $V_d$ (warfarin: 8 L) are confined to plasma.
Derivation 4: Clearance and Organ Extraction
Clearance (CL) is the volume of blood completely cleared of drug per unit time. For an eliminating organ with blood flow Q and extraction ratio E:
For hepatic clearance, the well-stirred model gives:
Where $CL_{\text{int}}$ is the intrinsic clearance (enzyme capacity without flow limitations). Two limiting cases emerge:
Total systemic clearance is the sum of all organ clearances:$CL_{\text{total}} = CL_H + CL_R + CL_{\text{other}}$. Renal clearance can be further decomposed: $CL_R = f_u \cdot GFR + CL_{\text{secretion}} - CL_{\text{reabsorption}}$.
Derivation 5: Steady-State and Accumulation
For repeated IV bolus doses D given every $\tau$ hours, the concentration after the $n$-th dose at time $t$ within the dosing interval:
As $n \to \infty$, the accumulation factor converges:
The steady-state peak and trough concentrations become:
The average steady-state concentration:
The fraction of steady state achieved after $n$ doses:$f_{ss} = 1 - e^{-nk_e\tau} = 1 - (1/2)^{n\tau/t_{1/2}}$. After 4-5 half-lives, $f_{ss} \geq 0.94$. This relationship is independent of dose, bioavailability, and clearance -- only $t_{1/2}$ determines the time to steady state.
Clinical Applications
Therapeutic Drug Monitoring
TDM is essential for drugs with narrow therapeutic indices (aminoglycosides, vancomycin, lithium, digoxin, phenytoin). Trough levels (just before next dose) guide dosing adjustments. Peak levels assess efficacy (aminoglycosides) and toxicity risk.
Renal Dosing Adjustments
For renally cleared drugs, dose adjustment uses the Cockcroft-Gault or CKD-EPI equations to estimate GFR. The adjusted dose = normal dose times the fraction of remaining renal function: $D_{adj} = D \cdot [1 - f_e(1 - KF)]$where $f_e$ is the fraction excreted unchanged and KF is the kidney function ratio.
Drug-Drug Interactions
PK interactions are predicted by the ratio $R = 1 + [I]/K_i$ where [I] is the inhibitor concentration and $K_i$ is its inhibition constant. An R value greater than 2 triggers clinical DDI studies. CYP3A4 inhibitors (ketoconazole, ritonavir) are common culprits.
Extended-Release Formulations
Zero-order release kinetics from extended-release formulations reduce peak-trough fluctuations, improving adherence and reducing side effects. The input rate is designed to match the elimination rate at the target steady-state concentration.
Python Simulations
One-Compartment and Two-Compartment PK Models
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server
Clearance, Half-Life, and Volume of Distribution
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server
Bioavailability and First-Pass Effect
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server
Multiple Dosing, Steady State, and Loading Doses
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server
Nonlinear Pharmacokinetics: Michaelis-Menten Elimination
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server