Neglected Tropical Diseases (NTD) Burden in Kenya

Sub-County Level Geospatial Analysis

Author

Timothy Achala

1 Overview

This report presents the sub-county level distribution of Neglected Tropical Diseases (NTDs) across Kenya’s 47 counties and 290 sub-counties. Kenya bears a significant NTD burden, with diseases such as Schistosomiasis, Lymphatic Filariasis (LF), Soil-Transmitted Helminths (STH), Visceral Leishmaniasis (Kala-azar), Trachoma, and Onchocerciasis disproportionately affecting populations in coastal, western, and arid/semi-arid regions.


Code
Sys.setenv(SHAPE_RESTORE_SHX = "YES")

shp <- st_read("ken_admin2.shp", quiet = TRUE) |>
  st_set_crs(4326)                              # WGS84


ntd <- read.csv("kenya_ntd_data.csv")

# ── Join (row order matches) 
kenya_sf <- shp |>
  bind_cols(ntd |> select(-idx))
Code
# Derive county-level boundaries for overlay
county_borders <- kenya_sf |>
  st_make_valid() |> 
  group_by(county) |>
  summarise(geometry = st_union(geometry), .groups = "drop")

2 Map 1 — NTD Composite Burden Index

The NTD Composite Index integrates prevalence across all six diseases into a single burden score. Higher values indicate areas of co-endemicity and greatest intervention priority.

Code
# Classify into 5 burden categories
kenya_sf <- kenya_sf |>
  mutate(
    burden_cat = cut(
      ntd_composite_index,
      breaks  = c(0, 4, 8, 12, 18, Inf),
      labels  = c("Very Low (0–4)", "Low (4–8)", "Moderate (8–12)",
                  "High (12–18)", "Very High (>18)"),
      include.lowest = TRUE
    )
  )

pal_burden <- c(
  "Very Low (0–4)"   = "#ffffcc",
  "Low (4–8)"        = "#fed976",
  "Moderate (8–12)"  = "#feb24c",
  "High (12–18)"     = "#f03b20",
  "Very High (>18)"  = "#7a0404"
)

