# Example 1: 10 studies with real outliers (Study-8, Study-9, Study-10)
set.seed(123)
dat <- data.frame(
study = factor(rep(paste0("Study-", 1:10), each = 20)),
var1 = c(rnorm(20, 10, 1), rnorm(20, 10, 1), rnorm(20, 10, 1), rnorm(20, 10, 1),
rnorm(20, 10, 1), rnorm(20, 10, 1), rnorm(20, 10, 1), rnorm(20, 15, 1),
rnorm(20, 10, 1), rnorm(20, 16, 1)),
var2 = c(rnorm(20, 5, 1), rnorm(20, 5, 1), rnorm(20, 5, 1), rnorm(20, 5, 1),
rnorm(20, 5, 1), rnorm(20, 5, 1), rnorm(20, 5, 1), rnorm(20, 5, 1),
rnorm(20, 10, 1), rnorm(20, 5, 1))
)
out <- find_outliers(study ~ var1 + var2, data = dat, R = 200)
out$summary # Study-8, Study-9, Study-10 should be flagged
out$cutoff_value # Permutation-based threshold
# Example 2: 20 studies with NO real outliers (all from same distribution)
set.seed(456)
dat_no_outliers <- data.frame(
study = factor(rep(paste0("Study-", 1:20), each = 15)),
var1 = rnorm(300, 10, 2),
var2 = rnorm(300, 5, 1)
)
out2 <- find_outliers(study ~ var1 + var2, data = dat_no_outliers, R = 200)
out2$summary # Should have few or no outliers flagged
sum(out2$is_outlier) # Count of flagged outliers (expected: 0 or very few)
Run the code above in your browser using DataLab