## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")

## ----setup--------------------------------------------------------------------
library(intraclass)

## ----ml-data------------------------------------------------------------------
set.seed(2025)
n_class <- 16
n_pupil <- 5
n_rater <- 4
grid <- expand.grid(
  pupil = seq_len(n_pupil),
  classroom = seq_len(n_class),
  rater = seq_len(n_rater)
)
class_effect <- rnorm(n_class, sd = 1.3)[grid$classroom]
pupil_effect <- rnorm(n_class * n_pupil, sd = 0.6)[
  (grid$classroom - 1) * n_pupil + grid$pupil
]
rater_effect <- rnorm(n_rater, sd = 0.4)[grid$rater]
school <- data.frame(
  classroom = factor(grid$classroom),
  pupil = factor(paste(grid$classroom, grid$pupil, sep = "_")),
  rater = factor(grid$rater),
  score = 10 + class_effect + pupil_effect + rater_effect +
    rnorm(nrow(grid), sd = 0.7)
)

## ----ml-fit, eval = requireNamespace("glmmTMB", quietly = TRUE)---------------
icc(school, score, subject = pupil, rater = rater, cluster = classroom, type = "agreement", seed = 1)

## ----ml-conflated, eval = requireNamespace("glmmTMB", quietly = TRUE)---------
icc(school, score,
  subject = pupil, rater = rater, cluster = classroom,
  type = "agreement", level = c("subject", "cluster", "conflated"), seed = 1
)

## ----ml-nested-clusters, eval = requireNamespace("glmmTMB", quietly = TRUE)----
school_d2 <- school
school_d2$rater <- factor(paste(school_d2$classroom, school_d2$rater, sep = "_"))
icc(school_d2, score, subject = pupil, rater = rater, cluster = classroom, type = "agreement", seed = 1)

## ----ml-nested-subjects, eval = requireNamespace("glmmTMB", quietly = TRUE)----
school_d3 <- school
school_d3$rater <- factor(paste(school_d3$pupil, school_d3$rater, sep = "_"))
icc(school_d3, score, subject = pupil, rater = rater, cluster = classroom, type = "agreement", seed = 1)

## ----ml-declared-clusters, eval = requireNamespace("glmmTMB", quietly = TRUE)----
icc(school, score,
  subject = pupil, rater = rater, cluster = classroom,
  type = "agreement", design = "nested_in_clusters", seed = 1
)

## ----ml-declared-subjects, eval = requireNamespace("glmmTMB", quietly = TRUE)----
icc(school, score,
  subject = pupil, rater = rater, cluster = classroom,
  type = "agreement", design = "nested_in_subjects", seed = 1
)

## ----ml-incomplete-data-------------------------------------------------------
set.seed(11)
school_ragged <- school[-sample(nrow(school), round(0.2 * nrow(school))), ]

## ----ml-incomplete-subject, eval = requireNamespace("glmmTMB", quietly = TRUE)----
icc(school_ragged, score, subject = pupil, rater = rater, cluster = classroom,
  type = "agreement", level = "subject", seed = 1)

## ----ml-incomplete-cluster, eval = requireNamespace("glmmTMB", quietly = TRUE)----
icc(school_ragged, score, subject = pupil, rater = rater, cluster = classroom,
  level = "cluster", type = c("agreement", "consistency"),
  unit = c("single", "average"), seed = 1)

## ----ml-fixed, eval = requireNamespace("glmmTMB", quietly = TRUE)-------------
icc(school, score, subject = pupil, rater = rater, cluster = classroom,
  type = "agreement", raters = "fixed")

## ----ml-dstudy, eval = requireNamespace("glmmTMB", quietly = TRUE)------------
d_study(
  icc(school, score, subject = pupil, rater = rater, cluster = classroom, type = "agreement", seed = 1),
  m = c(1, 2, 4, 8)
)

## ----plot-ml, eval = requireNamespace("ggplot2", quietly = TRUE) && requireNamespace("glmmTMB", quietly = TRUE), fig.alt = "Forest plot of the school multilevel fit, faceted into subject-level and cluster-level panels, each showing ICC(A,1) and ICC(A,k) with Monte-Carlo intervals."----
library(ggplot2)
autoplot(icc(school, score, subject = pupil, rater = rater, cluster = classroom,
  type = "agreement", seed = 1))

## ----choose-ml----------------------------------------------------------------
choose_icc(model = "twoway", multilevel = TRUE, level = "cluster",
  type = "consistency", unit = "single", raters = "random")

