第一节 Q矩阵
测验或评估中所涉及的潜在技能模型或者认知模型采用一个Q矩阵来刻画。
Q矩阵是由1和0两种元素构成的矩阵。
元素为1表示正确作答项目要求掌握该属性,为0不要求。
要构建诊断的潜在技能模型或认知模型,就是要构建测验Q矩阵,主要包括Q矩阵元素进行指定和验证。
第二节 Q矩阵指定,选择和验证方法。
一、规则空间模型下属性指定,选择和验证方法。
规则空间(Rule Space)是规则空间模型(Rule Space Model, RSM)的核心概念之一。它是一种用于认知诊断的统计方法,旨在通过分析被试者在测试项目上的反应模式,推断其潜在的知识状态(即掌握了哪些技能或规则)。规则空间模型结合了项目反应理论(IRT)和分类分析,能够将被试者的反应模式映射到一个预先定义的规则空间中。
以下是对规则空间的详细解释,帮助你更好地理解它的含义和作用。
1. 规则空间的定义
规则空间是所有可能的潜在知识状态的集合。每个潜在知识状态表示被试者是否掌握了某些特定的技能或规则。例如:
-
如果有3个技能(Skill1, Skill2, Skill3),每个技能有两种状态(0 = 未掌握,1 = 掌握),那么规则空间就是所有可能的技能组合,共有 (2^3 = 8) 种状态。
规则空间可以用一个矩阵表示,其中每一行代表一个潜在知识状态,每一列代表一个技能。例如:
Skill1 | Skill2 | Skill3 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
2. 规则空间的作用
规则空间的作用是提供一个分类框架,将被试者的反应模式映射到某个特定的潜在知识状态。具体来说:
-
每个被试者的反应模式(即在测试项目上的得分)会被分析,并与规则空间中的每个状态进行比较。
-
通过计算反应模式与每个状态的匹配程度(例如,使用距离度量),可以将被试者分类到最接近的状态。
例如:
-
如果一个被试者的反应模式与状态
(1, 1, 0)
最匹配,那么可以推断该被试者掌握了 Skill1 和 Skill2,但未掌握 Skill3。
3. 规则空间与Q矩阵的关系
-
Q矩阵定义了测试项目与技能之间的关系。例如,Q矩阵中的每一行表示一个项目,每一列表示一个技能,矩阵中的值(0或1)表示该项目是否测量了该技能。
-
规则空间是基于Q矩阵生成的。它描述了所有可能的技能组合,而这些组合是通过Q矩阵中的技能定义的。
例如:
-
如果Q矩阵定义了3个技能(Skill1, Skill2, Skill3),那么规则空间就是这3个技能的所有可能组合(共8种状态)。
4. 规则空间模型的步骤
规则空间模型的实现通常包括以下步骤:
-
定义Q矩阵:明确每个项目测量了哪些技能。
-
生成规则空间:列出所有可能的潜在知识状态。
-
分析被试者反应:将被试者的反应模式与规则空间中的每个状态进行比较。
-
分类被试者:将被试者分类到最匹配的潜在知识状态。
-
评估分类结果:计算分类的准确性,并解释被试者的知识状态。
5. 规则空间的示例
假设我们有一个测试,包含3个技能(Skill1, Skill2, Skill3)和4个项目。Q矩阵如下:
Skill1 | Skill2 | Skill3 | |
---|---|---|---|
Item1 | 1 | 0 | 0 |
Item2 | 0 | 1 | 0 |
Item3 | 1 | 1 | 0 |
Item4 | 0 | 0 | 1 |
根据Q矩阵,规则空间是所有可能的技能组合:
Skill1 | Skill2 | Skill3 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
6. 规则空间的直观理解
可以将规则空间想象成一个地图,每个潜在知识状态是地图上的一个点。被试者的反应模式就像是一个“坐标”,通过计算与地图上每个点的距离,找到最接近的点(即最匹配的状态)。
7. 规则空间模型的优势
-
解释性强:能够明确推断被试者掌握了哪些技能。
-
灵活性高:适用于多种认知诊断场景。
-
结合IRT:能够处理项目反应理论中的不确定性。
# 1. 安装并加载必要的包
install.packages("CDM") # 如果尚未安装
library(CDM)
# 2. 创建Q矩阵
# Q矩阵定义了项目与技能之间的关系
Q <- matrix(c(
1, 0, 0, # Item1测量Skill1
0, 1, 0, # Item2测量Skill2
1, 1, 0, # Item3测量Skill1和Skill2
0, 0, 1 # Item4测量Skill3
), nrow=4, ncol=3, byrow=TRUE)
# 为Q矩阵添加行名和列名
rownames(Q) <- paste0("Item", 1:4)
colnames(Q) <- paste0("Skill", 1:3)
# 打印Q矩阵
print("Q矩阵:")
print(Q)
# 3. 生成规则空间
# 规则空间是所有可能的潜在知识状态组合
# 对于3个技能,规则空间有2^3 = 8种状态
rule_space <- expand.grid(Skill1=c(0,1), Skill2=c(0,1), Skill3=c(0,1))
print("规则空间:")
print(rule_space)
# 4. 生成模拟数据
# 使用规则空间和Q矩阵生成被试者的反应数据
set.seed(123) # 设置随机种子以保证结果可重复
N <- 100 # 被试者数量
true_states <- rule_space[sample(1:nrow(rule_space), N, replace=TRUE), ] # 随机生成真实知识状态
data <- matrix(0, nrow=N, ncol=nrow(Q)) # 初始化反应数据
# 根据Q矩阵和真实知识状态生成反应数据
for (i in 1:N) {
for (j in 1:nrow(Q)) {
# 如果被试者掌握了项目所需的所有技能,则正确回答的概率较高
required_skills <- Q[j, ]
if (all(true_states[i, ] >= required_skills)) {
data[i, j] <- rbinom(1, 1, 0.9) # 正确回答的概率为90%
} else {
data[i, j] <- rbinom(1, 1, 0.2) # 错误回答的概率为80%
}
}
}
# 打印模拟数据的前几行
print("模拟数据的前几行:")
print(head(data))
# 5. 规则空间模型分类
# 使用最近邻方法将被试者分类到规则空间中的某个状态
classify_to_rule_space <- function(data, Q, rule_space) {
classifications <- matrix(0, nrow=nrow(data), ncol=ncol(rule_space))
for (i in 1:nrow(data)) {
# 计算被试者反应与每个规则空间状态的匹配程度
distances <- apply(rule_space, 1, function(state) {
sum(abs(data[i, ] - as.numeric(state %*% t(Q))))
})
# 选择距离最小的状态作为分类结果
classifications[i, ] <- as.matrix(rule_space[which.min(distances), ])
}
return(classifications)
}
# 进行分类
classified_states <- classify_to_rule_space(data, Q, rule_space)
print("被试者的分类结果:")
print(head(classified_states))
# 6. 评估分类准确性
# 计算分类结果与真实知识状态的一致性
accuracy <- mean(rowSums(classified_states == true_states) == ncol(rule_space))
print(paste("分类准确率:", round(accuracy * 100, 2), "%"))
# 7. 可视化规则空间
# 使用热图可视化规则空间
heatmap(as.matrix(rule_space), Rowv=NA, Colv=NA, col=c("white", "black"), scale="none",
main="规则空间可视化", xlab="技能", ylab="状态")