# Setup for Examples 1 and 2 ------------------------------------------------
# Settings
set.seed(0) # seed for reproducibility
N <- 500 # number of persons
n <- 40 # number of items
G <- 20 # number of groups
# Create groups
group <- rep(1:G, each = N / G)
# Randomly select 20% tampered groups with 20% tampered persons
cg <- sample(1:G, size = G * 0.20)
cv <- NULL
for (g in cg) {
cv <- c(cv, sample(which(group == g), size = N / G * 0.20))
}
# Create vectors of indicators (1 = tampered, 0 = non-tampered)
group_ind <- ifelse(1:G %in% cg, 1, 0)
person_ind <- ifelse(1:N %in% cv, 1, 0)
# Generate person parameters for the nested logit model
xi <- MASS::mvrnorm(
N,
mu = c(theta = 0.00, eta = 0.00),
Sigma = matrix(c(1.00, 0.80, 0.80, 1.00), ncol = 2)
)
# Generate item parameters for the nested logit model
psi <- cbind(
a = rlnorm(n, meanlog = 0.00, sdlog = 0.25),
b = rnorm(n, mean = 0.00, sd = 1.00),
c = runif(n, min = 0.05, max = 0.30),
lambda1 = rnorm(n, mean = 0.00, sd = 1.00),
lambda2 = rnorm(n, mean = 0.00, sd = 1.00),
lambda3 = rnorm(n, mean = 0.00, sd = 1.00),
zeta1 = rnorm(n, mean = 0.00, sd = 1.00),
zeta2 = rnorm(n, mean = 0.00, sd = 1.00),
zeta3 = rnorm(n, mean = 0.00, sd = 1.00)
)
# Simulate uncontaminated data
dat <- sim(psi, xi)
x_0 <- x <- dat$x
d_0 <- d <- dat$d
# Simulate 5% random erasures for non-tampered persons
r_0 <- r <- ifelse(x == 1, 4, d)
for (v in setdiff(1:N, cv)) {
ci <- sample(1:n, size = n * 0.05)
for (i in ci) {
r_0[v, i] <- sample((1:4)[-r[v, i]], size = 1)
}
x_0[v, ci] <- ifelse(r_0[v, ci] == 4, 1, 0)
d_0[v, ci] <- ifelse(r_0[v, ci] == 4, NA, r_0[v, ci])
}
rm(r_0, r)
# Modify contaminated data by tampering with 20% of the scores and
# distractors
for (v in cv) {
ci <- sample(1:n, size = n * 0.20)
x[v, ci] <- 1
d[v, ci] <- NA
}
# Example 1: Person-Level Statistics ----------------------------------------
# Detect test tampering
out <- detect_tt(
method = c("EDI_SD_*", "GBT_SD", "L_SD"),
psi = psi,
x = x,
d = d,
x_0 = x_0,
d_0 = d_0
)
# Example 2: Group-Level Statistics -----------------------------------------
# Detect test tampering
out <- detect_tt(
method = "EDI_SD_*",
psi = psi,
x = x,
d = d,
x_0 = x_0,
d_0 = d_0,
group = group
)
Run the code above in your browser using DataLab