mirt-名义模型的奇数结果

阿黛尔

使用mirt包装,我的标称模型获得了(可能)奇怪的结果。

 library(difNLR)
 library(mirt)
 data("GMATtest", "GMATkey")
 key <- as.numeric(as.factor(GMATkey))
 data <- sapply(1:20, function(i) as.numeric(GMATtest[, i]))
 colnames(data) <- paste("Item", 1:ncol(data))
 scoredGMAT <- key2binary(data, key)

 # 2PL IRT model for scored data
 mod0 <- mirt(scoredGMAT, 1)
 # nominal model for unscored data
 mod1 <- mirt(data, 1, 'nominal')

# plots of characteristic curves for item 1
itemplot(mod0, 1)
itemplot(mod1, 1)

在此处输入图片说明在此处输入图片说明

我期望标称模型mod1会有一条非常类似于我的正确答案的曲线mod0但是,似乎随着干扰角的增加,干扰物的概率也随之增加,这似乎并不合理。当然,数据可能有问题,或者(很可能是)我遗漏了一些..

我已经检查了mirt帮助中的示例,结果与预期的一样。

任何建议(可能出了什么问题)将不胜感激!

最后一件事-我也尝试拟合2PLNRM模型,但我的R会话中止了。有人注意到同样的问题吗?我的代码:

# 2PLNRM model
mod2 <- mirt(data, 1, "2PLNRM", key = key)
coef(mod2)$`Item 1`
itemplot(mod2, 1)

编辑:mirt包中有一个示例

library(mirt)
data(SAT12)
SAT12[SAT12 == 8] <- NA #set 8 as a missing value
head(SAT12)

# correct answer key
key <- c(1, 4, 5, 2, 3, 1, 2, 1, 3, 1, 2, 4, 2, 1, 5, 3, 4, 4, 1, 4, 3, 
         3, 4, 1, 3, 5, 1, 3, 1, 5, 4, 5)
scoredSAT12 <- key2binary(SAT12, key)
mod0 <- mirt(scoredSAT12, 1)

# for first 5 items use 2PLNRM and nominal
scoredSAT12[, 1:5] <- as.matrix(SAT12[, 1:5])
mod1 <- mirt(scoredSAT12, 1, c(rep('nominal', 5), rep('2PL', 27)))

coef(mod0)$Item.1
coef(mod1)$Item.1

itemplot(mod0, 1)
itemplot(mod1, 1)

结果是我所期望的,但是,当我尝试nominal对所有项目拟合模型时,曲线发生了变化:

# nominal for all items
mod1 <- mirt(SAT12, 1, 'nominal')
coef(mod1)$Item.1
itemplot(mod1, 1)

因此,正如您所建议的,似乎theta及其解释发生了变化,但是为什么以及如何改变呢?

philchalmers

@Juan Bosco是正确的,此行为是一致的。对所有项目使用名义响应模型的问题在于,$ \ theta $值增加的方向在模型中不明显,因为它的方向是任意的(毕竟,默认情况下,项目是“无序的”)。

此外,由于mirt的默认参数设置(假定最低/最高数值类别应与低/高$ \ theta $值相关联),因此这种类型的翻转在多个选择类型项中很常见(其中,与订购的等级量表不同数据,应该没有直接关系),因为模型会选择与这些识别约束条件最匹配的方向。

要解决此问题,只需mirt将最高的固定评分系数替换为提供的实际评分键,即可重新定义使用的评分约束像这样:

#starting values data.frame
sv <- mirt(data, 1, 'nominal', pars = 'values')
head(sv)

# set all values to 0 and estimated
sv$value[grepl('ak', sv$name)] <- 0
sv$est[grepl('ak', sv$name)] <- TRUE

nms <- colnames(data)
for(i in 1:length(nms)){

    #set highest category based on key fixed to 3
    pick <- paste0('ak', key[i]-1)
    index <- sv$item == nms[i] & pick == sv$name
    sv[index, 'value'] <- 3
    sv[index, 'est'] <- FALSE

    # set arbitrary lowest category fixed at 0
    if(pick == 'ak0') pick2 <- 'ak3'
    else pick2 <- paste0('ak', key[i]-2)
    index2 <- sv$item == nms[i] & pick2 == sv$name
    sv[index2, 'est'] <- FALSE
}

#estimate
mod2 <- mirt(data, 1, 'nominal', pars=sv)
plot(mod2, type = 'trace')
itemplot(mod2, 1)
coef(mod2, simplify=TRUE)

至少,这可以告知模型哪个类别是最高的,因此可以提供足够的信息来完成更合适的定位。请注意,这实际上并不会影响模型的解释,因为发生的只是将坡度乘以-1并相应地调整得分系数。HTH。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建不同大小和长度的lavaan和mirt模型置换

来自分类Dev

创建不同大小和长度的lavaan和mirt模型置换

来自分类Dev

mirt图中的字体大小

来自分类Dev

mirt包中摘要方法的代码

来自分类Dev

试图找到一种方法来在同一时间内将R中3个不同mirt模型中的IRT信息图组合在一起

来自分类Dev

X ++奇数计数结果

来自分类Dev

模型结果

来自分类Dev

模型结果

来自分类Dev

奇数表模型空指针

来自分类Dev

R箱线图-奇数结果

来自分类Dev

DocumentDB空间查询-奇数结果

来自分类Dev

AICc 如何处理线性模型中的名义变量和数值变量?

来自分类Dev

将循环锦标赛的名义结果转换为邻接矩阵列表

来自分类Dev

感知器收敛但返回奇数结果

来自分类Dev

LINQ投影(选择)返回奇数结果

来自分类Dev

返回奇数结果的日期之间的比较

来自分类Dev

抛物线方程产生奇数结果

来自分类Dev

C语言程序显示错误结果,奇数

来自分类Dev

jQuery / Ajax请求中结果的奇数加倍

来自分类Dev

base64操作的结果奇数

来自分类Dev

显示偶数和奇数SQL结果(PHP)

来自分类Dev

抛物线方程产生奇数结果

来自分类Dev

从双变量中获得奇数结果(C)

来自分类Dev

Qt5.5 QString indexOf奇数结果

来自分类Dev

MySQL LIKE 语句返回奇数结果

来自分类Dev

模型 Laravel 的分页结果

来自分类Dev

解释随机森林模型结果

来自分类Dev

PHP模型未返回结果

来自分类Dev

在奇数navigationItem / backBarButtonItem中弹出View Controller结果标题交换