AgePopDenom

R-CMD-check CodeFactor codecov

What is AgePopDenom?

AgePopDenom is an R package designed to facilitate the generation of fine-scale, age-structured population denominators for public health decision-making and service delivery. By combining census and household survey data with a novel parameter-based geostatistical modeling approach, the package produces high-resolution (5km x 5km) population estimates disaggregated by age.


Installation

System Requirements

Before installing AgePopDenom, ensure your system meets the following requirements:

  1. R version: >= 4.1.0
  2. C++ compiler: C++17 compatible
  3. TMB (Template Model Builder)

Platform-Specific Setup

Windows

  1. Install Rtools (matches your R version):
# Check if Rtools is installed and properly configured
pkgbuild::has_build_tools()

If FALSE, download and install Rtools from: CRAN Rtools

  1. After installation, add Rtools to the system PATH:
echo 'export PATH="C:/rtools43/usr/bin;C:/rtools43/mingw64/bin:$PATH"' >> ~/.Renviron
  1. Restart R and verify the correct compiler setup:
Sys.getenv("PATH")

It should include C:/rtools43/usr/bin and C:/rtools43/mingw64/bin.

  1. Ensure the correct compiler is available:
g++ --version

It should output GCC version 10 or later.

  1. Set up the Makevars.win file to use the correct compiler:
mkdir -p ~/.R
nano ~/.R/Makevars.win

Add the following lines:

CXX14=C:/rtools43/mingw64/bin/g++
CXX17=C:/rtools43/mingw64/bin/g++
CXX20=C:/rtools43/mingw64/bin/g++

Save and exit (CTRL+X, then Y, then Enter).

macOS

  1. Install Command Line Tools:
xcode-select --install
  1. Alternatively, install gcc via Homebrew:
brew install gcc
  1. Install LLVM via Homebrew:
brew install llvm
  1. Set up compiler paths:

For Zsh (default on macOS):

echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"' >> ~/.zshrc
source ~/.zshrc

For Bash:

echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.bashrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"' >> ~/.bashrc
echo 'export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"' >> ~/.bashrc
source ~/.bashrc
  1. Verify the correct compiler is now being used:
clang++ --version

It should output Homebrew Clang (e.g., Homebrew clang version XXXXX).

  1. Configure R to use LLVM: Modify your ~/.R/Makevars file:

nano ~/.R/Makevars

Add the following lines:

CXX=/opt/homebrew/opt/llvm/bin/clang++
CXX11=/opt/homebrew/opt/llvm/bin/clang++
CXX14=/opt/homebrew/opt/llvm/bin/clang++
CXX17=/opt/homebrew/opt/llvm/bin/clang++
CXX20=/opt/homebrew/opt/llvm/bin/clang++

Save and exit (CTRL+X, then Y, then Enter).

Linux (Ubuntu/Debian)

  1. Update your system and install necessary packages:
sudo apt-get update
sudo apt-get install build-essential libxml2-dev
  1. Ensure you have GCC installed:
sudo apt-get install g++
  1. Install Clang (optional, if required for TMB compilation):
sudo apt-get install clang
  1. Verify compiler setup:
g++ --version
clang++ --version

Install and Compile TMB

Restart R and install TMB:

install.packages("TMB", type = "source")

AgePopDenom installation

Once the setup is complete, follow the instructions below to download AgePopDenom

Note: AgePopDenom is currently under development. Once it is available on CRAN, you will be able to install it using the following command:

# install.packages("AgePopDenom")

To get the development version from GitHub, use:

# install.packages("devtools")
devtools::install_github("truenomad/AgePopDenom")

Then load it in R:

library(AgePopDenom)

Core Functions

  1. Initialize project structure:
init()
  1. Download required data:
# Example for Kenya and Uganda
countries <- c("KEN", "UGA")

# Get DHS data
download_dhs_datasets(countries, 
                      email = "my_email@example.com",
                      project = "Population denominator project")

# Process DHS data
process_dhs_data()

# Download shapefiles
download_shapefile(countries)

# Download population rasters from worldpop
download_pop_rasters(countries)

# Extract urban extent raster
extract_afurextent()
  1. Run full analysis:
run_full_workflow(countries)

Documentation

For detailed documentation and examples, visit our package website.

Support and Contributions

For support, bug reports, or feature requests, please contact:

Alternatively, open an issue on the GitHub repository.

We welcome contributions from the community to improve AgePopDenom.