Intraclass Correlation (ICC)
The blueprint for Reliability and Consistency. ICC quantifies the proportion of variance attributable to the subject, revealing the absolute integrity of your measurement system.
What is it?
Intraclass Correlation Coefficient (ICC) evaluates the reliability and agreement of ratings made by multiple observers (raters) on a set of subjects.
When to use it
- Rater Reliability: Standardizing diagnostics made by multiple doctors/judges.
- Continuous Ratings: Scores are continuous values (not nominal categories).
Core Idea
Instead of correlating rates generally, it measures the ratio of between-subject variance to total variance. High ICC means raters assign identical profiles:
Hypotheses
How it works
- Run a two-way random-effects ANOVA on the ratings matrix.
- Extract Variance between subjects (s_variance).
- Extract Variance between raters (r_variance) and residual error (e_variance).
- Compute ICC ratio based on model type (e.g. Agreement vs. Consistency).
Assumptions
Important Note
💡 Agreement vs. Consistency: ICC Consistency models ignore systematic rater offsets (e.g., if Rater 2 always scores exactly 10 points higher). Agreement models count offsets as error, lowering the ICC.
Quick Example
| Subject | Rater 1 | Rater 2 |
|---|---|---|
| S1 | 78 | 76 |
| S2 | 92 | 90 |
Intraclass Correlation Laboratory
Adjust rating noise, subject spreads, and rater offsets to see how they impact ICC agreement profiles.
| Variance Component | Est. Variance |
|---|---|
| Between-Subject (σ_T^2) | 225.0 |
| Rater Noise (σ_e^2) | 16.0 |
| Systematic Bias (Bias^2 / 4) | 0.0 |
| Calculated ICC (2,1) | 0.9336 |
Hypotheses
Pragmatic null and alternative hypotheses defined in mathematical notation.
H₀: ρ = 0 (population ICC is zero; no reliability/clustering effect)
Hₐ: ρ > 0 (population ICC is positive; measurements show reliability/clustering)
ICC typically tests one-tailed hypothesis (positive reliability). ICC ranges 0-1; values near 0 indicate poor reliability, values near 1 indicate excellent reliability.
Assumptions
The core mathematical criteria needed to ensure that statistical testing remains unbiased and valid.
Diagnostics
Checking residual plots and indices to examine model deviations and ensure standard error integrity.
- Choose correct ICC form: ICC(1,1), ICC(2,1), ICC(3,1) for single measures; ICC(1,k), ICC(2,k), ICC(3,k) for average measures
- Compute variance components: between-subject variance (BMS), within-subject variance (WMS), rater variance
- Examine confidence intervals (95% CI) for ICC - wide CI indicates imprecision
- Check F-test p-value for significance of between-subject variance
- Bland-Altman plots for test-retest or two-rater reliability
- Scatterplot matrix (all raters) to visualize consistency
- Histogram/Q-Q plots to check normality of ratings
- Levene's test for homogeneity of variance across raters
- Plot mean ratings by rater to detect systematic bias
- Boxplots by rater to identify outliers and variance differences
- Compare consistency ICC (ignores bias) vs. agreement ICC (includes bias)
Applied Minds
Review concrete study examples, data layout guidelines, and copy executable syntax scripts.
Inter-Rater Reliability of Depression Severity Ratings (ICC(2,1) - Two-way Random)
Research question: What is the inter-rater reliability of clinician ratings of depression severity using the Hamilton Depression Rating Scale (HAM-D)? Design: 45 patients with major depression each rated by 4 randomly selected clinicians from a pool of 12 trained raters. Outcome: HAM-D total score (continuous, 0-52, higher = more severe). Goal: Assess single-rater reliability (ICC(2,1)) to determine if any one clinician provides reliable ratings.
# ICC(2,1): Inter-rater reliability for single rater from random effects model
# Two-way random effects: subjects are random, raters are random
# Install/load packages
library(irr) # For ICC computation
library(psych) # Alternative ICC with detailed output
library(tidyverse) # Data manipulation
library(reshape2) # Wide/long format conversion
# Simulate realistic HAM-D ratings (or load: data <- read.csv("hamd_ratings.csv"))
set.seed(2025)
n_subjects <- 45
n_raters <- 4
# True depression severity for each subject (0-52 scale)
true_severity <- rnorm(n_subjects, mean=24, sd=8)
true_severity <- pmax(0, pmin(52, true_severity)) # Bound to 0-52
# Each rater adds measurement error
data_wide <- data.frame(
subject = 1:n_subjects,
rater1 = round(true_severity + rnorm(n_subjects, 0, 3)),
rater2 = round(true_severity + rnorm(n_subjects, 0, 3)),
rater3 = round(true_severity + rnorm(n_subjects, 0, 3.5)), # Slightly less reliable
rater4 = round(true_severity + rnorm(n_subjects, 0, 2.5)) # Slightly more reliable
)
# Bound ratings to valid range
data_wide[,2:5] <- apply(data_wide[,2:5], 2, function(x) pmax(0, pmin(52, x)))
head(data_wide)
# === STEP 1: Check Assumptions ===
# 1. Normality of ratings per rater
par(mfrow=c(2,2))
for (i in 2:5) {
qqnorm(data_wide[,i], main=paste("Rater", i-1))
qqline(data_wide[,i])
}
for (i in 2:5) {
test <- shapiro.test(data_wide[,i])
cat(sprintf("Rater %d: W=%.3f, p=%.3f\n", i-1, test$statistic, test$p.value))
}
# 2. Homogeneity of variance across raters
library(car)
data_long <- melt(data_wide, id.vars="subject", variable.name="rater", value.name="rating")
leveneTest(rating ~ rater, data=data_long)
cat("\nStandard deviations by rater:\n")
data_wide %>%
summarise(across(starts_with("rater"), sd))
# 3. Check for systematic rater bias
cat("\nMean ratings by rater(check for bias):\n")
data_wide %>%
summarise(across(starts_with("rater"), mean))
# Boxplots
ggplot(data_long, aes(x=rater, y=rating, fill=rater)) +
geom_boxplot() +
labs(title="HAM-D Ratings by Rater(check for bias & variance)",
y="HAM-D Score", x="Rater") +
theme_classic()
# === STEP 2: Compute ICC(2,1) - Single Rater, Random Effects ===
# Method 1: Using irr package
icc_result <- icc(data_wide[,2:5], model="twoway", type="agreement", unit="single")
print(icc_result)
# Output: ICC(2,1) = 0.XX, 95% CI [0.XX, 0.XX], F-test p < .001
# Method 2: Using psych package (more detailed)
icc_psych <- ICC(data_wide[,2:5])
print(icc_psych)
# Shows ICC(1,1), ICC(2,1), ICC(3,1) and average measures versions
# === STEP 3: Interpretation Benchmarks ===
cat("\n=== ICC Interpretation Guidelines(Koo & Li, 2016) ===\n")
cat("< 0.50: Poor reliability\n")
cat("0.50-0.75: Moderate reliability\n")
cat("0.75-0.90: Good reliability\n")
cat("> 0.90: Excellent reliability\n\n")
icc_value <- icc_result$value
cat(sprintf("ICC(2,1) = %.3f\n", icc_value))
if (icc_value < 0.50) {
cat("Interpretation: Poor single-rater reliability. Ratings highly variable.\n")
} else if (icc_value < 0.75) {
cat("Interpretation: Moderate single-rater reliability. Consider averaging raters.\n")
} else if (icc_value < 0.90) {
cat("Interpretation: Good single-rater reliability. Acceptable for research.\n")
} else {
cat("Interpretation: Excellent single-rater reliability.\n")
}
# === STEP 4: Compare with Average Measures ICC(2,k) ===
icc_avg <- icc(data_wide[,2:5], model="twoway", type="agreement", unit="average")
cat(sprintf("\nICC(2,k) = %.3f [average of %d raters]\n", icc_avg$value, n_raters))
cat("ICC(2,k) is higher because averaging reduces measurement error(Spearman-Brown prophecy formula).\n")
# === STEP 5: Visualize Reliability ===
# Scatterplot matrix to visualize consistency
pairs(data_wide[,2:5], main="Scatterplot Matrix: Rater Consistency",
pch=19, col=rgb(0,0,1,0.3))
# Bland-Altman style plot (Rater 1 vs Rater 2 example)
mean_12 <- (data_wide$rater1 + data_wide$rater2) / 2
diff_12 <- data_wide$rater1 - data_wide$rater2
mean_diff <- mean(diff_12)
sd_diff <- sd(diff_12)
ggplot(data.frame(mean=mean_12, diff=diff_12), aes(x=mean, y=diff)) +
geom_point(alpha=0.5) +
geom_hline(yintercept=mean_diff, color="blue", linetype="dashed") +
geom_hline(yintercept=mean_diff + 1.96*sd_diff, color="red", linetype="dashed") +
geom_hline(yintercept=mean_diff - 1.96*sd_diff, color="red", linetype="dashed") +
labs(title="Bland-Altman Plot: Rater 1 vs Rater 2",
x="Mean HAM-D Score", y="Difference(Rater1 - Rater2)",
subtitle=paste("Mean diff:", round(mean_diff,2), "± 95% LOA")) +
theme_classic()
# === APA-Style Reporting ===
cat("\n=== APA-Style Report ===\n")
cat(sprintf(
"Inter-rater reliability for single clinician ratings of depression severity
(HAM-D) was assessed using ICC(2,1) based on a two-way random effects model
with absolute agreement. Forty-five patients were each rated by four randomly
selected clinicians from a pool of 12 trained raters. The ICC was %.2f
(95%% CI [%.2f, %.2f]), indicating %s single-rater reliability. The F-test
confirmed significant between-subject variance, F(%d, %d) = %.2f, p < .001.
When averaging across all four raters, reliability improved to ICC(2,4) = %.2f,
suggesting that composite scores from multiple raters provide %s reliability
for clinical and research use.\n",
icc_result$value,
icc_result$lbound,
icc_result$ubound,
ifelse(icc_result$value >= 0.75, "good", ifelse(icc_result$value >= 0.50, "moderate", "poor")),
icc_result$df1,
icc_result$df2,
icc_result$Fvalue,
icc_avg$value,
ifelse(icc_avg$value >= 0.75, "good to excellent", "moderate to good")
))ICC(2,1) = 0.78 (95% CI [0.66, 0.86]), indicating good single-rater reliability. Any one clinician from the trained pool provides sufficiently reliable HAM-D ratings for research purposes. ICC(2,4) = 0.93 shows excellent reliability when averaging four raters, supporting use of composite scores in clinical trials. Findings consistent with Bagby et al. (2004) demonstrating HAM-D inter-rater reliability in the good-excellent range.
Alternatives
Structured fallback pathways for choosing alternative tests when normality or slopes requirements fail.
- ICC(2,1) Random — Generalize your findings to the entire rater population.
- ICC(3,1) Mixed — Use when you only care about the specific raters in your study.
- Absolute Agreement — Use when the exact score values must match across raters.
- Consistency Strike — Use when you only care about the 'Pattern' or 'Ranking' matching.
Post-hoc
Group mean comparisons and correction controls (e.g. Tukey HSD, Bonferroni) to protect against Family-Wise Error Rates.
- Compare ICC(1,1) vs ICC(2,1) vs ICC(3,1) for appropriate model selection
- Compare single-measure vs average-measure ICC based on use case
- Bootstrap confidence intervals for ICC
- Examine rater-by-subject interaction plots
- Compare with Kappa or weighted Kappa for categorical ratings
- Test for systematic rater bias using repeated measures ANOVA
ICC measures reliability/agreement among raters. Traditional post-hoc tests are not applicable.
Effect Size
Understanding effect sizes (e.g., Cohen's d, Partial Eta-Squared) and clinical impact benchmarks.
< 0.50: Poor reliability; 0.50-0.75: Moderate reliability; 0.75-0.90: Good reliability; > 0.90: Excellent reliability (Koo & Li, 2016)
Narrow CI indicates precise estimate; wide CI suggests need for larger sample. CI crossing 0.50 or 0.75 thresholds indicates uncertain reliability category
Between-subject variance (signal) / Total variance = ICC. High between-subject variance → good differentiation. Low within-subject variance → consistent measurements
0.2
0.5
0.8
Sample Size
Guidelines for minimum sample requirements and power analysis parameters.
The 'Stability Minimum': A minimum of 30 subjects is required for a 2-rater consistency audit. Reliability point estimates are notoriously unstable in lean samples.
| Effect Size | Parameters | Required n |
|---|---|---|
| Small Effect | Target ICC = .70 | n ≈ 120 subjects |
| Medium Effect | Target ICC = .85 | n ≈ 35 subjects |
| Large Effect | Target ICC = .95 | n ≈ 15 subjects |
The 'Rater ROI': If recruitment is difficult, adding a third or fourth rater can cut the required sample size by 40% while maintaining the same precision for the ICC summary diamond.
Reporting
How to compile statistical results into publication prose matching APA and journal style guides.
Inter-rater reliability or test-retest reliability was assessed using the intraclass correlation coefficient (ICC) based on a one-way random / two-way random / two-way mixed-effects model with absolute agreement / consistency and single rater / average of k raters. Describe sample: N subjects, k raters, design details. The ICC was value (95% CI lower, upper), indicating poor/moderate/good/excellent reliability according to cite: Koo & Li, 2016 guidelines. If significant: The F-test confirmed significant between-subject variance, F(df1, df2) = X.XX, p < .001. Interpretation in context of study goals.
- ICC type (1,1 / 2,1 / 3,1 or 1,k / 2,k / 3,k)
- ICC value (0-1)
- 95% confidence interval
- F-statistic and p-value
- Number of subjects and raters
- Model specification (one-way/two-way, random/mixed, agreement/consistency)
Manuscript Lab
Copy standard summary tables and forensic reporting grids to outline analysis details.
| Metric | ICC | 95% CI | F-test (p) | Quality |
|---|---|---|---|---|
| Single Measures (ICC 3,1) | .82 | [.74, .88] | < .001 | Excellent |
| Average Measures (ICC 3,k) | .93 | [.89, .96] | < .001 | Excellent |
The Consistency Ratio. Represents the proportion of variance in scores that is due to true differences between subjects vs. rater error.
Reliability expected if a future subject is rated by only ONE rater.
Reliability achieved by averaging the scores of all k raters.
Command Center
Syntax libraries and function parameters for executing calculations in stats packages.
# 1. Execute Comprehensive ICC Battery
psych::ICC(df_ratings)
# 2. Agreement-focused ICC
irr::icc(df_ratings, model = 'twoway', type = 'agreement')Choosing the right ICC model (1, 2, or 3) is critical. Model 2 (Random Effects) is the standard for generalizing to other raters.
# Automated ICC for Mixed Models
performance::icc(model)Common Mistakes
Analytical caveats and corrections to maintain modeling integrity.
References
Scholarly lineage and citation keys grounding the statistical framework.