# Prevalence estimation from a cross-sectional survey
n <- 600
df_cs <- tibble(
age_group = sample(c("18-30","31-45","46-60","60+"), n, replace=TRUE,
prob=c(0.3, 0.3, 0.25, 0.15)),
site = sample(c("Role 2","Role 3","Role 4"), n, replace=TRUE),
cpg_compliant = rbinom(n, 1,
ifelse(age_group=="18-30", 0.82,
ifelse(age_group=="31-45", 0.76,
ifelse(age_group=="46-60", 0.70, 0.65))))
)
df_cs |>
group_by(age_group, site) |>
summarise(prevalence = mean(cpg_compliant), n=n(), .groups="drop") |>
ggplot(aes(age_group, prevalence, fill=site)) +
geom_col(position="dodge", alpha=0.85) +
geom_hline(yintercept=0.80, linetype=2, color="#e63946") +
scale_fill_manual(values=c("#2563eb","#0891b2","#8b5cf6")) +
scale_y_continuous(labels=scales::percent_format()) +
labs(title="CPG compliance prevalence by age group and care level — cross-sectional snapshot",
x="Age group", y="Compliance rate", fill="Care level") +
theme_di()