R中的IRT:有人知道可以应对NA的IRT项目校准功能吗?

机器算法验证 r 心理测量学 项目反应理论
2022-04-04 12:28:35

我有一个看起来像这样的数据集。

test.takers item1   item2 item3 item4 item5 item6 item7 item8 item9 item10 item11 item12 item13 item14 item16 item17 item18 total_score
tt1             1       1     0     1     0     1     1     1     0     NA      1      1     NA      1      1      1      1          12
tt2             0       1     0     0     0     0     0    NA     1      1     NA      0      1      0     NA      1      0           6
tt3             1       1     1     1     0     0    NA     1    NA     NA      1      1      1     NA      0     NA      0           8
tt4             1       1     1     0     1    NA     1     1     0      0     NA      1     NA      1      0      0     NA           8
tt5             0       1     1     0     1     1    NA    NA     0      1      1      1     NA      0      0      1      1           9
tt6             0       0     0     1     1     1     1    NA     1      1      1     NA      1      1     NA      0      0           9
tt7             1       0     0     1     1     1     1     1    NA      0      1      1      1      0      1      1     NA          11

该数据集由 3000 名应试者及其对能力测试的回答组成。并非所有应试者都能对所有 18 个项目做出回应。所以一些考生只看到了 10 个项目,而另一些只看到了 12 个项目,等等。结果是一个包含很多 NA 的数据框。现在我想使用 2pl irt 模型校准项目参数。之后,我想在同一数据集上校准应试者的能力。我面临的问题是我找不到可以在缺少数据的数据帧上处理校准的 R 包。

有谁知道可以为我完成这项工作的 R 包或 R 函数,或者知道如何以其他巧妙的方式处理这个问题?

2个回答

正如我在上面的评论中所说,当数据是 MCAR 时,丢失的数据可以由ltmor包处理。mirt以下是如何在具有缺失值的数据集上使用两者的示例:

> library(ltm)
> library(mirt
> set.seed(1234)
> dat <- expand.table(LSAT7)
> dat[sample(1:(nrow(dat)*ncol(dat)), 150)] <- NA
> head(dat)
     Item.1 Item.2 Item.3 Item.4 Item.5
[1,]      0      0      0      0      0
[2,]      0      0      0      0      0
[3,]      0      0      0      0      0
[4,]      0      0      0      0      0
[5,]      0      0      0      0      0
[6,]      0      0      0      0     NA
> (ltmmod <- ltm(dat ~ z1))

Call:
ltm(formula = dat ~ z1)

Coefficients:
        Dffclt  Dscrmn
Item.1  -1.891   0.967
Item.2  -0.720   1.147
Item.3  -1.008   1.885
Item.4  -0.671   0.760
Item.5  -2.554   0.729

Log.Lik: -2572.402

> (mirtmod <- mirt(dat, 1))
Iteration: 22, Log-Lik: -2572.402, Max-Change: 0.00010
Call:
mirt(data = dat, model = 1)

Full-information item factor analysis with 1 factors 
Converged in 22 iterations with 41 quadrature. 
Log-likelihood = -2572.402
AIC = 5164.805; AICc = 5165.027
BIC = 5213.882; SABIC = 5182.122
> coef(mirtmod)
$Item.1
       a1     d g u
par 0.967 1.829 0 1

$Item.2
       a1     d g u
par 1.148 0.826 0 1

$Item.3
       a1     d g u
par 1.886 1.902 0 1

$Item.4
      a1    d g u
par 0.76 0.51 0 1

$Item.5
       a1     d g u
par 0.729 1.863 0 1

$GroupPars
    MEAN_1 COV_11
par      0      1

估计值,也可以估算缺失值,以获得模型和项目拟合统计信息(如果缺失量不小,则应该多次执行此操作,并且更好地抖动值作为各自值的函数以获得更合理的插补结果)。θθ^SEθ^

> Theta <- fscores(mirtmod, full.scores = TRUE, scores.only = TRUE)
> fulldat <- imputeMissing(mirtmod, Theta)
> head(fulldat)
  Item.1 Item.2 Item.3 Item.4 Item.5
1      0      0      0      0      0
2      0      0      0      0      0
3      0      0      0      0      0
4      0      0      0      0      0
5      0      0      0      0      0
6      0      0      0      0      0

软件包 eRm (Mair& Hatzinger) 也在处理缺失值。但 eRm 只估计一维模型http://erm.r-forge.r-project.org/