R中的纵向项目响应理论模型

机器算法验证 r 混合模式 重复测量 面板数据 项目反应理论
2022-04-05 11:14:30

我正在尝试在 R 中拟合纵向项目响应理论 (IRT) 模型。我有一个在多个测量场合进行的测试。我想从分级响应模型 (GRM) 中检查个人因子得分(即能力水平)的增长曲线。我已经使用 R 中的 ltm 包来拟合 IRT 中的横截面 GRM 模型,但我不清楚如何(或者是否甚至可以在 ltm 中)扩展模型以处理跨时间对相同项目的重复测量。如何将增长曲线拟合到纵向 GRM 因子分数,以查看能力水平的均值/方差随时间的变化?如果 ltm 包无法做到这一点,哪些包/功能允许这样做?将特别感谢具体的代码示例。

以下是与我想要做的类似的经验示例(除了示例对二进制项目使用 Rasch 模型,而我将 GRM 用于多分数据):

McArdle, JJ, Grimm, KJ, Hamagami, F., Bowles, RP 和 Meredith, W. (2009)。使用具有多个样本和不断变化的测量尺度的纵向数据对认知的寿命增长曲线进行建模。心理学方法14,126-149doi: 10.1037/a0015857

麦卡德尔,JJ 和格林,KJ(2011 年)。通过链接来自多个测试的纵向项目响应数据来进行变化分析的经验示例。在 AA Davier (Ed.), Statistical models for test equating, scaling, and linking (pp. 71-88): Springer: New York。

例如,我希望能够估计和绘制个人的增长曲线,以检查能力水平随时间的平均变化(来自 McArdle & Grimm,2011): 个人能力水平随时间的增长曲线

而且,我希望能够估计样本的平均或原型增长曲线(来自 McArdle & Grimm,2011): 能力水平随时间的平均/原型增长曲线

这是一个模拟数据集,在 3 个不同的时间点包含 20 个多分项(1-3 个响应量表):

library(mirt)
library(mvtnorm)

set.seed(1)

numberItems <- 20
numberItemLevels <- 2
sampleSize <- 1000

a <- matrix(rlnorm(numberItems, .2, .2))
d <- matrix(rnorm(numberItems*numberItemLevels), numberItems)
d <- t(apply(d, 1, sort, decreasing=TRUE))

Theta <- mvtnorm::rmvnorm(n=sampleSize, 0, matrix(1))

t1 <- simdata(a, d, N=sampleSize, itemtype="graded", Theta=Theta)
t2 <- simdata(a, d, N=sampleSize, itemtype="graded", Theta=Theta+.5)
t3 <- simdata(a, d, N=sampleSize, itemtype="graded", Theta=Theta+1)

dat <- data.frame(t1, t2, t3)
2个回答

作为一个先驱,由于更高的维度,IRT 方法对这个问题的计算要求非常高。使用 WLSMV 估计器来研究序数数据的结构方程建模 (SEM) 替代方案可能是值得的,因为我认为存在的问题会更少。另外,在该框架内包含外部协变量要容易得多。我在此处描述的两种方法在 SEM 中也是可行的。

我知道有两种方法可以估计本质上不是 Rasch 的一维纵向 IRT 模型。第一种方法需要每个时间块的唯一潜在因子和每个项目的特定残差变化项。另一种方法,类似于在 SEM 文献中发现的方法,是通过潜在增长曲线模型,其中仅估计固定数量的因素(如果认为随着时间的关系是线性的,则为三个)。在这种方法中使用了固定载荷,因此由于估计参数数量的减少,它在计算上可能更加稳定,所以我更倾向于使用增长曲线模型来处理更小的维度和更少的估计参数。

这两种方法的想法是设置潜在time因素,表明人的水平如何θ值在每次测试管理中发生变化,并限制它们的负载随时间的影响,以便可以估计它们的超参数(即潜在均值和协方差)。还必须跨时间施加项目约束以保持不变,以便仅在超参数中捕获人员差异。由于这种方法可能需要大量的集成维度,因此您需要使用函数mirt下可用的降维算法之类的东西bfactor()

我不会在这里通过一个需要大量代码的工作示例,而是简单地指出这些分析的工作版本。不过提醒一句,这些计算要求很高,可能需要一个多小时才能在您的计算机上收敛,因为在第一种情况下您有 4 个维度的积分,在第二种情况下有 3 个维度。或者,如果您没有太多 RAM,则在增加quadpts.

数据模拟脚本:https ://github.com/philchalmers/mirt/blob/gh-pages/data-scripts/Longitudinal-IRT.R

分析输出: http: //philchalmers.github.io/mirt/html/Longitudinal-IRT.html

在第一个示例中,如果您通过使用保存因子分数,fscores()您将获得每个时间点的估计值,关于个体如何θ价值观正在改变。在第二个示例中,使用线性增长曲线方法,因子得分的第一列将代表初始θ估计,而第二列将指示随时间平均发生的斜率/变化。在示例中,我设置了 0.5 的恒定平均变化,因此fscores()每个人的值都应该在 0.5 左右。两种分析都给出了大致相同的结论,但解决问题的方法有些不同。但是,如果您熟悉 SEM 中的纵向模型,那么这些应该是相当自然的解释。

在复杂 IRT 模型(多组、纵向/重复测量、多维)的 IRT 文献中,推荐的框架是贝叶斯,因为估计相对容易。我使用 R 包“rstan”有很好的经验,它实现了哈密顿蒙特卡洛的风格。我有一个数据集,包含在 6 个时间点测量的近 3000 名受试者,有 5 个维度和 3 个组,并且 rstan 工作得非常好。我正在将 GRM 模型拟合到包含 30 个项目的序数测试中。查看 stan 用户组的示例代码。