This is a R Markdown report for the Confirmatory Mapping of Lymphatic Filariasis in Lagos, Southwestern Nigeria.
This mapping adopted the laboratoty procedures recommended by the World Health Organization.
Findings have been used to adjust preventive chemotheraphy decisions in Lagos
This reports have been submitted to International Journal of Infectious Diseases, and have passed the second round of review at the
We conducted a confirmatory mapping survey to reassess the endemicity of lymphatic filariasis in Lagos State, Nigeria. Finger-prick blood samples were collected from 2787 children aged 10-14years in 6 endemic LGAs across 153 targeted schools. Circulating filarial antigen (CFA) levels were measured using the Filaria Test Strip (FTS), and LGAs were classified as endemic if there were up to three positive cases (d=3). The findings from this study are expected to shape the need to reintroduce mass treatment campaigns of ivermectin medicines and optimize delivery of bed-nets
mrc2 <- read_xls("D:/Manuscript/lf lagos/submission/R1/S1data.xls",
sheet = "data", col_types = "text")
I ran a quick view of the entire dataset, to identify the variables I needed are included in the dataset, and also their current data structure and any missing value (NA)
My focus is on the following variables consent, lga, test_s, prev, itn, sitn, res, age, los, ele
View(mrc2)
Here, I cleaned the imported dataset, setting the categories (factors/numeric, and creating appropriate levels and labels
I ran a quick view of the entire dataset, ensuring the levels are appropriately set.
summary(mrc2)
## start end lga lgac
## Length:2900 Length:2900 Eti Osa :374 EtiOsa :374
## Class :character Class :character Ikorodu :478 Ikorodu :478
## Mode :character Mode :character Kosofe :624 Kosofe :624
## Mushin :517 Mushin :517
## Oshodi isolo:505 Oshodi :505
## Surulere :402 Surulere:402
##
## com sch y x
## Itire : 123 Length:2900 Length:2900 Length:2900
## Ikoyi : 82 Class :character Class :character Class :character
## Isolo : 80 Mode :character Mode :character Mode :character
## Ilasamaja: 78
## Ikosi : 75
## Ilupeju : 73
## (Other) :2389
## sdate FTS_LOT FTS_EXP age
## Length:2900 Length:2900 Length:2900 Min. : 7.00
## Class :character Class :character Class :character 1st Qu.:10.00
## Mode :character Mode :character Mode :character Median :11.00
## Mean :11.59
## 3rd Qu.:13.00
## Max. :16.00
##
## consent sex test_s prev itn sitn
## No : 24 Male :1299 invalid: 113 Negative:2732 No :1836 No : 475
## Yes:2876 Female:1601 valid :2787 Positive: 55 Yes:1064 Yes : 589
## NA's : 113 NA's:1836
##
##
##
##
## res los ivm ele
## No : 9 Min. : 1.000 Never :1494 0 : 741
## Yes:2891 1st Qu.: 2.000 last 6 months: 40 1 : 80
## Median : 5.000 last 1 year : 8 NA's:2079
## Mean : 5.936 over a year : 17
## 3rd Qu.:10.000 NA's :1341
## Max. :16.000
## NA's :9
I created two new columns to group “los”; length of residency and “age” into categories.
I further set them as factors and assigned clear levels and labels
mrc2<-mrc2 %>% mutate(cat_los=case_when(
los %in% 1: 5 ~ "1",
los %in% 6: 10 ~ "2",
los %in% 11: 16 ~ "3",
))
mrc2<-mrc2 %>% mutate(cat_age=case_when(
age %in% 7: 10 ~ "1",
age %in% 11: 13 ~ "2",
age %in% 14: 16 ~ "3",
))
mrc2$cat_age = factor(mrc2$cat_age,levels=c("1","2","3"),labels = c("7-10","11-13","14-16"))
mrc2$cat_los = factor(mrc2$cat_los,levels=c("1","2","3"),labels = c("1-5","6-10","11-16"))
age <- summary(mrc2$cat_age)
age
## 7-10 11-13 14-16
## 835 1729 336
plot(mrc2$cat_age)
los <- summary(mrc2$cat_los)
los
## 1-5 6-10 11-16 NA's
## 1557 861 473 9
plot(mrc2$cat_los)
mrc2 <- mrc2 %>% filter (consent != "No", test_s != "invalid")
summary(mrc2)
## start end lga lgac
## Length:2787 Length:2787 Eti Osa :346 EtiOsa :346
## Class :character Class :character Ikorodu :472 Ikorodu :472
## Mode :character Mode :character Kosofe :612 Kosofe :612
## Mushin :479 Mushin :479
## Oshodi isolo:492 Oshodi :492
## Surulere :386 Surulere:386
##
## com sch y x
## Itire : 118 Length:2787 Length:2787 Length:2787
## Isolo : 78 Class :character Class :character Class :character
## Ilasamaja: 76 Mode :character Mode :character Mode :character
## KETU : 71
## Maryland : 71
## Ilupeju : 70
## (Other) :2303
## sdate FTS_LOT FTS_EXP age
## Length:2787 Length:2787 Length:2787 Min. : 7.00
## Class :character Class :character Class :character 1st Qu.:10.00
## Mode :character Mode :character Mode :character Median :11.00
## Mean :11.59
## 3rd Qu.:13.00
## Max. :16.00
##
## consent sex test_s prev itn sitn
## No : 0 Male :1255 invalid: 0 Negative:2732 No :1756 No : 457
## Yes:2787 Female:1532 valid :2787 Positive: 55 Yes:1031 Yes : 574
## NA's:1756
##
##
##
##
## res los ivm ele cat_los
## No : 8 Min. : 1.000 Never :1412 0 : 689 1-5 :1509
## Yes:2779 1st Qu.: 2.000 last 6 months: 40 1 : 79 6-10 : 818
## Median : 5.000 last 1 year : 8 NA's:2019 11-16: 452
## Mean : 5.909 over a year : 17 NA's : 8
## 3rd Qu.:10.000 NA's :1310
## Max. :16.000
## NA's :8
## cat_age
## 7-10 : 803
## 11-13:1656
## 14-16: 328
##
##
##
##
note: i wouldnt be needing the subsets in this report.
#separating the LGA, so i can perform separate analysis for them
EO <- mrc2[mrc2$lgac == "EtiOsa", ]
Ik <- mrc2[mrc2$lgac == "Ikorodu", ]
KO <- mrc2[mrc2$lgac == "Kosofe", ]
MU <- mrc2[mrc2$lgac == "Mushin", ]
OS <- mrc2[mrc2$lgac == "Oshodi", ]
SU <- mrc2[mrc2$lgac == "Surulere", ]
All data (n=2900) were downloaded in Microsoft Excel and imported into R Studio (version 4.3.2) for analysis. Data were filtered to remove any records of participants who did not consent to participate in the study (n=24), and those whose test results were invalid (n=113). For parasitological data, results were summarized by LGA, with classification as non-endemic if the number of positive cases was less than or equal to the critical cutoff (3), indicating that MDA was not required in such LGA. Conversely, if the number of positive cases exceeded 3, the LGA was deemed endemic, warranting continued MDA implementation. Descriptive statistics were used to summarize all other variables, and associations were examined using chi-square tests, with a focus on demographic data, ownership and utilization of ITNs, and length of residency within communities. Sub-analyses were conducted on positive cases to identify associated demographic characteristics. All associations were assessed at a 95% significance level. The distribution of positive cases by age and gender were mapped using ggplot2 and alluvial packages, while the maps of the study area were plotted using ArcGIS v10.8 software
knitr::include_graphics("D:/Manuscript/lf lagos/submission/R1/Fig1.png")
A total of 2,787 children aged 7-16years from 153 schools across 6 implementation units (herein referred to as LGAs) participated in this study. There were significantly more female participants across the LGAs to males (59.8% vs 40.2%, p= 0.015). Similarly, for age, there were significant differences across the LGAs (p=0.000), with more participants recruited within the lower age group (7-10years).
options(na.action = "na.omit")
theme_gtsummary_journal("jama")
Newtable1 <-
mrc2 %>% filter(!is.na(lgac)) %>%
dplyr::select(lgac,sex,cat_age) %>%
tbl_summary(
by = lgac,
label = NULL,
percent = "column",
type = list(c() ~ "continuous",
all_dichotomous() ~ "categorical"),
statistic = list(all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} ({p}%)"),
digits = list(all_categorical()~c(0,1))
)%>%
add_ci(
method = all_dichotomous() ~ "exact",
conf.level = 0.95,
) %>%
modify_fmt_fun(
estimate = all_categorical() ~ style_number(digits = 1),
conf.low = all_categorical() ~ style_number(digits = 1),
conf.high = all_categorical() ~ style_number(digits = 1)
) %>%
add_p(test =
list(all_continuous() ~ "aov", all_categorical() ~ "chisq.test"),
pvalue_fun = ~style_pvalue(.x, digits = 2)) %>%
bold_p() %>%
bold_labels() %>%
add_overall(col_label= "**Responses**, N = {N}") %>%
modify_footnote(
all_stat_cols() ~ "Mean (SD) or Frequency (%)")
Newtable1
| Characteristic | Responses, N = 27871 | EtiOsa N = 3461 |
95% CI | Ikorodu N = 4721 |
95% CI | Kosofe N = 6121 |
95% CI | Mushin N = 4791 |
95% CI | Oshodi N = 4921 |
95% CI | Surulere N = 3861 |
95% CI | p-value2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sex, n (%) | 0.015 | |||||||||||||
| Male | 1,255 (45.0%) | 139 (40.2%) | 35%, 46% | 189 (40.0%) | 36%, 45% | 292 (47.7%) | 44%, 52% | 237 (49.5%) | 45%, 54% | 218 (44.3%) | 40%, 49% | 180 (46.6%) | 42%, 52% | |
| Female | 1,532 (55.0%) | 207 (59.8%) | 54%, 65% | 283 (60.0%) | 55%, 64% | 320 (52.3%) | 48%, 56% | 242 (50.5%) | 46%, 55% | 274 (55.7%) | 51%, 60% | 206 (53.4%) | 48%, 58% | |
| cat_age, n (%) | <0.001 | |||||||||||||
| 7-10 | 803 (28.8%) | 93 (26.9%) | 22%, 32% | 104 (22.0%) | 18%, 26% | 146 (23.9%) | 21%, 27% | 180 (37.6%) | 33%, 42% | 159 (32.3%) | 28%, 37% | 121 (31.3%) | 27%, 36% | |
| 11-13 | 1,656 (59.4%) | 195 (56.4%) | 51%, 62% | 279 (59.1%) | 55%, 64% | 384 (62.7%) | 59%, 67% | 275 (57.4%) | 53%, 62% | 295 (60.0%) | 55%, 64% | 228 (59.1%) | 54%, 64% | |
| 14-16 | 328 (11.8%) | 58 (16.8%) | 13%, 21% | 89 (18.9%) | 15%, 23% | 82 (13.4%) | 11%, 16% | 24 (5.0%) | 3.3%, 7.5% | 38 (7.7%) | 5.6%, 11% | 37 (9.6%) | 6.9%, 13% | |
| Abbreviation: CI = Confidence Interval | ||||||||||||||
| 1 Mean (SD) or Frequency (%) | ||||||||||||||
| 2 Pearson’s Chi-squared test | ||||||||||||||
Findings The positivity rates varied across the LGAs: Surulere had 5 cases (1.36%, 95% CI 0.5-3.2%), Mushin reported 9 cases (1.9%, 95% CI 0.9-3.7%), Kosofe had 10 cases (1.6%, 95% CI 0.8-3.1%), Oshodi had 8 cases (1.6%, 95% CI 0.8-3.3%), Eti-Osa had 9 cases (2.6%, 95% CI 1.3-5.1%), and Ikorodu had 14 cases (3.0%, 95% CI 1.7-5.0%). The number of positive cases exceeded 3 in each LGA, hence the LGA was deemed endemic, warranting continued MDA implementation.
options(na.action = "na.omit")
theme_gtsummary_journal("jama")
Newtable2 <-
mrc2 %>% filter(!is.na(lgac)) %>%
dplyr::select(lgac,prev) %>%
tbl_summary(
by = prev,
label = NULL,
percent = "row",
type = list(c() ~ "continuous",
all_dichotomous() ~ "categorical"),
statistic = list(all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} ({p}%)"),
digits = list(all_categorical()~c(0,1))
)%>%
add_ci(
method = all_dichotomous() ~ "exact",
conf.level = 0.95,
) %>%
modify_fmt_fun(
estimate = all_categorical() ~ style_number(digits = 1),
conf.low = all_categorical() ~ style_number(digits = 1),
conf.high = all_categorical() ~ style_number(digits = 1)
) %>%
add_p(test =
list(all_continuous() ~ "aov", all_categorical() ~ "chisq.test"),
pvalue_fun = ~style_pvalue(.x, digits = 2)) %>%
bold_p() %>%
bold_labels() %>%
add_overall(col_label= "**Responses**, N = {N}") %>%
modify_footnote(
all_stat_cols() ~ "Mean (SD) or Frequency (%)")
Newtable2
| Characteristic | Responses, N = 27871 | Negative N = 2,7321 |
95% CI | Positive N = 551 |
95% CI | p-value2 |
|---|---|---|---|---|---|---|
| lgac, n (%) | 0.45 | |||||
| EtiOsa | 346 (100.0%) | 337 (97.4%) | 95%, 99% | 9 (2.6%) | 1.3%, 5.1% | |
| Ikorodu | 472 (100.0%) | 458 (97.0%) | 95%, 98% | 14 (3.0%) | 1.7%, 5.0% | |
| Kosofe | 612 (100.0%) | 602 (98.4%) | 97%, 99% | 10 (1.6%) | 0.83%, 3.1% | |
| Mushin | 479 (100.0%) | 470 (98.1%) | 96%, 99% | 9 (1.9%) | 0.92%, 3.7% | |
| Oshodi | 492 (100.0%) | 484 (98.4%) | 97%, 99% | 8 (1.6%) | 0.76%, 3.3% | |
| Surulere | 386 (100.0%) | 381 (98.7%) | 97%, 100% | 5 (1.3%) | 0.48%, 3.2% | |
| Abbreviation: CI = Confidence Interval | ||||||
| 1 Mean (SD) or Frequency (%) | ||||||
| 2 Pearson’s Chi-squared test | ||||||
The proportion of those who own ITN was significantly low across the LGAs, ranging from 34.2%-42.5% (p =0.000), and almost half of those who owned ITN did not sleep on it the previous night before the survey (range: 39.9% - 56.2%, p =0.0020). Also, most of the children were residents (99.7%), majority (54.3%) had lived in the LGAs for 1-5 years spent, and most had never swallowed either ivermectin or albendazole
options(na.action = "na.omit")
theme_gtsummary_journal("jama")
Newtable3 <-
mrc2 %>% filter(!is.na(lgac)) %>%
dplyr::select(lgac,itn,sitn,res,cat_los,ivm) %>%
tbl_summary(
by = lgac,
label = NULL,
percent = "column",
type = list(c() ~ "continuous",
all_dichotomous() ~ "categorical"),
statistic = list(all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} ({p}%)"),
digits = list(all_categorical()~c(0,1))
)%>%
add_ci(
method = all_dichotomous() ~ "exact",
conf.level = 0.95,
) %>%
modify_fmt_fun(
estimate = all_categorical() ~ style_number(digits = 1),
conf.low = all_categorical() ~ style_number(digits = 1),
conf.high = all_categorical() ~ style_number(digits = 1)
) %>%
add_p(test =
list(all_continuous() ~ "aov", all_categorical() ~ "chisq.test"),
pvalue_fun = ~style_pvalue(.x, digits = 2)) %>%
bold_p() %>%
bold_labels() %>%
add_overall(col_label= "**Responses**, N = {N}") %>%
modify_footnote(
all_stat_cols() ~ "Mean (SD) or Frequency (%)")
Newtable3
| Characteristic | Responses, N = 27871 | EtiOsa N = 3461 |
95% CI | Ikorodu N = 4721 |
95% CI | Kosofe N = 6121 |
95% CI | Mushin N = 4791 |
95% CI | Oshodi N = 4921 |
95% CI | Surulere N = 3861 |
95% CI | p-value2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| itn, n (%) | 0.17 | |||||||||||||
| No | 1,756 (63.0%) | 199 (57.5%) | 52%, 63% | 303 (64.2%) | 60%, 68% | 376 (61.4%) | 57%, 65% | 315 (65.8%) | 61%, 70% | 319 (64.8%) | 60%, 69% | 244 (63.2%) | 58%, 68% | |
| Yes | 1,031 (37.0%) | 147 (42.5%) | 37%, 48% | 169 (35.8%) | 32%, 40% | 236 (38.6%) | 35%, 43% | 164 (34.2%) | 30%, 39% | 173 (35.2%) | 31%, 40% | 142 (36.8%) | 32%, 42% | |
| sitn, n (%) | 0.002 | |||||||||||||
| No | 457 (44.3%) | 49 (33.3%) | 26%, 42% | 95 (56.2%) | 48%, 64% | 104 (44.1%) | 38%, 51% | 77 (47.0%) | 39%, 55% | 69 (39.9%) | 33%, 48% | 63 (44.4%) | 36%, 53% | |
| Yes | 574 (55.7%) | 98 (66.7%) | 58%, 74% | 74 (43.8%) | 36%, 52% | 132 (55.9%) | 49%, 62% | 87 (53.0%) | 45%, 61% | 104 (60.1%) | 52%, 67% | 79 (55.6%) | 47%, 64% | |
| Unknown | 1,756 | 199 | 303 | 376 | 315 | 319 | 244 | |||||||
| res, n (%) | 0.34 | |||||||||||||
| No | 8 (0.3%) | 0 (0.0%) | 0.00%, 1.4% | 2 (0.4%) | 0.07%, 1.7% | 4 (0.7%) | 0.21%, 1.8% | 1 (0.2%) | 0.01%, 1.3% | 0 (0.0%) | 0.00%, 0.97% | 1 (0.3%) | 0.01%, 1.7% | |
| Yes | 2,779 (99.7%) | 346 (100.0%) | 99%, 100% | 470 (99.6%) | 98%, 100% | 608 (99.3%) | 98%, 100% | 478 (99.8%) | 99%, 100% | 492 (100.0%) | 99%, 100% | 385 (99.7%) | 98%, 100% | |
| cat_los, n (%) | 0.23 | |||||||||||||
| 1-5 | 1,509 (54.3%) | 191 (55.2%) | 50%, 60% | 249 (53.0%) | 48%, 58% | 330 (54.3%) | 50%, 58% | 249 (52.1%) | 48%, 57% | 275 (55.9%) | 51%, 60% | 215 (55.8%) | 51%, 61% | |
| 6-10 | 818 (29.4%) | 101 (29.2%) | 25%, 34% | 135 (28.7%) | 25%, 33% | 161 (26.5%) | 23%, 30% | 159 (33.3%) | 29%, 38% | 146 (29.7%) | 26%, 34% | 116 (30.1%) | 26%, 35% | |
| 11-16 | 452 (16.3%) | 54 (15.6%) | 12%, 20% | 86 (18.3%) | 15%, 22% | 117 (19.2%) | 16%, 23% | 70 (14.6%) | 12%, 18% | 71 (14.4%) | 12%, 18% | 54 (14.0%) | 11%, 18% | |
| Unknown | 8 | 0 | 2 | 4 | 1 | 0 | 1 | |||||||
| ivm, n (%) | <0.001 | |||||||||||||
| Never | 1,412 (95.6%) | 288 (97.6%) | 95%, 99% | 293 (98.7%) | 96%, 100% | 262 (98.5%) | 96%, 100% | 234 (96.7%) | 93%, 98% | 173 (86.1%) | 80%, 90% | 162 (92.0%) | 87%, 95% | |
| last 6 months | 40 (2.7%) | 4 (1.4%) | 0.44%, 3.7% | 4 (1.3%) | 0.43%, 3.6% | 4 (1.5%) | 0.48%, 4.1% | 7 (2.9%) | 1.3%, 6.1% | 10 (5.0%) | 2.5%, 9.2% | 11 (6.3%) | 3.3%, 11% | |
| last 1 year | 8 (0.5%) | 1 (0.3%) | 0.02%, 2.2% | 0 (0.0%) | 0.00%, 1.6% | 0 (0.0%) | 0.00%, 1.8% | 0 (0.0%) | 0.00%, 1.9% | 6 (3.0%) | 1.2%, 6.7% | 1 (0.6%) | 0.03%, 3.6% | |
| over a year | 17 (1.2%) | 2 (0.7%) | 0.12%, 2.7% | 0 (0.0%) | 0.00%, 1.6% | 0 (0.0%) | 0.00%, 1.8% | 1 (0.4%) | 0.02%, 2.6% | 12 (6.0%) | 3.3%, 10% | 2 (1.1%) | 0.20%, 4.5% | |
| Unknown | 1,310 | 51 | 175 | 346 | 237 | 291 | 210 | |||||||
| Abbreviation: CI = Confidence Interval | ||||||||||||||
| 1 Mean (SD) or Frequency (%) | ||||||||||||||
| 2 Pearson’s Chi-squared test | ||||||||||||||
I filtered out all children who tested negative, so have more deeper insights into profile of those who where sero-positive.
More females were CFA-positive (28, 50.9%) compared to males (27, 49.1%) (p = 0.82).
mrc2 <- mrc2 %>% filter (prev != "Negative")
prop_data <- mrc2 %>%
filter(!is.na(sex), !is.na(lgac)) %>%
group_by(lgac, sex) %>%
summarise(n = n()) %>%
mutate(prop = n / sum(n))
# Step 2: Plot the proportions using ggplot
g1 <- ggplot(prop_data, aes(x = lgac, y = prop, fill = sex)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
aes(label = scales::percent(prop, accuracy = 0.1)),
position = position_stack(vjust = 0.5),
size = 3.5,
color = "black"
) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_fill_manual(values = c("Male" = "lightgreen", "Female" = "lightblue")) + # blue & greylabs(x = "Local Governemnt Areas", y = "CFA positivity (%)", fill = "Sex") +
labs(x = "Local Government Areas", y = "CFA positivity", fill = "Sex") +
theme(
panel.grid.major.y = element_line(color = "gray80", linetype = "dashed"),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
panel.background = element_blank(),
plot.background = element_rect(fill= "white"),
axis.line = element_line(color = "gray40"),
axis.title = element_text(size=10),
axis.text.x = element_text(size=10, angle = 45, hjust = 1),
axis.text.y = element_text(size =10),
legend.position = "right",
legend.text = element_text(size = 10),
legend.title = element_text(size = 10)
)
g1
Regarding age distribution, the highest proportion of CFA-positive children were between 11–13 years (39, 70.9%), followed by those aged 7–10 years (11, 20.0%), and 14–16 years (5, 9.1%)(p = 0.60)
prop_data3 <- mrc2 %>%
filter(!is.na(cat_age), !is.na(lgac)) %>%
group_by(lgac, cat_age) %>%
summarise(n = n()) %>%
mutate(prop = n / sum(n))
# Step 2: Plot the proportions using ggplot
g2 <- ggplot(prop_data3, aes(x = lgac, y = prop, fill = cat_age)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
aes(label = scales::percent(prop, accuracy = 0.1)),
position = position_stack(vjust = 0.5),
size = 3.5,
color = "black"
) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_fill_manual(values = c("7-10" = "lightgreen", "11-13" = "lightblue","14-16"="grey" )) + # blue & greylabs(x = "Local Governemnt Areas", y = "CFA positivity (%)", fill = "Sex") +
labs(x = "Local Government Areas", y = "CFA positivity", fill = "Age category (in years)") +
theme(
panel.grid.major.y = element_line(color = "gray80", linetype = "dashed"),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
panel.background = element_blank(),
plot.background = element_rect(fill= "white"),
axis.line = element_line(color = "gray40"),
axis.title = element_text(size=10),
axis.text.x = element_text(size=10, angle = 45, hjust = 1),
axis.text.y = element_text(size =10),
legend.position = "right",
legend.text = element_text(size = 10),
legend.title = element_text(size = 10)
)
g2
In terms of residency status, most children (31, 56.4%) had lived in their current LGA for 1–5 years, particularly in Ikorodu (7, 50.0%), Kosofe (8, 80.0%), Oshodi (7, 87.5%), and Surulere (4, 80.0%). In contrast, most children in Mushin (77%) and Eti-Osa (66%) had resided in their communities for 6–14 years. However, there was no significant difference in length of residency across the LGAs (p = 0.07) (Table 3).
prop_data4 <- mrc2 %>%
filter(!is.na(cat_los), !is.na(lgac)) %>%
group_by(lgac, cat_los) %>%
summarise(n = n()) %>%
mutate(prop = n / sum(n))
# Step 2: Plot the proportions using ggplot
g4 <- ggplot(prop_data4, aes(x = lgac, y = prop, fill = cat_los)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
aes(label = scales::percent(prop, accuracy = 0.1)),
position = position_stack(vjust = 0.5),
size = 3.5,
color = "black"
) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_fill_manual(values = c("1-5" = "lightgreen", "6-10" = "lightblue", "11-14"="grey")) + # blue & greylabs(x = "Local Governemnt Areas", y = "CFA positivity (%)", fill = "Length of residency") +
labs(x = "Local Government Areas", y = "CFA positivity", fill = "Length of Residency") +
theme(
panel.grid.major.y = element_line(color = "gray80", linetype = "dashed"),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
panel.background = element_blank(),
plot.background = element_rect(fill= "white"),
axis.line = element_line(color = "gray40"),
axis.title = element_text(size=10),
axis.text.x = element_text(size=10, angle = 45, hjust = 1),
axis.text.y = element_text(size =10),
legend.position = "right",
legend.text = element_text(size = 10),
legend.title = element_text(size = 10)
)
g4
Ownership of insecticide-treated nets (ITNs) was generally low (14, 25.5%) and not significantly different across LGAs (p = 0.39). Most LGAs had ownership rates below 35%, with the lowest observed in Oshodi (12.5%), Ikorodu (14.3%), Mushin (22.2%), Kosofe (30.0%), Eti-Osa (33.3%), and Surulere (60.0%).
prop_data5 <- mrc2 %>%
filter(!is.na(itn), !is.na(lgac)) %>%
group_by(lgac,itn) %>%
summarise(n = n()) %>%
mutate(prop = n / sum(n))
# Step 2: Plot the proportions using ggplot
g6 <- ggplot(prop_data5, aes(x = lgac, y = prop, fill = itn)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
aes(label = scales::percent(prop, accuracy = 0.1)),
position = position_stack(vjust = 0.5),
size = 3.5,
color = "black"
) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_fill_manual(values = c("No" = "blue", "Yes" = "green")) + # blue & greylabs(x = "Local Governemnt Areas", y = "CFA positivity (%)", fill = "Length of residency") +
labs(x = "Local Government Areas", y = "CFA positivity", fill = "Ownership of Bed-nets") +
theme(
panel.grid.major.y = element_line(color = "gray80", linetype = "dashed"),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
panel.background = element_blank(),
plot.background = element_rect(fill= "white"),
axis.line = element_line(color = "gray40"),
axis.title = element_text(size=10),
axis.text.x = element_text(size=10, angle = 45, hjust = 1),
axis.text.y = element_text(size =10),
legend.position = "right",
legend.text = element_text(size = 10),
legend.title = element_text(size = 10)
)
g6
Among participants aged 7–10 years, 81.8% had lived in the LGAs for 1-5 years, while the remaining 18.2% had lived for 6–10 years. Notably, 18.2% of this age group did not own an ITN. For those aged 11–13 years, 53.8% had resided in the LGAs for 1–5 years, and 46.2% for 6–16 years. Notably, 74.4% of this age group did not own an ITN. Among older children aged 14–16 years, the majority (60%) had lived in their communities for 11–16 years, while the remaining 40% were evenly split between 1–5 and 6–10 years of residence. In this group, 60% did not own an ITN
sankey_data <- mrc2 %>%
count(cat_age, cat_los, itn) %>%
group_by(cat_age) %>%
mutate(freq = n,
prop = n / sum(n),
label=paste0(scales::percent(prop, accuracy=0.1)))%>%
ungroup()
# Plot Sankey (alluvial) diagram
g9 <- ggplot(sankey_data,
aes(axis1 = cat_age, axis2 = cat_los, axis3 = itn, y = freq)) +
geom_alluvium(aes(fill = cat_age), width = 1/12, alpha=0.7) +
geom_stratum(width = 1/12, fill = "grey80", color = "black") +
geom_text(stat = "stratum", aes(label = after_stat(stratum)), size = 3.5) +
scale_x_discrete(limits = c("Age", "Years of Residence", "Owns ITN"),
expand = c(.05, .05)) +
scale_fill_brewer(type = "qual", palette = "Set2") +
labs(title = "Flow of CFA-Positive Children", y = "Number of Participants", x = "Categories", fill = "Age Category") +
theme(
panel.grid.major.y = element_line(color = "gray80", linetype = "dashed"),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
panel.background = element_blank(),
plot.background = element_rect(fill= "white"),
axis.line = element_line(color = "gray40"),
axis.title = element_text(size=10),
axis.text.x = element_text(size=10, hjust = 1),
axis.text.y = element_text(size =10),
legend.position = "bottom",
legend.text = element_text(size = 10),
legend.title = element_text(size = 10)
)
g9
## Hammed Mogaji, PhD; Collaborators: Federal Ministry of Health;
Nigerian Institute of Medical Health; Funding: Sightsavers, UK &
MITOSATH