ggplot() +
  # Sub-county fill
  geom_sf(data = kenya_sf, aes(fill = burden_cat),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  # County borders
  geom_sf(data = county_borders, fill = NA,
          color = "#2d3436", linewidth = 0.45) +
  scale_fill_manual(
    values = pal_burden,
    name   = "Burden Level",
    guide  = guide_legend(
      title.position = "top",
      keywidth = unit(0.5, "cm"),
      keyheight = unit(0.55, "cm"),
      override.aes = list(color = "grey50", linewidth = 0.3)
    )
  ) +
  annotation_scale(
    location   = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill  = c("white", "#2d3436"),
      line_col = "#2d3436", text_col = "#2d3436"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "Kenya — NTD Composite Burden Index",
    subtitle = "Sub-county level | All six NTDs combined",
    caption  = "Sources: Simulated data based on Kenya NTD epidemiological patterns.\nCounty boundaries overlaid in dark grey."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 1: NTD Composite Burden Index by sub-county. Red = highest burden, yellow = lowest.

3 Map 2 — Schistosomiasis Prevalence

Schistosomiasis (Bilharzia) is endemic primarily in coastal counties (Kilifi, Kwale, Mombasa, Tana River) and western Kenya (Siaya, Homa Bay, Kisumu, Busia), where communities live close to freshwater bodies.

Code
ggplot() +
  geom_sf(data = kenya_sf, aes(fill = schisto_prev),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  geom_sf(data = county_borders, fill = NA,
          color = "#2d3436", linewidth = 0.45) +
  scale_fill_distiller(
    palette  = "YlOrRd",
    direction = 1,
    name     = "Prevalence (%)",
    limits   = c(0, 50),
    breaks   = c(0, 10, 20, 30, 40, 50),
    labels   = function(x) paste0(x, "%"),
    guide    = guide_colorbar(
      title.position = "top",
      barwidth  = unit(0.4, "cm"),
      barheight = unit(4, "cm"),
      ticks.colour = "white"
    )
  ) +
  annotation_scale(
    location = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white", "#2d3436"),
      line_col = "#2d3436", text_col = "#2d3436"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "Schistosomiasis (Bilharzia) Prevalence",
    subtitle = "Sub-county level | Coastal & western Kenya hotspots",
    caption  = "Highest prevalence in Kilifi, Kwale, Siaya, Homa Bay & Busia sub-counties."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 2: Schistosomiasis prevalence (%) by sub-county.

4 Map 3 — Lymphatic Filariasis Prevalence

Lymphatic Filariasis (LF) causes elephantiasis and hydrocele, and is primarily transmitted by Culex mosquitoes in coastal Kenya. Mass Drug Administration (MDA) programs have been ongoing since 2002.

Code
ggplot() +
  geom_sf(data = kenya_sf, aes(fill = lf_prev),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  geom_sf(data = county_borders, fill = NA,
          color = "#1a1a2e", linewidth = 0.45) +
  scale_fill_distiller(
    palette   = "Blues",
    direction = 1,
    name      = "Prevalence (%)",
    limits    = c(0, 28),
    breaks    = c(0, 5, 10, 15, 20, 25),
    labels    = function(x) paste0(x, "%"),
    guide     = guide_colorbar(
      title.position = "top",
      barwidth  = unit(0.4, "cm"),
      barheight = unit(4, "cm"),
      ticks.colour = "white"
    )
  ) +
  annotation_scale(
    location = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white", "#1a1a2e"),
      line_col = "#1a1a2e", text_col = "#1a1a2e"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "Lymphatic Filariasis Prevalence",
    subtitle = "Sub-county level | Coastal belt & selected western areas",
    caption  = "MDA program active in Mombasa, Kilifi, Kwale, Malindi, Tana River & Lamu since 2002."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 3: Lymphatic Filariasis prevalence (%) by sub-county.

5 Map 4 — Soil-Transmitted Helminths (STH)

STH (hookworm, roundworm, whipworm) are the most widespread NTDs in Kenya. School-based deworming programs cover 32 endemic counties.

Code
ggplot() +
  geom_sf(data = kenya_sf, aes(fill = sth_prev),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  geom_sf(data = county_borders, fill = NA,
          color = "#2d3436", linewidth = 0.45) +
  scale_fill_distiller(
    palette   = "Greens",
    direction = 1,
    name      = "Prevalence (%)",
    limits    = c(0, 55),
    breaks    = c(0, 10, 20, 30, 40, 50),
    labels    = function(x) paste0(x, "%"),
    guide     = guide_colorbar(
      title.position = "top",
      barwidth  = unit(0.4, "cm"),
      barheight = unit(4, "cm"),
      ticks.colour = "white"
    )
  ) +
  annotation_scale(
    location = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white", "#2d3436"),
      line_col = "#2d3436", text_col = "#2d3436"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "🪱 Soil-Transmitted Helminths (STH) Prevalence",
    subtitle = "Sub-county level | School-age children most affected",
    caption  = "Kenya's National School-Based Deworming Programme (NSBDP) active since 2012.\nWestern Kenya shows highest burden."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 4: STH prevalence (%) by sub-county. School-age children most affected.

6 Map 5 — Visceral Leishmaniasis (Kala-azar)

Kala-azar is caused by Leishmania donovani and transmitted by sandflies. It is highly lethal if untreated, endemic in arid/semi-arid lands (ASAL) of Kenya, particularly Marsabit, Wajir, Mandera, Garissa, Isiolo, Baringo, and West Pokot.

Code
ggplot() +
  geom_sf(data = kenya_sf, aes(fill = vl_cases_per100k),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  geom_sf(data = county_borders, fill = NA,
          color = "#2d3436", linewidth = 0.45) +
  scale_fill_distiller(
    palette   = "Purples",
    direction = 1,
    name      = "Cases /\n100k pop",
    limits    = c(0, 18),
    breaks    = c(0, 3, 6, 9, 12, 15),
    guide     = guide_colorbar(
      title.position = "top",
      barwidth  = unit(0.4, "cm"),
      barheight = unit(4, "cm"),
      ticks.colour = "white"
    )
  ) +
  annotation_scale(
    location = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white", "#2d3436"),
      line_col = "#2d3436", text_col = "#2d3436"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "Visceral Leishmaniasis (Kala-azar)",
    subtitle = "Sub-county level | Arid & semi-arid lands of northern Kenya",
    caption  = "National Programme to Eliminate VL targets 5 million at-risk people across 12 endemic counties.\nFatal if untreated; caused by Leishmania donovani."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 5: Visceral Leishmaniasis (Kala-azar) cases per 100,000 population.

7 Map 6 — Trachoma Prevalence

Trachoma (blinding disease) is caused by Chlamydia trachomatis and is endemic in arid and pastoralist communities of northern and Rift Valley Kenya. The WHO SAFE strategy is being implemented.

Code
ggplot() +
  geom_sf(data = kenya_sf, aes(fill = trachoma_tf_prev),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  geom_sf(data = county_borders, fill = NA,
          color = "#2d3436", linewidth = 0.45) +
  scale_fill_distiller(
    palette   = "Oranges",
    direction = 1,
    name      = "TF Prevalence\n(%)",
    limits    = c(0, 35),
    breaks    = c(0, 5, 10, 15, 20, 25, 30),
    labels    = function(x) paste0(x, "%"),
    guide     = guide_colorbar(
      title.position = "top",
      barwidth  = unit(0.4, "cm"),
      barheight = unit(4, "cm"),
      ticks.colour = "white"
    )
  ) +
  # WHO 5% threshold line indicator
  annotation_scale(
    location = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white", "#2d3436"),
      line_col = "#2d3436", text_col = "#2d3436"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "Trachoma (TF) Prevalence — Children 1–9 yrs",
    subtitle = "Sub-county level | WHO elimination target: TF < 5%",
    caption  = "TF = Trachomatous Inflammation–Follicular. Highest burden in Turkana, Marsabit,\nMandera, Wajir, Garissa and West Pokot sub-counties."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 6: Trachoma follicular inflammation (TF) prevalence (%) in children 1–9 years.

8 Map 7 — MDA Coverage (%)

Mass Drug Administration (MDA) is the primary control strategy. This map shows estimated MDA coverage across sub-counties, highlighting areas that may need intervention scale-up.

Code
# Create MDA coverage categories
kenya_sf <- kenya_sf |>
  mutate(
    mda_cat = cut(
      mda_coverage_pct,
      breaks  = c(0, 50, 65, 75, 85, 100),
      labels  = c("<50% (Critical)", "50–65% (Low)", "65–75% (Fair)",
                  "75–85% (Good)", ">85% (Target)"),
      include.lowest = TRUE
    )
  )

pal_mda <- c(
  "<50% (Critical)"  = "#d73027",
  "50–65% (Low)"     = "#fc8d59",
  "65–75% (Fair)"    = "#fee090",
  "75–85% (Good)"    = "#91bfdb",
  ">85% (Target)"    = "#1a6da6"
)

ggplot() +
  geom_sf(data = kenya_sf, aes(fill = mda_cat),
          color = "white", linewidth = 0.05, alpha = 0.92) +
  geom_sf(data = county_borders, fill = NA,
          color = "#2d3436", linewidth = 0.45) +
  scale_fill_manual(
    values = pal_mda,
    name   = "MDA Coverage",
    guide  = guide_legend(
      title.position = "top",
      keywidth  = unit(0.5, "cm"),
      keyheight = unit(0.55, "cm"),
      override.aes = list(color = "grey50", linewidth = 0.3)
    )
  ) +
  annotation_scale(
    location = "bl", width_hint = 0.25,
    pad_x = unit(0.5, "cm"), pad_y = unit(0.5, "cm"),
    text_cex = 0.7, line_width = 0.8
  ) +
  annotation_north_arrow(
    location = "bl", which_north = "true",
    pad_x = unit(0.5, "cm"), pad_y = unit(1.1, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white", "#2d3436"),
      line_col = "#2d3436", text_col = "#2d3436"
    ),
    height = unit(1.2, "cm"), width = unit(1.2, "cm")
  ) +
  labs(
    title    = "Mass Drug Administration (MDA) Coverage",
    subtitle = "Sub-county level | WHO target ≥ 75% therapeutic coverage",
    caption  = "Blue = meeting or exceeding WHO target. Red = critical gaps requiring urgent intervention scale-up."
  ) +
  coord_sf(xlim = c(33.9, 42.0), ylim = c(-4.7, 5.0), expand = FALSE) +
  theme_ntd_map()

Figure 7: Mass Drug Administration (MDA) coverage (%) by sub-county.

9 Summary Statistics by County

Code
county_summary <- kenya_sf |>
  st_drop_geometry() |>
  group_by(county) |>
  summarise(
    `Sub-counties`        = n(),
    `Schisto (% mean)`    = round(mean(schisto_prev), 1),
    `LF (% mean)`         = round(mean(lf_prev), 1),
    `STH (% mean)`        = round(mean(sth_prev), 1),
    `VL (per 100k)`       = round(mean(vl_cases_per100k), 1),
    `Trachoma TF (%)`     = round(mean(trachoma_tf_prev), 1),
    `MDA Coverage (%)`    = round(mean(mda_coverage_pct), 1),
    `NTD Index (mean)`    = round(mean(ntd_composite_index), 2),
    .groups = "drop"
  ) |>
  arrange(desc(`NTD Index (mean)`))

county_summary |>
  kable(align = c("l", rep("c", ncol(county_summary) - 1))) |>
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = TRUE,
    font_size  = 12
  ) |>
  column_spec(1, bold = TRUE) |>
  column_spec(9, bold = TRUE,
              color = ifelse(county_summary$`NTD Index (mean)` >= 12,
                             "white", "black"),
              background = ifelse(county_summary$`NTD Index (mean)` >= 18, "#7a0404",
                          ifelse(county_summary$`NTD Index (mean)` >= 12, "#f03b20",
                          ifelse(county_summary$`NTD Index (mean)` >= 8,  "#feb24c",
                          ifelse(county_summary$`NTD Index (mean)` >= 4,  "#fed976",
                                 "#ffffcc"))))) |>
  add_header_above(c(" " = 2,
                     "NTD Prevalence Indicators" = 5,
                     "Intervention" = 1,
                     "Burden" = 1)) |>
  scroll_box(height = "450px")
Table 1: NTD burden summary by county — sorted by composite index
NTD Prevalence Indicators
Intervention
Burden
county Sub-counties Schisto (% mean) LF (% mean) STH (% mean) VL (per 100k) Trachoma TF (%) MDA Coverage (%) NTD Index (mean)
Mombasa 6 35.3 15.2 30.0 0.5 2.5 70.4 20.09
Taita Taveta 4 27.3 21.0 34.5 0.7 3.0 63.3 19.75
Tana River 3 27.1 16.2 25.3 6.3 13.7 48.5 18.54
Kwale 4 32.0 13.7 27.9 0.4 3.2 66.4 18.39
Kilifi 7 29.5 15.2 28.9 0.4 1.8 71.1 18.02
Lamu 2 28.6 21.6 19.4 0.2 3.5 74.8 17.21
Siaya 6 23.6 5.2 39.2 0.5 3.0 69.8 17.05
Bungoma 9 26.8 5.0 34.8 0.5 2.0 57.7 16.87
Vihiga 5 19.7 5.5 40.3 0.6 3.3 68.9 16.13
Homa Bay 8 23.6 4.5 34.4 0.6 2.8 67.6 15.28
Kisii 9 24.7 2.7 33.8 0.5 2.1 74.1 15.08
Kisumu 7 18.9 5.4 39.8 0.4 2.5 75.3 15.07
Kakamega 12 20.4 5.3 34.3 0.6 2.1 75.7 14.97
Migori 8 21.0 4.0 36.4 0.4 2.6 61.8 14.77
Busia 7 16.2 5.8 28.8 0.4 3.3 61.8 12.27
Garissa 6 2.5 1.4 11.2 10.0 25.5 49.2 6.91
Turkana 6 2.6 1.8 10.8 9.7 22.8 53.3 6.67
Marsabit 4 3.4 2.0 11.7 11.6 15.7 54.7 6.57
Samburu 3 2.7 1.9 10.8 8.5 19.8 44.3 6.30
Laikipia 3 7.0 2.4 11.7 0.5 11.5 69.9 6.19
Mandera 6 3.6 1.7 8.7 7.0 21.7 58.6 6.18
West Pokot 4 1.0 2.3 10.0 8.6 22.6 52.9 6.00
Wajir 6 2.5 1.7 10.1 9.2 17.9 47.3 5.92
Nandi 6 5.9 1.9 12.0 0.4 3.0 77.3 5.86
Meru 9 8.4 1.6 10.2 3.2 2.0 60.2 5.47
Baringo 6 2.1 1.6 8.1 10.1 17.6 45.1 5.43
Kitui 8 7.6 1.5 11.3 2.3 2.7 67.7 5.43
Trans Nzoia 5 6.9 1.1 9.5 0.4 3.0 76.0 5.25
Narok 6 8.3 1.6 9.6 0.5 2.9 65.1 5.18
Nairobi 17 6.8 1.4 12.3 0.4 2.2 68.1 5.14
Embu 4 6.8 1.2 10.2 3.0 3.5 62.0 5.07
Uasin Gishu 6 7.8 1.2 10.0 0.5 2.9 65.1 4.98
Kiambu 12 7.2 1.6 10.5 0.6 2.4 73.0 4.94
Kericho 6 7.7 1.1 9.7 0.6 2.4 65.6 4.88
Nyandarua 5 8.0 1.8 8.1 0.5 3.3 64.7 4.83
Machakos 8 6.5 0.7 10.6 2.6 2.9 63.8 4.82
Elgeyo Marakwet 4 8.8 1.8 7.3 0.3 1.4 56.3 4.73
Makueni 6 6.2 1.4 11.1 0.4 1.9 60.2 4.70
Isiolo 3 2.5 0.9 7.3 7.6 14.5 48.7 4.68
Tharaka Nithi 3 6.0 2.3 9.9 0.6 2.6 82.7 4.63
Muranga 7 6.9 1.4 9.2 0.5 2.7 74.3 4.61
Nyeri 8 5.8 1.2 10.7 0.6 2.7 63.7 4.58
Nakuru 11 7.0 1.7 8.7 0.5 2.3 59.9 4.53
Bomet 5 6.9 0.9 9.3 0.4 2.6 73.7 4.52
Kirinyaga 5 6.2 1.8 7.6 0.6 3.6 56.2 4.22
Kajiado 5 6.2 1.9 6.5 0.5 3.3 63.7 4.01

10 Interpretation & Implications

10.1 Key Findings

Important

Priority intervention counties (NTD Index > 12): These sub-counties require immediate intensification of MDA, WASH improvements, and targeted disease-specific interventions.

Note

Co-endemicity: Many western and coastal sub-counties carry simultaneous burdens of Schistosomiasis, LF, and STH — requiring integrated platform delivery to optimize resource use.

Tip

MDA coverage gaps: Sub-counties with coverage below 65% are unlikely to reach WHO elimination thresholds regardless of drug availability — community engagement must be strengthened.

10.2 Disease-Specific Highlights

Disease Primary Hotspots WHO Target
Schistosomiasis Kilifi, Kwale, Siaya, Homa Bay, Busia Prevalence < 1% (heavy infections)
Lymphatic Filariasis Mombasa, Kilifi, Kwale, Tana River, Lamu Mf prevalence < 1%
STH Western Kenya (Kakamega, Bungoma, Siaya) Moderate-heavy < 2%
Visceral Leishmaniasis Marsabit, Turkana, Wajir, Mandera, Garissa < 1 case/10,000
Trachoma Turkana, Marsabit, West Pokot, Baringo TF < 5% in children
Onchocerciasis Nzoia basin (Kakamega, Bungoma, Nandi) Elimination