Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标称模型的mirt-奇结果_R - Fatal编程技术网

标称模型的mirt-奇结果

标称模型的mirt-奇结果,r,R,使用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)) sco

使用
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)
编辑:
mirt
package中有一个示例:

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)

所以,正如你所说,θ及其解释似乎发生了变化,但原因和方式发生了变化?

正如胡安所说,问题在于,当使用不同的IRT模型时,θ的估计值发生了变化。此外,通过
2PL
标称
模型进行的估计之间存在某种联系

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_all <- mirt(data, 1, 'nominal')
# nominal model for only first item
df <- data.frame(data[, 1], scoredGMAT[, 2:20])
mod1_1 <- mirt(df, 1, c('nominal', rep('2PL', 19)))

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

# factor scores
fs0 <- fscores(mod0)
fs1_all <- fscores(mod1_all)
fs1_1 <- fscores(mod1_1)


plot(fs1_all ~ fs0)
plot(fs1_1 ~ fs0)
这似乎新的θ是类似于“认知”而不是“知识”,因为它几乎是减去原来的θ


谢谢你的想法,它们真的很有帮助

胡安·博斯科认为这种行为是一贯的,这是正确的。对所有项目使用标称响应模型的问题是,模型中增加的$\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)
#起始值data.frame

sv注意,如果P1是正确答案,那么它的概率随着θ的减小而增大,θ与干扰物相反。从这个意义上讲,建模是有意义的。您是否检查了其他项目以验证此行为是否一致?请注意,我确实理解,但检查P1时,它似乎在减小而不是增大。因为这是正确的答案,所以这个模型对我来说毫无意义。其他项目似乎相似。如果所有项目的正确答案始终是θ减小的项目,而干扰因素是θ增大的项目,那么
mirt
给出的结果是一致的。但是我们必须重新思考θ在这种特定情况下的建模中意味着什么,这不是一个与代码相关的问题。我更新了我的问题。我从
mirt
包中重新运行示例。当仅为前5个项目安装
nominal
模型时,一切似乎都符合
2PL
模型。但当我试图为所有项目拟合
标称值时,曲线的斜率发生了变化。正如你所说,这可能意味着θ的解释改变了。在我看来,它现在是负θ(或非常类似的),解释为“无知”(?),我也检查了因子分数,情况如我所料。当拟合所有
nominal
vs所有
2PL
时,因子得分之间的关系是线性的,截距几乎等于0,截距几乎等于-1。当仅将一个项目装配为
标称
时,θ中存在一些偏差,但几乎与原始θ相同。。好的,谢谢你的想法,现在我知道发生了什么,谢谢你详尽的评论!这是非常有用的。这正是我想要的
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_all <- mirt(data, 1, 'nominal')
# nominal model for only first item
df <- data.frame(data[, 1], scoredGMAT[, 2:20])
mod1_1 <- mirt(df, 1, c('nominal', rep('2PL', 19)))

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

# factor scores
fs0 <- fscores(mod0)
fs1_all <- fscores(mod1_all)
fs1_1 <- fscores(mod1_1)


plot(fs1_all ~ fs0)
plot(fs1_1 ~ fs0)
# linear model
round(coef(lm(fs1_all ~ fs0)), 4)

(Intercept)         fs0 
    -0.0001     -0.9972 
#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)