无法在mirt包中使用MHRM算法进行模型估计的求助
解决mirt包中MHRM算法无法使用的问题
问题背景
在R 4.2.2版本中使用mirt包,尝试通过mixedmirt()函数用Metropolis-Hastings Robbins-Monro(MHRM)算法估计多水平多维项目反应理论(MMIRT)模型,同时测试单水平模型的mirt()函数调用MHRM,均出现报错。
报错详情
- 首次调用
mixedmirt()未指定method参数时的报错:
> library(mirt) > 2l.model <- mixedmirt(data = my.data, model = EUR, itemtype = "graded", survey.weights = my.weights, fixed =~ 0, random =~ 1 | my.groups) Error in ESTIMATION(data = data, model = model, group = rep("all", nrow(data)), : opts$method %in% c("EM", "QMCEM", "MCEM") non è TRUE
- 尝试手动指定
method = "QMCEM"后的报错:
> 2l.model <- mixedmirt(data = my.data, model = my.model, itemtype = "graded", method = "QMCEM", survey.weights = my.weights, fixed =~ 0, random =~ 1 | my.groups) Error: method cannot be changed in mixedmirt() function
- 单水平模型调用
mirt()指定method = "MHRM"时的报错:
> mirt.model <- mirt(data = my.data, model = my.model, method = "MHRM", survey.weights = my.weights) Error in ESTIMATION(data = data, model = model, group = rep("all", nrow(data)), : opts$method %in% c("EM", "QMCEM", "MCEM") non è TRUE
问题原因与修复方案
核心原因
mixedmirt()函数不支持自定义估计方法,它默认仅能使用EM类算法(EM/QMCEM/MCEM),无法切换到MHRM,这也是手动指定method参数会报错的原因。- 单水平模型中调用MHRM出现报错,是因为MHRM算法不支持带有调查权重(
survey.weights)的模型估计,当传入该参数时,MHRM会被自动禁用,只能使用EM类算法。
修复步骤
多水平MMIRT模型:
- 放弃使用MHRM算法,
mixedmirt()仅支持EM类算法,直接使用默认的EM算法即可,无需指定method参数:2l.model <- mixedmirt(data = my.data, model = EUR, itemtype = "graded", survey.weights = my.weights, fixed =~ 0, random =~ 1 | my.groups) - 若必须使用贝叶斯类算法估计多水平IRT模型,建议改用
mirtCAT包中的相关函数,或切换到brms/Stan框架实现自定义模型。
- 放弃使用MHRM算法,
单水平模型使用MHRM:
- 移除
survey.weights参数,即可正常调用MHRM算法:mirt.model <- mirt(data = my.data, model = my.model, method = "MHRM") - 若必须保留调查权重,只能选择EM/QMCEM/MCEM算法进行估计。
- 移除
内容的提问来源于stack exchange,提问作者fedebacchi
相关产品推荐
相关产品推荐

