Skip to contents

Built-in teaching datasets

gtstats includes five labelled datasets. They make tutorials, classroom material, peer feedback, and reproducible examples work without another package. They are examples for learning, not data for clinical decision-making.

data(
  "birthwt", "trial_data", "paired_data", "outbreak_data",
  "surveillance_data", package = "gtstats"
)
Dataset Design Main teaching use Automatic branches demonstrated
birthwt Real observational low-birth-weight study; 189 births Table 1, data understanding, binary and multi-level categorical data, 2x2 epidemiology Welch t / Wilcoxon, chi-square / Fisher, RR/OR/RD
trial_data Synthetic three-arm trial; 180 participants Independent groups, ordinal outcomes, correlation, rates Welch ANOVA, Kruskal-Wallis, chi-square, Fisher exact
paired_data Synthetic long-format follow-up; 90 complete pairs Before/after or matched analysis paired t-test, Wilcoxon signed-rank, McNemar
outbreak_data Real CDC Oswego foodborne-outbreak line list; 75 interviews Attack rates from individual-level exposure and illness data line-list epi_table() route, Fisher/chi-square, RR/OR/RD
surveillance_data Real archived CDC weekly hospital surveillance; 808 health service areas Rates from aggregate counts and population denominators aggregate epi_table() route and exact Poisson CIs

birthwt: real clinical teaching data

birthwt is a labelled, analysis-ready version of the low birth weight data reported by Hosmer and Lemeshow. It has readable factors for outcome, smoking, hypertension, uterine irritability, maternal race, and prior premature labour. antenatal_visits is explicitly ordinal. Original numeric measures such as maternal age, maternal weight, and birth weight remain numeric.

describe_data(birthwt)

summary_table(
  birthwt,
  by = low,
  include = c(age, lwt, race, smoke, previous_preterm),
  overall = TRUE
) |>
  add_p()

crosstabs(birthwt, row = smoke, col = low, percent = c("row", "column"))

trial_data: independent groups and rates

The synthetic trial has three treatment arms. Its variables were designed for teaching rather than to mimic a specific disease: change_score is approximately symmetric, hospital_days is right-skewed, response is ordinal, and rare_event produces sparse cells. It also contains correlated biomarkers and person-time with infection-event counts.

# Parametric three-group example
compare_groups(trial_data, variable = change_score, group = arm)

# Non-parametric three-group example
compare_groups(trial_data, variable = hospital_days, group = arm)

# Sparse categorical example
compare_groups(trial_data, variable = rare_event, group = arm)

correlation(trial_data, x = biomarker_a, y = biomarker_b)
rate_stats(
  trial_data, event = infection_events, time = followup_years,
  by = arm, time_label = "person-years"
)

paired_data: repeated measurements

paired_data is in long format: each id has a Baseline and Follow-up row. Use paired = TRUE and supply id. Its continuous variables deliberately demonstrate both paired parametric and rank-based choices; the binary symptom variable demonstrates McNemar’s test.

compare_groups(
  paired_data, variable = pain_score, group = visit,
  paired = TRUE, id = id
)

compare_groups(
  paired_data, variable = days_off_work, group = visit,
  paired = TRUE, id = id
)

compare_groups(
  paired_data, variable = symptom_present, group = visit,
  paired = TRUE, id = id
)

outbreak_data: line-list outbreak analysis

outbreak_data contains the 75 interview records from CDC’s classic Oswego church-supper investigation. The observations are unchanged; gtstats only uses beginner-friendly variable names, Yes/No factors, and labels. This example estimates illness attack rates among people who did and did not eat vanilla ice cream, with an association test and 2x2 effect estimates.

epi_table(
  outbreak_data,
  outcomes = ill,
  by = vanilla_ice_cream,
  event = "Yes",
  measure = "attack_rate",
  p_value = TRUE,
  effects = "all"
)

surveillance_data: aggregate surveillance rates

surveillance_data is an archived CDC extract for the report dated 12 January 2024. Each row is one health service area with an admission count and population denominator. Two areas have insufficient admission data; remove those rows explicitly before calculating rates. Because admission_level is derived from the published rate, this teaching example is descriptive and does not request a p-value.

complete_surveillance <- subset(surveillance_data, !is.na(admissions))

epi_table(
  complete_surveillance,
  numerator = admissions,
  denominator = population,
  label = admission_level,
  measure = "incidence_rate",
  multiplier = 100000
)

The result is a weekly hospital-admission rate per 100,000 population. These archived provisional data demonstrate the workflow; they must not be presented as current surveillance.

Provenance and reuse

Both real epidemiology datasets are traceable to CDC. The surveillance metadata identifies the source as a US Government work. CDC states that most agency material is public domain, while requiring attribution and a non-endorsement statement. CDC supplied the source material and does not endorse gtstats; the original material is available without charge from CDC. See the package dataset help pages for source links and the exact transformations.

Transparency note

The synthetic dataset structures are fixed and tested. If the automatic test selection changes unexpectedly, it is a package regression—not a random data change. Inspect result$method$selection_rule, diagnostics_stats(result), and denominators_stats(result) to see the decision behind any example.