Skip to contents

There are many different metrics associated with measuring bed net “coverage”.

These metrics are summarised in an excellent paper by Amelia Bertozzi-Villa and collegues:

Bertozzi-Villa, Amelia, et al. Nature communications 12.1 (2021): 1-12, please check it out and make sure to cite appropriately if you use this package.

We define them here as:

  • Usage: The proportion of the population with a net who slept under it.

  • Access: The proportion of the population who live in a household where they could sleep under a bed net.

  • Crop: The number of nets in the population. Always expressed as nets per capita.

  • Distribution: The number of nets distributed. Always expressed as nets per capita.

Being able to convert between these metrics is useful for a number of reasons:

  • If you have data for one, but need information for another
  • If a specific metric is requested as an output
  • If you are trying to align with estimates that use the same underlying model
  • If your work requires costing of bed net distributions

Conversion steps

The conversion from net usage to annual nets distributed per capita occurs in the following steps:

Usage ⬅️➡️ Access

Convert between net usage and net access using either an estimated country-specific
or a user-specified use rate. By definition, net use rate = net usage/net access.

Access ⬅️➡️ Crop

Convert between net access and net crop using either a linear-relationship based on the number of people that can use one net, or a Loess curve fitted to the observed relationship between these two metrics across sub-Saharan Africa.

Crop ⬅️➡️ Distribution

Convert between net crop and net distributions accounting for net distribution timing and net loss over time.

Conversion example

We can demonstrate an example of a simple conversion of this kind

# Create some example data for net usage in Nigeria over 4 years
iso3c <- "NGA"
years <- 2000:2003
usage <- c(0.1, 0.2, 0.6, 0.5)
output <- 
  data.frame(
    year = years,
    iso3c = iso3c,
    usage = usage
  )

# Access the estimates of usage rate and net-retention half life for Nigeria
usage_rate <- get_usage_rate(iso3c)
half_life <- get_halflife(iso3c)

# Use the nets functionality to convert usage ➡️ acesss ➡️ crop ➡️ distribution
output$access <- usage_to_access(
  usage = output$usage, 
  use_rate = usage_rate
  )
output$crop <- access_to_crop(
  access = output$access,
  type = "loess"
  )
output$distribution <- crop_to_distribution(
  crop = output$crop,
  crop_timesteps = (output$year + 0.5) * 365,
  distribution_timesteps = (output$year) * 365,
  half_life = half_life
)

output
#>   year iso3c usage    access       crop distribution
#> 1 2000   NGA   0.1 0.1136881 0.06813548   0.07048166
#> 2 2001   NGA   0.2 0.2273763 0.13627097   0.08748988
#> 3 2002   NGA   0.6 0.6821289 0.48564537   0.40593797
#> 4 2003   NGA   0.5 0.5684407 0.36434064   0.01972797

And, if we want we can make the same conversions in the opposite direction

output <- output[, c("year", "iso3c", "distribution")]

# Use the nets functionality to convert distribution ➡️ crop ➡️ access ➡️ usage
output$crop <- distribution_to_crop(
  distribution = output$distribution,
  distribution_timesteps = (output$year) * 365,
  crop_timesteps = (output$year + 0.5) * 365,
  half_life = half_life
)
output$access <- crop_to_access(
  crop = output$crop,
  type = "loess"
)
output$usage <- access_to_usage(
  access = output$access,
  use_rate = usage_rate
)

# We retrieve our original input usage:
round(output$usage, 2)
#> [1] 0.1 0.2 0.6 0.5

The relationship between access and crop

The relationship between access and crop is derived from monthly data for the latest available year (2020) across African countries, and plotted below (corresponding to Figure 4 in the paper by Bertozzi-Villa et al). There are two options in the access_to_crop() function one “loess” a loess smooth of the data extrapolated to allow prediction for access values outside of the observed range and a second, “linear”, which assumed a fixed number of people can use each net. The linear model is very simple and does not fit the observed data well, so use with caution, although it is often the way bed nets are costed.

library(ggplot2)
access <- seq(0, 1, 0.01)
crop_loess <- access_to_crop(access, type = "loess")
crop_linear <- access_to_crop(access, type = "linear")
model_data <- data.frame(access = rep(access, 2),
                         model = rep(c("loess", "linear"), each = length(crop_loess)),
                         crop = c(crop_loess, crop_linear))

# Plot curve
ggplot() +
  geom_point(
    data = crop_data,
    aes(x = percapita_nets_mean, y = access_mean),
    col = "black"
    ) +
  geom_line(
    data = model_data,
    aes(x = crop, y = access, colour = model),
    size = 1.5
    ) +
  xlim(0, 1) +
  ylim(0, 1) +
  labs(x = "Nets per capita", y = "Access (proportion)", colour = "") +
  theme_classic()

Assumptions about the net loss function

The default option in these metric conversions assumes that nets are lost according to a smooth-compact function (net_loss_function = net_loss_map). This in line with the paper by Bertozzi-Villa et al.

An alternative option is to assume exponential net loss (net_loss_function = net_loss_exp), which corresponds to the assumption in malariasimulation.

The proportion of nets retained over time are visualised for both options below, for a 3 year distribution cycle and a net half life of 1.64 years.

t <- seq(0, 5 * 365, 1)

# Calculate proportion of nets retained assuming smooth-compact net loss
nets_retained_map <- net_loss_map(
  t = t,
  k = 20,
  half_life = 1.64 * 365
)
# k is a fixed rate parameter based on which net half lives were estimated in the paper

# Calculate proportion of nets retained assuming exponential net loss
nets_retained_exp <- net_loss_exp(
  t = t,
  mean_retention = 1.64 * 365
)

# Plot curve
ggplot() +
  geom_line(aes(
    x = t / 365, y = nets_retained_map,
    colour = "Smooth-compact"
  )) +
  geom_line(aes(
    x = t / 365, y = nets_retained_exp,
    colour = "Exponential"
  )) +
  ylim(0, 1) +
  labs(x = "Years", y = "Proportion of bednets retained", colour = "") +
  theme_classic()