Screening is defined as the active search for unrecognized disease or defects in apparently healthy people using rapid tests, examinations, or other procedures.
It is important to distinguish screening from diagnosis: * Screening: Applied to asymptomatic populations to identify those likely to have the disease. * Diagnosis: Applied to symptomatic individuals (or those with positive screen results) to confirm the disease.
The Iceberg Phenomenon: Screening aims to detect the “submerged” portion of the iceberg—the pre-symptomatic or undiagnosed cases—to intervene early and reduce morbidity and mortality.
Before a screening program is initiated, it must meet specific criteria. The classic criteria proposed by Wilson and Jungner (WHO, 1968) remain the gold standard:
To evaluate a test, we compare it against a Gold Standard (the definitive diagnostic test). We use a 2x2 contingency table.
| Status | Test_Positive | Test_Negative |
|---|---|---|
| Diseased | True Positive (TP) | False Negative (FN) |
| Healthy | False Positive (FP) | True Negative (TN) |
Let’s simulate a real-world scenario. Suppose we are screening for Diabetes Mellitus in a population of 1,000 people using Fasting Plasma Glucose. * Prevalence: 10% * Sensitivity of Test: 80% * Specificity of Test: 90%
# Define population parameters
total_pop <- 1000
prevalence <- 0.10
sensitivity <- 0.80
specificity <- 0.90
# Calculate the 2x2 values
diseased <- total_pop * prevalence
healthy <- total_pop * (1 - prevalence)
TP <- diseased * sensitivity
FN <- diseased - TP
TN <- healthy * specificity
FP <- healthy - TN
# Create the matrix
matrix_data <- matrix(c(TP, FP, FN, TN), nrow = 2, byrow = TRUE)
colnames(matrix_data) <- c("Disease Present", "Disease Absent")
rownames(matrix_data) <- c("Test Positive", "Test Negative")
kable(matrix_data, caption = "Simulated Data: Diabetes Screening")| Disease Present | Disease Absent | |
|---|---|---|
| Test Positive | 80 | 90 |
| Test Negative | 20 | 810 |
Sensitivity (True Positive Rate): The ability of the test to identify correctly those who have the disease. \[ Sensitivity = \frac{TP}{TP + FN} \times 100 \]
Specificity (True Negative Rate): The ability of the test to identify correctly those who do not have the disease. \[ Specificity = \frac{TN}{TN + FP} \times 100 \]
Positive Predictive Value (PPV): The probability that a patient with a positive test result actually has the disease. \[ PPV = \frac{TP}{TP + FP} \times 100 \]
Negative Predictive Value (NPV): The probability that a patient with a negative test result is truly free of disease. \[ NPV = \frac{TN}{TN + FN} \times 100 \]
# Calculating PPV and NPV based on the data above
ppv_calc <- (TP / (TP + FP)) * 100
npv_calc <- (TN / (TN + FN)) * 100
print(paste("PPV:", round(ppv_calc, 2), "%"))## [1] "PPV: 47.06 %"
## [1] "NPV: 97.59 %"
This is a critical concept for MBBS students. Sensitivity and Specificity are intrinsic properties of the test. However, PPV relies heavily on the prevalence of the disease.
If you screen for a rare disease (low prevalence) in the general population, your False Positives will overwhelm your True Positives, drastically lowering your PPV.
Clinical Implication: This is why we do not screen the general population for rare cancers (like Pheochromocytoma) without specific indications. A positive result is more likely to be a False Positive than a True Positive.
When evaluating if a screening program actually saves lives, we must watch out for biases.
Screening detects disease earlier than clinical presentation. Survival time is measured from diagnosis to death. If screening diagnoses a cancer 2 years earlier, but the patient dies at the same age they would have otherwise, “survival time” appears increased by 2 years, but life was not actually prolonged.
Screening tends to detect slowly progressing diseases (longer pre-clinical phase) more often than rapidly progressive diseases (short pre-clinical phase). This makes screening cases appear to have a better prognosis, simply because we “caught” the slower/milder cases.
End of Chapter ```
R install.packages(c("rmarkdown", "knitr", "ggplot2", "tidyverse")).Rmd
(e.g., Screening_Chapter.Rmd).