# Setup for Examples 1 to 3 -------------------------------------------------
# Settings
set.seed(0) # seed for reproducibility
N <- 500 # number of persons
n <- 40 # number of items
# Randomly select 10% examinees with preknowledge and 40% compromised items
cv <- sample(1:N, size = N * 0.10)
ci <- sample(1:n, size = n * 0.40)
# Create vector of indicators (1 = misfitting, 0 = fitting)
ind <- ifelse(1:N %in% cv, 1, 0)
# Example 1: Dichotomous Item Scores ----------------------------------------
# Generate person parameters for the 3PL model
xi <- cbind(theta = rnorm(N, mean = 0.00, sd = 1.00))
# Generate item parameters for the 3PL 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)
)
# Simulate uncontaminated data
x <- sim(psi, xi)$x
# Modify contaminated data by changing the item scores
x[cv, ci] <- rbinom(length(cv) * length(ci), size = 1, prob = 0.90)
# Detect nonparametric misfit
out <- detect_nm(
method = c("G_S", "NC_S", "U1_S", "U3_S", "ZU3_S", "A_S", "D_S", "E_S",
"C_S", "MC_S", "PC_S", "HT_S"),
x = x
)
# Example 2: Polytomous Item Scores -----------------------------------------
# Generate person parameters for the generalized partial credit model
xi <- cbind(theta = rnorm(N, mean = 0.00, sd = 1.00))
# Generate item parameters for the generalized partial credit model
psi <- cbind(
a = rlnorm(n, meanlog = 0.00, sdlog = 0.25),
c0 = 0,
c1 = rnorm(n, mean = -1.00, sd = 0.50),
c2 = rnorm(n, mean = 0.00, sd = 0.50),
c3 = rnorm(n, mean = 1.00, sd = 0.50)
)
# Simulate uncontaminated data
x <- sim(psi, xi)$x
# Modify contaminated data by changing the item scores to the maximum score
x[cv, ci] <- 3
# Detect nonparametric misfit
out <- detect_nm(
method = c("G_S", "U1_S", "U3_S"),
x = x
)
# Example 3: Item Response Times --------------------------------------------
# Generate person parameters for the lognormal model
xi <- cbind(tau = rnorm(N, mean = 0.00, sd = sqrt(0.25)))
# Generate item parameters for the lognormal model
psi <- cbind(
alpha = runif(n, min = 1.50, max = 2.50),
beta = rnorm(n, mean = 3.50, sd = sqrt(0.15))
)
# Simulate uncontaminated data
y <- sim(psi, xi)$y
# Modify contaminated data by reducing the log response times
y[cv, ci] <- y[cv, ci] * 0.75
# Detect nonparametric misfit
out <- detect_nm(
method = "KL_T",
y = y
)
Run the code above in your browser using DataLab