DINA认知诊断模型全解析:原理、改进与工程实践
简介《认知诊断DINA模型研究进展》张潇是一篇关于认知诊断模型DINA的理论综述面向教育学、心理学及测量学方向的研究者系统梳理了DINA模型从提出到改进的发展脉络帮助读者快速把握该模型的核心思想、适用场景与前沿方向。文档为PDF格式共1个文件压缩包约1.31MB轻量便于随时查阅。目前已有517人学习/下载是了解认知诊断领域不可多得的入门与进阶材料。内容围绕DINA模型展开详细介绍了Q矩阵的构建、失误与猜测两个参数的数学定义及似然函数并重点评述了HO-DINA、P-DINA、G-DINA等改进模型如何应对传统模型的局限最后结合个性化教学与补救教育探讨了实际应用价值。适合需要撰写文献综述、设计认知诊断测验或从事教育数据挖掘的读者系统阅读。1. 认知诊断模型DINA用两个参数穿透分数的黑匣子一次小学分数减法测验结束后A同学拿到75分。这个分数能说明他掌握了“分数减法”吗能说明他卡在哪个环节吗不能。传统测验只输出总分而认知诊断模型要做的是穿透分数判断被试在每项认知属性上的真实掌握状态。DINA模型正是其中最有代表性、也最容易落地的一种只引入“失误”与“猜测”两个参数用一张0/1构成的Q矩阵描述题目与认知属性之间的关系就能输出每个被试的知识状态向量。自2001年前后正式提出后围绕它的改进、验证和应用研究持续了十多年衍生出高阶、多级评分、一般化等多个变体。这份文献综述正是沿着“原理、改进、应用”这条线把DINA模型讲透的适合教育测量方向的研究者、命题与评估人员以及想做学习诊断系统的技术从业者。2. DINA模型的核心机制Q矩阵、双参数设定与估计路线很多人第一次接触DINA模型会觉得它“过于简单”——整个模型只有两个被试参数公式也短。但真正跑过模拟数据之后会发现这个模型的简洁恰恰是它的优势参数少可解释性强对样本量的要求也比复杂模型低。要把DINA模型用好首先得把它的三个核心组件拆开Q矩阵怎么建、失误与猜测参数怎么定义、参数估计走哪条路线。2.1 从Q矩阵到知识状态属性向量怎么构建Q矩阵是整个认知诊断的认知地图。假设一份测验有J道题通过认知分析定义了K个属性Q矩阵就是一个J行K列的0/1矩阵。每一行对应一道题每一列对应一个属性取值为1表示“正确作答这道题必须掌握这个属性”取值为0表示不需要。这里说的属性可以是一种技能、一个知识点也可以是一种加工过程。以分数减法为例文献里对小学分数减法的认知过程做了分析归纳出五种属性基本分数减法、化简、将整数部分与分数部分分开、从整数部分借1、将整数变为分数。比如要正确作答“735 - 45”这道题需要掌握属性1、属性3和属性4那么在Q矩阵里这道题对应的行向量就是10110。题目属性1 基本分数减法属性2 化简属性3 整数与分数分开属性4 从整数借1属性5 整数变分数735 - 4510110其他题目……………Q矩阵建好之后被试的属性掌握模式用 αi {αik} 表示k 1, 2, …, K。如果被试掌握了第k个属性αik 1否则为0。在这个基础上DINA模型定义了一个潜在作答向量 ηij表示被试i在第j题上的理想作答结果ηij ∏ αik^qjkk从1到K连乘。也就是说只有当被试掌握了题目考核的全部属性时ηij 1只要缺一个属性ηij 0。这个连乘形式就是DINA模型“确定性输入、与门连接”这个名字的来源。实际操作中建Q矩阵是第一步也是最容易返工的一步。我一般会先找学科老师或领域专家做认知属性分析把每道题的解题路径拆出来再转成0/1向量。这个环节不要赶时间Q矩阵错一个属性后面估计出来的失误和猜测参数都会跟着偏。2.2 失误和猜测两个参数如何决定作答概率如果没有噪声被试的作答结果完全由ηij决定那就变成了确定性模型。但实际测验里被试在理想作答向量之外还会受到两类干扰一类是掌握了全部属性却答错称为“失误”另一类是没掌握属性却答对了称为“猜测”。DINA模型用两个参数分别刻画这两种情况sj P(Yij 0 | ηij 1)即掌握了全部所需属性但答错的概率gj P(Yij 1 | ηij 0)即未掌握全部所需属性但答对的概率。于是掌握模式为αi的被试正确作答第j题的概率为P(Yij 1 | αi) (1 - sj)^ηij · gj^(1 - ηij)这个公式的含义很直白当ηij 1时答对概率是1 - sj当ηij 0时答对概率是gj。注意这里的“猜测”并不等于完全瞎猜。文献里特别解释过猜测参数实际上包含了那些没有反映在Q矩阵里的其他解题策略。比如一道题可以用另一种认知路径解出来只是这条路径没有进入Q矩阵那么具备这些额外属性的被试就能“系统地”答对而不是随机蒙对。这也是为什么Q矩阵如果建得不完整gj会异常偏高。整个模型在项目反应理论的局部独立假设下构建似然函数L(s, g, α) ∏(i1..N) ∏(j1..m) [pj(αi)]^Yij · [1 - pj(αi)]^(1 - Yij)这个似然函数是后面用MCMC或EM算法做参数估计的起点。每次跑估计之前我会先检查一下sj和gj的先验范围一般要求不小于0、不大于0.4并且满足 1 - sj gj。如果估计结果突破了0.4基本可以断定Q矩阵有问题而不是算法调参的问题。2.3 参数估计的两条路线MCMC与EMDINA模型的参数估计文献里主要有两条路线。一条是MCMC方法把被试的掌握模式α、失误参数s、猜测参数g都当作待估参数从后验分布里抽样。这条路线实现起来相对直接适合属性个数中等、样本量不算太大的场景也是早期DINA研究最常用的方法。另一条是边际极大似然路线包括联合极大似然估计JMLE和边际极大似然估计MMLE。这类方法把被试参数积分掉只估计项目参数计算量更小收敛速度更快。文献里专门有研究比较过两条路线的精度结论是MCMC在参数估计精度上表现更好但计算时间更长。如果数据量上了几万人纯MCMC会跑得很痛苦这时候用MMLE或EM算法更现实。估计路线实现方式优点适用场景MCMC贝叶斯抽样精度高能同时估计被试与项目参数中小规模数据、属性数适中、研究阶段JMLE / MMLE极大似然 EM计算快适合大规模数据项目池大、样本量大、工程化部署参数估计完成之后还有一个容易被忽略的检查项看s和g的估计值是否落在合理区间。文献给出的经验界限是0.4超过这个值就要回头查Q矩阵。这不是玄学而是参数本身承载着认知假设——如果“失误”和“猜测”的概率高到接近随机作答说明题目或者属性定义并没有真正刻画被试的认知加工过程。3. 三种改进模型怎么选HO-DINA、P-DINA与G-DINA的边界传统DINA模型虽然简洁但局限也很明显只能处理0-1计分数据默认每个项目只有一种解题策略且没有考虑属性之间的关联结构。围绕这几个缺陷文献里陆续出现了三支重要的改进方向HO-DINA引入高阶能力因子P-DINA扩展多级评分G-DINA则把整个DINA家族收编进一个统一框架。这三者不是彼此替代的关系而是适用于不同数据条件和研究目标。3.1 HO-DINA引入高阶能力θ降低属性组合爆炸DINA模型里被试的知识状态是一个K维0/1向量属性个数一多可能的掌握模式就有2的K次方种。比如10个属性就有1024种模式光靠数据往往很难把每种模式都估计稳。HO-DINA模型的思路是假设这些认知属性背后存在一个更高阶的一般能力θ在给定θ的前提下各属性的掌握概率条件独立。P(α | θ) ∏(k1..K) P(αk | θ)P(αk | θ) exp[1.7·λ1·(θ - λ0k)] / (1 exp[1.7·λ1·(θ - λ0k)])从形式上看这是一个以认知属性为“项目”、以θ为潜在特质的高阶逻辑回归模型。λ0k类似于属性k的难度参数λ1是斜率参数1.7是IRT里常用的缩放常量。实际用下来HO-DINA最明显的收益是降低了技能组合的数量压力——你不必为每一种属性模式都准备足够的样本量模型会借助θ的结构信息来平滑估计。这个模型的适用场景很清晰当研究假设认为被试的整体能力水平会系统性地影响属性掌握概率时HO-DINA比传统DINA更合适。而且它有一个传统DINA没有的副产品——可以同时报告被试的总体能力θ和具体属性掌握情况这两类信息放在一起比单纯给一个“掌握/未掌握”向量更有解释力。3.2 P-DINA多级评分数据的扩展现实中的教育测验大量使用多级计分一道题不是只有对错还有部分分。传统DINA模型只能处理0-1数据硬把多级评分压成二值会丢掉大量信息。P-DINA模型就是用等级反应模型里的累积类别反应函数思想把DINA扩展到了多级评分场景。P(Yij t | αi) P*(Yij ≥ t | αi) - P*(Yij ≥ t 1 | αi)其中P*(Yij ≥ t | αi)表示被试i在第j题上得分达到t级及以上的概率其形式与DINA的0-1概率函数类似但每一级有各自的失误和猜测参数。P-DINA模型需要估计的参数数量明显增加——除了被试属性掌握模式还要估计多级评分下每一级的s和g。文献里采用MCMC算法实现参数估计并经蒙特卡洛模拟检验了模型性能。这里有一个对实际应用非常关键的结论如果希望属性模式判准率保持在80%以上建议诊断的属性个数不宜超过7个。这条经验值在做研究设计时就要记住——不是属性拆得越细越好属性太多多级评分下的参数估计精度会明显下降。我见过的翻车案例里有人在P-DINA里塞了9个属性跑到最后判准率掉到70%以下回头砍掉两个属性之后才稳下来。3.3 G-DINA把DINA装进一个统一框架G-DINA模型的贡献不在于多了一个新模型而在于提供了一个一般性框架。它在传统DINA基础上放松了对条件的限制用一个饱和模型刻画属性与作答概率的关系P(α*ij) δj0 Σδjk·αjk Σδjkk·αjk·αjk … δj12…k*j·∏α公式里的δj0是截距表示未掌握任何属性时的基线答对概率δjk是属性k的主效应δjkk是属性k和k的交互效应最后一项是所有属性的最高阶交互。当δj0和最高阶交互项不为0其余主效应和低阶交互项都为0时这个一般模型就退化为DINA模型。也就是说DINA只是G-DINA在特定约束下的一个特例。这个框架的实际价值在于模型比较。以前想判断“数据到底支持DINA还是更复杂的模型”缺乏统一的参照系。有了G-DINA之后可以在同一个框架下做似然比检验判断哪些交互项显著、哪些可以约束为0从而在简单性和拟合度之间找一个平衡点。文献里建议用EM算法做G-DINA的参数估计同时也指出如果能用更底层的语言重新实现参数估计程序对大规模数据处理会更有帮助。模型解决了什么问题核心特征适用场景DINA基础认知诊断双参数、与门结构0-1计分、单一策略、属性数较少HO-DINA属性组合爆炸高阶能力θ 逻辑回归属性间受整体能力支配P-DINA多级评分数据累积类别反应函数多级计分、属性数≤7G-DINA统一模型比较饱和模型 约束特例模型选择与拟合检验4. DINA模型的应用路径从测验编制到认知诊断CATDINA模型真正能落地的环节不只是数据分析更关键的是测验编制。一份普通测验只需要控制难度和区分度一份认知诊断测验还要求题目能够有效区分不同的属性掌握模式。这直接影响到怎么选题、怎么组卷、怎么和计算机自适应测验结合。4.1 认知诊断测验编制K-L信息量与项目筛选在传统测验里选题靠的是难度和区分度指标。认知诊断测验里刷选标准变成了“这道题对区分两种属性掌握模式有多大贡献”。文献里提出用K-L信息量Kullback-Leibler Information作为选题依据——它度量的是某个项目在不同掌握模式下作答概率分布的差异程度。差异越大说明这道题越能帮我们区分不同的知识状态。具体操作可以按三步走第一步根据Q矩阵和初步属性分析为每道题计算它在所有候选掌握模式下的作答概率第二步计算每道题的K-L距离评估区分能力第三步按属性覆盖度和K-L信息量排序优先选择覆盖了稀缺属性组合、且区分度高的题目。在这个基础上研究者还尝试用遗传算法自动组卷。思路是把“构成一份满足属性覆盖和信息量要求的试卷”编码成一个优化目标用遗传算法迭代搜索替代人工排题。工程上要做认知诊断测验我一般建议把Q矩阵的设计和题目筛选合并成一个流程来做——先用专家分析确定属性生成候选题目的Q向量再跑K-L筛选最后用模拟数据验证整份试卷在已知真实掌握模式下的判准率。4.2 CD-CAT计算机自适应测验与认知诊断的结合认知诊断和计算机自适应测验结合之后就形成了CD-CAT。常规CAT的目标是高效估计被试的能力值θCD-CAT的目标则是尽可能准确地判断被试属于哪一种属性掌握模式。目标变了选题策略也跟着变。一个典型的CD-CAT流程是这样的初始化为每个被试设定一个属性掌握模式的先验分布。选题从项目池中挑选当前对区分候选模式最有信息量的题目常用K-L信息量或其变体作为选题指标。作答呈现题目记录作答结果。更新用作答结果更新被试属性模式的后验分布。终止当某个属性模式的后验概率超过阈值或达到预设题数上限时停止输出诊断结果。CD-CAT落地时有一个容易被低估的工程问题项目池要覆盖所有属性组合否则某些掌握模式的被试在选题阶段会一直选不到合适的题目。文献里还专门研究了在DINA模型下的CD-CAT表现结论是合理的选题策略能显著降低诊断所需的题目数量——这意味着同样时长的测验CD-CAT能做到比固定题本更精细的诊断。4.3 教育评估与临床研究中的典型用法DINA模型的应用研究在教育和临床两个方向都有积累。教育领域最典型的场景是数学问题解决诊断和阅读能力评估数学测验可以拆成计算规则、转化、借位等多个认知属性阅读测验可以拆成信息提取、推理整合等属性每个学生最终拿到的不再是一个笼统的分数而是一份“哪些属性已掌握、哪些属性缺失”的诊断单补救教学就有了明确靶点。临床方面也有研究把DINA模型用于病理性赌博行为的评估。这个场景很有意思——测验题目并不是对错题而是行为指标Q矩阵刻画的是每种行为指标背后对应的认知或行为特征诊断结果可以帮助临床工作者定位问题行为模式。不过和传统教育测评相比这类临床应用的样本量和属性界定更困难实际落地时需要更谨慎地验证Q矩阵的合理性。国内的应用研究起步相对晚主要集中在数学和阅读两个学科而且多是用DINA做实证数据的回溯分析真正从测验编制阶段就按认知诊断理念设计的还不多。对从业者来说这意味着一个现实的机会DINA模型的理论工具已经比较成熟缺的是把它前移到测验设计环节的工程实践。5. DINA模型实战避坑参数越界、Q矩阵误设与多策略陷阱DINA模型看起来只有两个参数跑起来似乎不难真正上手之后才会发现坑都在数据里和Q矩阵里。这一章把我见过的失败案例和文献里明确警告过的问题集中列出来每一条都是“现象、原因、解决”的结构希望能帮你少走弯路。5.1 失误和猜测参数越过0.4现象MCMC或EM估计跑完后某道题的sj或gj超过了0.4甚至接近0.5。乍看参数还在0到1之间模型也能收敛但诊断结果明显不合理——大量被试被判为“恰好猜对”或“恰好失误”。原因文献里明确写过sj和gj值过大基本可以归为三类问题一是Q矩阵界定得不好某些题目实际用到的属性没有被列进去或者是多余的属性被列了进去二是被试使用了Q矩阵之外的解题策略这些策略被模型当成了“猜测”三是模型与数据本身不拟合被试的作答模式不符合DINA的与门假设。解决不要急着调MCMC的迭代次数或先验。先回到Q矩阵逐题核对属性设定如果某道题存在多种可接受的解法考虑改题或者在模型层面换用多策略扩展。按经验一道题如果sj或gj超过0.4多半是属性定义环节出了问题。5.2 估计结果不满足 1 - sj gj现象某道题的失误参数和猜测参数加起来大于1比如sj 0.5、gj 0.6。从概率角度看这意味着“掌握了所有属性的人答对概率”反而低于“没掌握属性的人答对概率”明显违背了模型的基本假设。原因这个不等式本质上是模型可解释性的底线。出现这种情况通常是该题目在两组被试掌握全部属性 vs 缺失至少一个属性之间的作答概率差异太小甚至是反向的。最常见的原因是Q矩阵把这道题不需要的属性也写了进去导致“掌握全部属性”的定义失真。解决先把这道题单独拿出来重新做认知分析确认它的属性需求然后看样本量是否足够支撑两个参数同时被稳定估计最后可以尝试删掉该题重新跑一遍观察整体判准率的变化。如果删题后结果明显变好说明这道题本身有问题留着只会拖累整个模型。5.3 P-DINA模型属性个数超过7个现象用P-DINA做多级评分数据分析时模型收敛了属性模式判准率却一直上不去卡在70%左右。模拟实验里换了不同的样本量效果也没有本质改善。原因文献里用蒙特卡洛模拟验证过P-DINA要保证属性模式判准率在80%以上诊断的属性个数不宜超过7个。原因是多级评分模型要估计的参数远超0-1模型——除了属性模式每一级计分都有各自的s和g参数空间膨胀得很快数据提供的有效信息密度跟不上。解决在设计认知属性时就要控制数量。如果研究确实需要更精细的属性划分可以分两阶段先用一个较粗的属性集做整体诊断再对疑似困难的区域用更细的属性集做二次诊断。另一种思路是扩大样本量但效果有限属性太多时样本量再大也难以弥补模型复杂度的上升。5.4 Q矩阵界定不完整猜测参数系统性偏高现象一批题目的gj普遍偏高多道题都在0.3以上而且删掉任何一道题都无法单独解释这个现象。被试的诊断结果也异常很多人被判定为“未掌握属性但答对”比例高得不合理。原因文献里专门研究过Q矩阵不完整的影响。如果测验中存在Q矩阵之外的解题策略被试可以依赖这些属性系统性答对模型会把这部分区分不出来全部归入gj。这不是某一题的问题而是整个认知分析框架的缺口。解决回到认知分析环节请领域专家补充常见解题路径尤其是“非标准解法”。把这些路径纳入Q矩阵之后gj通常会明显回落。如果某些策略确实无法避免但又不适合写进Q矩阵可以考虑把对应题目替换为更封闭的题型减少多路径作答的空间。5.5 多策略DINA模型的前提限制现象想把多策略DINA模型用于实际数据每道题可以解出多个属性向量但估计结果不理想判准率不升反降。原因经典的多策略DINA模型有一个很强的假设——不同策略的难度相等失误和猜测参数对所有策略取相同值。实际测验里用不同策略解题的难度几乎不可能完全一致这个前提不满足时模型强行共用参数就会带来偏差。解决先用模拟数据检查在已知“策略难度不等”的情况下模型是否还能恢复真实参数。如果不行就要考虑能允许s和g随策略变化的扩展版本文献里也指出这个问题还需要进一步研究应用时要谨慎评估模型的适用边界。6. 上手验证DINA模型的三个步骤模拟数据、收敛检查与判准率拿到一份DINA模型相关的代码或工具第一件事不是直接分析真实测验数据而是用模拟数据把整个流程验证一遍。这个习惯能帮你过滤掉大量“看起来在跑、其实在算错”的隐患。我一般的做法分三步。第一步构造已知真值的模拟数据。先确定Q矩阵的规模比如5道题、3个属性生成对应的0/1矩阵再设定真实的失误和猜测参数比如所有题目的sj 0.1、gj 0.2然后从预先定义的属性掌握模式分布中抽样按DINA的概率公式生成作答矩阵。这一步的关键是“已知答案”——真实的属性模式、真实的s和g都握在手里后面估计出来的结果可以和真值直接对比。第二步跑参数估计并检查收敛。用MCMC或EM对模拟数据做估计记录sj、gj和属性模式的估计值。MCMC场景下要看迹图和Gelman-Rubin诊断值一般建议多个链并行确保不同起点收敛到同一区域。具体操作上可以设两条链、每链迭代一定次数如2000次预热加5000次抽样观察参数的后验均值是否稳定。检查项工具/手段通过标准参数收敛迹图 后验分布迹图无明显漂移多链结果一致项目参数恢复估计值 vs 真值偏差小于0.05属性模式判准率预测 vs 真值判准率高于0.8第三步计算判准率。把估计出的属性模式与真实模式逐一比对算出属性模式判准率也就是“完全判对的被试占比”。这个指标是DINA模型诊断效用的核心度量。如果模拟数据下判准率都上不去直接拿去分析真实数据只会更糟。文献里对判准率的经验要求是80%以上达不到就要回到Q矩阵或样本量去排查。我第一次上手DINA模型时就是被“参数超过0.4”这类问题卡了好几天最后发现根源不是算法而是Q矩阵少了一个属性。从那以后我每次拿到新数据都强制走一遍这个模拟验证流程先在已知真值的数据上跑通程序再碰真实测验数据。希望帮到你。本文还有配套的精品资源点击获取