Disease Transmission Mechanisms
NOTE: AI Generated. Still to be verified by Willy.
Overview
Disease transmission in this model is governed by a contact-based, rate-driven approach using exponential distributions and probability-based state transitions.
Mathematical Framework
Transmission Rate
The force of infection (lambda) at any time is calculated as:
\[\lambda(t) = \beta \times S(t) \times I(t)\]
Where: - β = transmission coefficient (adjusted for isolation) - S(t) = number of susceptible patients - I(t) = number of infectious/colonized patients
Isolation Adjustment
When a patient is isolated:
\[\beta_{isolated} = \beta \times (1 - \text{isolationEffectiveness})\]
Example: With isolationEffectiveness = 0.5: - Original β = 0.0615 - Isolated β = 0.0615 × (1 - 0.5) = 0.03075 - Transmission risk is cut in half
Time to Next Event
The time until the next transmission event follows an exponential distribution:
\[P(T \leq t) = 1 - e^{-\lambda t}\]
The inter-event time is sampled as:
\[t_{event} = -\frac{\ln(U)}{\lambda}\]
Where U is a uniform random variable on [0, 1).
Implementation in Code
FacilityOutbreak.updateTransmissionRate()
This method recalculates β dynamically:
public void updateTransmissionRate(Region region) {
// Count susceptible and infected patients
int susceptible = 0;
int infected = 0;
for (Person p : region.getPeople()) {
if (p.getDiseases().get(diseaseIndex).isColonized()) {
infected++;
// Adjust for isolation
if (p.isIsolated()) {
infectedAdjusted += (1 - isolationEffectiveness);
} else {
infectedAdjusted += 1.0;
}
} else {
susceptible++;
}
}
// Update lambda
double lambda = baseBeta * susceptible * infectedAdjusted;
scheduleNextTransmissionEvent(lambda);
}Transmission Events
Event Scheduling
- Calculate current force of infection based on population state
- Sample time to next event from exponential distribution
- Schedule transmission event at calculated time
- At event time:
- Select random susceptible patient
- Select random infected patient
- Transmit disease (susceptible → colonized)
- Recalculate transmission rate
- Schedule next event
Population Changes
When population changes (admission/discharge):
- Transmission rate is recalculated
- Previous scheduled event is cancelled
- New event is scheduled
- This ensures dynamics respond immediately to population shifts
Disease States & Transitions
State Diagram
┌─────────────┐
│ Susceptible │
└──────┬──────┘
│
│ (transmission)
▼
┌──────────────┐
│ Colonized │
└──────┬───────┘
│
├─ (detected) ──→ Isolated
│
└─ (decolonization) ──→ Susceptible
Colonized → Detected
Pathways:
- Surveillance Testing (if active)
- Probability:
probSurveillanceDetection - Adherence:
admissionSurveillanceAdherenceormidstaySurveillanceAdherence - Result: Immediate isolation if detected
- Probability:
- Clinical Detection (spontaneous)
- Rate: Exponential with mean
avgTimeToClinicDetection - Occurs regardless of surveillance
- Result: Immediate isolation if detected
- Rate: Exponential with mean
Code:
// Surveillance detection
if (onActiveSurveillance && uniform() < probSurveillanceDetection * adherence) {
pd.setDetected(true);
p.isolate();
}
// Clinical detection timer
if (pd.isColonized()) {
pd.startClinicalDetectionTimer(); // Scheduled
}Colonized → Decolonized
Mechanism: Spontaneous natural clearance (no treatment required)
Rate: Exponential with mean avgDecolonizationTime (default: 387 days)
Code:
double decolonizationTime = exponential(1.0 / avgDecolonizationTime);
pd.startDecolonizationTimer(); // ScheduledImportation Mechanism
Admission-Based Importation
When a new patient is admitted:
boolean isImported = (uniform() < importationRate);
if (isImported) {
// Patient arrives colonized
newPatient.getPersonDisease(disease).setColonized(true);
}Effect: - Probability importationRate that new admits are colonized - Immediately contributes to transmission force - Can trigger surveillance detection if active
Surveillance Detection
Admission Testing
When: Upon admission (if active surveillance enabled)
Probability:
P(detection) = probSurveillanceDetection × admissionSurveillanceAdherence
Default values: - probSurveillanceDetection = ~0.95 (per test) - admissionSurveillanceAdherence = 0.911
Expected outcome: ~87% of colonized admits detected
Periodic Testing
Interval: Every daysBetweenTests days (default: 14)
Probability:
P(detection) = probSurveillanceDetection × midstaySurveillanceAdherence
Default values: - midstaySurveillanceAdherence = 0.954
Effect: ~91% of tests performed detect colonization
Isolation Effectiveness
Model Implementation
Isolation works by reducing transmission risk:
- When detected, patient is isolated
- Isolation multiplier =
1 - isolationEffectiveness - This reduces transmission from that patient by the isolation factor
Example Scenarios
No isolation (isolationEffectiveness = 0): - Detected patients still transmit at full rate β
Partial isolation (isolationEffectiveness = 0.5): - Detected patients transmit at β/2 - Represents contact precautions, PPE, hand hygiene
Perfect isolation (isolationEffectiveness = 1.0): - Detected patients do not transmit (β = 0) - Unrealistic but useful for theoretical analysis
Code
double betaAdjusted = beta;
if (patient.isIsolated()) {
betaAdjusted = beta * (1 - isolationEffectiveness);
}Key Simplifications
- Homogeneous mixing: All patients have equal contact probability (ignoring actual spatial/social structure)
- No strain variation: All disease copies are identical
- Instant isolation: Detected patients are immediately isolated
- Perfect adherence: If isolated, patient truly maintains isolation
- No superinfection: Colonized patients cannot be re-colonized
- No recovery to immunity: Decolonized patients return to susceptible state
Parameter Sensitivity
High Impact on Transmission
longTermAcuteCareBeta- Direct multiplier on force of infectionimportationRate- Seeding of diseaseisolationEffectiveness- Reduces transmission from detected cases
Medium Impact
avgDecolonizationTime- Affects colonized prevalencedaysBetweenTests- Affects detection timing
Lower Impact
probClinicalDetection- Natural detection pathway- Detection adherence rates - Affects who gets tested
Empirical Validation
- Run with known parameters
- Compare outputs to published studies