The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

tooth

tooth is an R package for dental public health research. It computes standardised caries indices and produces publication-ready odontogram heatmaps from clinical examination data.

An odontogram is a whole-mouth dental chart that arranges every tooth in its anatomical position across the four quadrants. tooth renders each tooth as a five-surface crown diagram with optional root-surface bars, then maps your surface values onto a colour gradient — so caries patterns, treatment outcomes, or any per-tooth-surface metric are visible at a glance across the whole arch.

Crown surfaces

Abbreviation Surface Description
B Buccal Cheek-facing surface
L Lingual Tongue-facing surface
M Mesial Forward-facing interproximal surface
D Distal Backward-facing interproximal surface
O Occlusal Biting/chewing surface

Root surfaces

Abbreviation Surface Description
RB Root-Buccal Root surface on the cheek side
RL Root-Lingual Root surface on the tongue side
RM Root-Mesial Root surface on the mesial side
RD Root-Distal Root surface on the distal side

Why tooth?

Dental epidemiological studies routinely compute DMFT/DMFS indices and visualise caries distributions, yet there is no dedicated R package for these tasks. Researchers write ad-hoc scripts with hardcoded ICDAS thresholds and manual ggplot layouts for every new project. tooth replaces those one-off scripts with tested, documented, flexible functions that work across study designs — primary or permanent dentition, 5 to 8 teeth per quadrant, coronal and root caries, long or wide data formats.

Features

Installation

# From GitHub
devtools::install_github("ddmsel/tooth")

# From local tarball
install.packages("tooth_0.5.0.tar.gz", repos = NULL, type = "source")

Single tooth diagram

Each tooth is a five-wedge crown (B, L, M, D, O) with optional root bars (RB, RL), labelled by surface and coloured by value.

Coronal odontogram — full arch

build_odontogram(
  data = decay_data,
  teeth_per_quadrant = 7,
  surfaces = c("buc", "lin", "mes", "dis", "occ")
)

Odontogram with root-buccal (RB) and root-lingual (RL) surfaces

build_odontogram(
  data = decay_data,
  surfaces = c("buc", "lin", "mes", "dis", "occ", "rootb", "rootl")
)

Stratified odontogram with summary statistics

stats_df <- data.frame(
  treatment = c("SDF", "ART"),
  n = c(120, 115),
  mean_DT = c(2.3, 2.8),
  mean_DMFT = c(5.1, 5.6)
)

build_odontogram(
  data = decay_by_trt,
  strata = "treatment",
  stats = stats_df,
  footnote = "B=Buccal, L=Lingual, M=Mesial, D=Distal, O=Occlusal.\n* p<0.05, ** p<0.01, *** p<0.001."
)

Odontogram with FDI numbering

build_odontogram(data = decay_data, numbering = "fdi")

Odontogram without surface labels

build_odontogram(data = decay_data, show_labels = FALSE)

Quick Start

DMFT calculation

library(tooth)
data(sim_exam)

# Basic DMFT
dmft <- calc_dmft(sim_exam)

# With stratification
dmft <- calc_dmft(sim_exam, strata = "treatment")

# Separate root caries
dmft <- calc_dmft(sim_exam, root_lesion_col = "lesion_code")
# Returns DT (coronal) + RDT (root) separately

Odontogram with all options

build_odontogram(
  data             = decay_data,
  value_col        = "prop",
  teeth_per_quadrant = 7,
  title            = "Caries Distribution",
  surfaces         = c("buc", "lin", "mes", "dis", "occ"),
  show_labels      = TRUE,
  tooth_label_size = 3,
  numbering        = "fdi",
  min_val = 0, max_val = 0.5,
  strata           = "treatment",
  strata_labels    = c("1" = "SDF", "2" = "ART + FV"),
  stats            = stats_df,
  stats_test       = "wilcox",
  stats_var        = "mean_DMFT",
  stats_raw        = raw_patient_data,
  footnote         = paste0(
    "B=Buccal, L=Lingual, M=Mesial, D=Distal, O=Occlusal.\n",
    "* p<0.05, ** p<0.01, *** p<0.001 (Wilcoxon rank-sum test)."
  )
)

Tooth numbering conversion

tooth_convert("11", from = "fdi", to = "quadrant")
#> "ur1"

tooth_convert("ur1", from = "quadrant", to = "fdi")
#> "11"

All Functions

Function Description
build_odontogram() Full-arch heatmap with stratification, stats, numbering
draw_tooth() Single tooth polygon geometry (up to 9 surfaces)
calc_dmft() DMFT/dmft with root/coronal separation
calc_dmfs() DMFS/dmfs with root/coronal separation
pivot_to_long() Wide → long format converter
tooth_config() Arch layout configuration
tooth_convert() FDI ↔︎ Universal ↔︎ quadrant numbering

Authors

Citation

If you use tooth in published research, please cite:

Selvaraj D, Nelson S (2026). tooth: Dental Public Health Indices and
Odontogram Visualizations. R package version 0.5.0.
https://github.com/ddmsel/tooth

License

MIT

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.