在 TAM 中实施 ConQuest 评分命令
Implement ConQuest score command in TAM
在 IRT 软件 ConQuest 中,您可以使用命令 "score" 使用相同的清单 variable/raw 数据对多个 dimensions/latent 变量建模,但不同的编码。例如:
score (1,2,3) (0,1,2) (0,1,0) ! items(1-3);
"recodes"第一维度0、1、2的原始分数从1到3,第二维度(隐变量)到0、1、0的原始分数。
你知道如何在 R 包 TAM 中实现相同的方法吗(使用 lavaan 语法或其他方式)?我正在尝试 运行 PCM 分析。
非常感谢!
KH
我在这里没有得到答案,但我联系了 TAM 包的作者 Alexander Robitzsch,这是他发给我的(经他许可发表):
data(data.gpcm)
psych::describe(data.gpcm)
resp <- data.gpcm
# define three dimensions and different loadings
# of item categories on these dimensions
I <- 3 # 3 items
D <- 3 # 3 dimensions
# define loading matrix B
# 4 categories for each item (0,1,2,3)
B <- array( 0 , dim=c(I,4,D) )
for (ii in 1:I){
B[ ii , 1:4 , 1 ] <- 0:3
B[ ii , 1 ,2 ] <- 1
B[ ii , 4 ,3 ] <- 1
}
dimnames(B)[[1]] <- colnames(resp)
B[1,,]
## > B[1,,]
## [,1] [,2] [,3]
## [1,] 0 1 0
## [2,] 1 0 0
## [3,] 2 0 0
## [4,] 3 0 1
# test run
mod1 <- tam.mml( resp , B = B , control=list( snodes=1000 , maxiter=5) )
summary(mod1)
当然,我必须根据自己的需要编辑代码,但是你们所有人可能会特别感兴趣:出于某种原因,B 矩阵只有在我还定义了 0 类别时才有效,尽管我的 ratings/data 只包括从 1 到 5 的值:
B <- array( 0 , dim=c(9,6,5) ) # 9 items, 5 response cat. + 1, 5 latent dimensions
for (ii in 1:I){
B[ ii , 1:6 , 1 ] <- 0:5
B[ ii , 2 ,2 ] <- 1
B[ ii , 2 ,3 ] <- 1
B[ ii , 6 ,3 ] <- 1
B[ ii , 6 ,4 ] <- 1
B[ ii , 4 ,5 ] <- 1
}
dimnames(B)[[1]] <- colnames(X)
B[1,,]
干杯,
KH
正如 TAM
对上述答案的扩展,这里是如何 运行 使用 mirt
包的相同代码,除了使用广义部分信用模型而不是Rasch 模型(Rasch 模型需要明确的模型参数才能正确识别)。
library(mirt)
gpcm_mats <- list(B[1,,], B[2,,], B[3,,])
sv <- mirt(resp, 3, itemtype = 'gpcm',
gpcm_mats = gpcm_mats, pars = 'values') #starting values
mod <- mirt(resp, 3, itemtype = 'gpcm', gpcm_mats = gpcm_mats)
coef(mod, simplify=TRUE)
在 IRT 软件 ConQuest 中,您可以使用命令 "score" 使用相同的清单 variable/raw 数据对多个 dimensions/latent 变量建模,但不同的编码。例如:
score (1,2,3) (0,1,2) (0,1,0) ! items(1-3);
"recodes"第一维度0、1、2的原始分数从1到3,第二维度(隐变量)到0、1、0的原始分数。
你知道如何在 R 包 TAM 中实现相同的方法吗(使用 lavaan 语法或其他方式)?我正在尝试 运行 PCM 分析。
非常感谢!
KH
我在这里没有得到答案,但我联系了 TAM 包的作者 Alexander Robitzsch,这是他发给我的(经他许可发表):
data(data.gpcm)
psych::describe(data.gpcm)
resp <- data.gpcm
# define three dimensions and different loadings
# of item categories on these dimensions
I <- 3 # 3 items
D <- 3 # 3 dimensions
# define loading matrix B
# 4 categories for each item (0,1,2,3)
B <- array( 0 , dim=c(I,4,D) )
for (ii in 1:I){
B[ ii , 1:4 , 1 ] <- 0:3
B[ ii , 1 ,2 ] <- 1
B[ ii , 4 ,3 ] <- 1
}
dimnames(B)[[1]] <- colnames(resp)
B[1,,]
## > B[1,,]
## [,1] [,2] [,3]
## [1,] 0 1 0
## [2,] 1 0 0
## [3,] 2 0 0
## [4,] 3 0 1
# test run
mod1 <- tam.mml( resp , B = B , control=list( snodes=1000 , maxiter=5) )
summary(mod1)
当然,我必须根据自己的需要编辑代码,但是你们所有人可能会特别感兴趣:出于某种原因,B 矩阵只有在我还定义了 0 类别时才有效,尽管我的 ratings/data 只包括从 1 到 5 的值:
B <- array( 0 , dim=c(9,6,5) ) # 9 items, 5 response cat. + 1, 5 latent dimensions
for (ii in 1:I){
B[ ii , 1:6 , 1 ] <- 0:5
B[ ii , 2 ,2 ] <- 1
B[ ii , 2 ,3 ] <- 1
B[ ii , 6 ,3 ] <- 1
B[ ii , 6 ,4 ] <- 1
B[ ii , 4 ,5 ] <- 1
}
dimnames(B)[[1]] <- colnames(X)
B[1,,]
干杯, KH
正如 TAM
对上述答案的扩展,这里是如何 运行 使用 mirt
包的相同代码,除了使用广义部分信用模型而不是Rasch 模型(Rasch 模型需要明确的模型参数才能正确识别)。
library(mirt)
gpcm_mats <- list(B[1,,], B[2,,], B[3,,])
sv <- mirt(resp, 3, itemtype = 'gpcm',
gpcm_mats = gpcm_mats, pars = 'values') #starting values
mod <- mirt(resp, 3, itemtype = 'gpcm', gpcm_mats = gpcm_mats)
coef(mod, simplify=TRUE)