GDINA程序包将认知诊断领域中大部分方面的研究都包含在内,它是集合了二值/多值计分模型的参数估计、二分/多分属性测验的参数估计、单策略/多策略模型的参数估计、模型拟合、模型比较、Q矩阵修订、DIF检验、数据模拟等功能的强大工具包,我们将在后文对它的主要功能进行详细操作说明。
在安装GDINA程序包之前,先要安装R以及Rstudio(为了使界面更加友好)。安装完毕后,打开Rstudio,在界面右侧的Package页面下点击install,随后会出现如图 3.2 的弹窗,在install from中选择Repository(CRAN),然后在Packages一栏中输入“GDINA”,勾选install dependencies选项,最后点击install进行安装。(图3.2)
图3.2 GDINA程序包安装示意科
完成之后,在控制台(Console)框中运行语句library(GDINA)来检验是否安装成功,当出现类似如下的输出时,表示GDINA程序包安装成功。
该实证数据来自GDINA程序包中自带的英语能力认证考试ECPE数据,包含2922人在28道题目上的作答数据,考查了3个属性:构词规则(Morphosyntactic rules)、衔接规则(Cohesive rules)、词汇规则(Lexical rules)。作答矩阵和Q矩阵可分别由 和 来进行调用。
尽管上述ECPE数据可使用现成命令进行调用,但考虑使用者更多的情况是输入自己研究的Q矩阵及数据,因此,我们将展示从外部导入的方式。在收集整理好被试作答数据之后,需要将作答数据和Q矩阵输入Rstudio中。首先,需要使用setwd()函数将Rstudio的工作区设置到作答数据data.txt文件和Q矩阵Q.txt文件所在的文件夹。在资源管理器中查看这两个文件,图3.3为data.txt文件,每一行为同一个被试在不同题目的得分情况,每一列为不同被试在同一题目的得分情况。图3.3为Q.txt文件,每一行为同一个被试在3个属性的掌握情况,每一列为不同被试在同一个属性的掌握情况。
图3.3 作答数据data.txt文件
图3.4 Q矩阵Q.txt文件
使用read.table()函数录入数据,具体操作及输出如下:
GDINA(dat,Q,model,…)函数是GDINA程序包的主要功能,其作用是用于模型参数估计。前两个参数,分别是作答数据和Q矩阵,而第三个参数是所选用的认知诊断模型,在默认情况下估计模型为饱和模型GDINA。当使用其他缩减模型时要特别写明,例如当选用DINA模型估计时,需要写明model=“DINA”,具体代码如下:
在Console栏里输入fit1和fit2,可以查看两个模型估计的结果信息。模型参数估计结果信息如下:
使用者可以在其中查看被试数量、题目数量、使用的模型、迭代的次数(Number of iterations)、估计使用时长等基本信息。
Templin和Bradshaw(2014)指出,ECPE测验考查的三个属性可能存在线性结构,即A3属性是A2属性的先决条件,A2属性是A1属性的先决条件。在这种情况下,我们需要在GDINA()函数中添加属性结构参数att.str来将结构信息输入估计模型中,具体的代码如下:
使用summary(object)函数可以输出测验的部分统计参数,用fit1和fit2作为输入,具体输出如下:
其中,AIC和BIC为评判模型拟合优良性的相对拟合指标,通常,数值越小越好。No. of Parameters是参数估计的数量,相较饱和模型GDINA,其他的缩减模型的参数估计的数量会更少。Attribute Prevalence是属性流行率,以fit1 为例,属性A1 和Level1 对应的值为 0.3810,指在该数据结构中任意抽取一个人,其掌握属性A1 的概率是 0.3810,或者是该数据结构中所有人掌握A1的比率是0.3810。
coef(object,what=“…”,…)函数是用于调取题目参数的函数,使用what可以调取特定的参数,主要包括:“LCprob”是所有知识状态下的作答成功概率P(X ij = 1|α lj ),“itemprob”是该题目所能区分出的知识状态下的作答成功概率 ,“gs”是题目的猜测与失误参数,“delta”是模型中的delta参数。在指定以上参数的同时,设定withSE=TRUE可以显示其估计的标准误。以fit1为例,输入与输出如下:
如果只需要调取某一个或几个题目的itemprob参数和delta参数,可以使用下框中的代码。
调取指定题目的参数
此外,还可以使用plot()函数以图的形式呈现题目成功作答概率,可以从Rstudio右侧的Plots栏中查看图。用图像呈现题目成功作答概率如下:
对比fit1和fit2在题目1的正确作答概率图,可以发现由于fit1是由GDINA模型估计得到的结果,因此四种知识状态下答对题目1的概率均不同,而fit2是由DINA模型估计得到的结果,因此在[00]、[10]和[01]这三种知识状态下答对题目 1 的概率是相同的。上述结果是由GDINA和DINA模型的差异产生的:GDINA是饱和模型,估计得到的参数要多于缩减的DINA模型,参见公式3.1和公式3.2。
personparm(object,what=“…”)函数的功能是调用参数估计中的被试参数,其中包括被试的知识状态和对应的属性掌握边际概率等。知识状态可以由EAP(后验期望估计)、MAP(最大后验估计)、MLE(最大似然估计)三种估计方式得到,分别使用what对应“EAP”“MAP”“MLE”来调取它们,如果直接使用personparm(object)则默认使用EAP方法。此外,还可以用what对应“mp”来调取被试属性掌握的边际概率(marginal probability)。
被试水平的参数
由结果可知,三种估计方法估计得到的被试知识状态有些许区别。例如,用EAP估计第327号被试的知识状态为[011],而使用MAP和MLE估计得到的知识状态为[001]。再如,用EAP和MAP估计第328号被试的知识状态为[011],而使用MLE估计得到的知识状态为[001]。因此,在实际估计时,需要注明所使用的方法。
使用MAP和MLE估计时,同一被试可能存在多种可能的知识状态,查看multimodes列,如果显示FALSE则说明该被试仅有一种可能知识状态,而如果显示TRUE则说明存在多种可能知识状态。
被试属性掌握的边际概率是指用EAP估计得到的被试在某个属性下的掌握概率,例如,第一行第一列的0.9967数值表示1号被试掌握属性A1的概率为0.9967。当这个概率值大于某个切分点(通常取 0.5)时,可以判断该被试掌握了该属性,用 1表示,小于切分点则判断该被试未掌握该属性,用0表示。最终可以得到被试的知识状态。
使用plot函数可以输出多名被试的属性掌握概率的直方图。用图像呈现被试的属性掌握概率如下:
该表展示了多名被试的属性掌握概率,横坐标为不同的属性,纵坐标为掌握的概率值,值标签表示第几号被试。
extract(object,what=“…”)函数可以调取被试知识状态的参数、题目的区分度以及属性的流行度等参数。使用what指定“att.prior”可以调取各个知识状态的先验权重,“posterior.prob”可以调取各个知识状态的后验权重,“discrim”可以调取题目的区分度,计算公式为D=1-g j -s j ,此处的g j 和s j 分别代表题目j的猜测和失误参数(详见Templin et al.,2010),程序中输出的D值即为P (1) -P (0) ,“prevalence”可以调取各个属性的流行度。使用extract函数调取部分参数:
使用monocheck(object)可以检查题目是否符合单调性,即当被试每多掌握一个题目所考查的属性会导致该题目的作答成功概率提高,即符合单调性,否则就违反了单调性。使用indlogPost(object)可以调取被试在每个知识状态下的对数后验概率,若想要得到被试在每个知识状态下的后验概率,需要用exp(indlogPost(object))进行转换得到。单调性检验和后验概率调取操作如下:
在单调性检验中,当题目对应为FALSE时,表示该题目符合单调性,而为TRUE时,表示不符合单调性。当需要严格要求所有题目都符合单调性时,在模型参数估计时可增加一个强制单调性参数来加以控制。这样,所有题目均会符合单调性要求。操作如下:
使用itemfit(object)函数可以得到测验在题目水平的拟合信息,再使用summary()函数可以调取三个项目水平的拟合统计量(Chen,et al.,2013;可参考 5.3 部分):基于题目的正确作答比例的z分数z.prop、基于题目对的对数发生比的z分数z.logOR、基于题目对的相关系数的z分数z.r,以及三个统计量的p值和矫正p值。具体操作如下:
通常,主要以最大对数发生比z分数的矫正p值adj.pvalue.max[z.logOR]和最大相关系数z分数的矫正p值adj.pvalue.max[z.r]作为评价题目拟合的参考依据(Chen,et al.,2013)。以前6道题目为例,题目 1、2、3、5的两个矫正p值都大于 0.05,说明这四道题有较好的模型拟合度,而 4、6题的两个矫正p值小于0.05,说明这两道题的模型拟合度欠佳。
Qval(object,eps=…)函数的作用是基于ς 2 法修订Q矩阵,使用时要求object为GDINA模型估计得到的结果,使用其他模型不会反馈修订结果。eps的值是为了确定方差所占比(the proportion of variance accounted for,PVAF)的割点,不加设定时,默认值为0.95。在实际使用时0.95和0.9都可以使用。具体操作如下:
这里需要指出的是,根据PVAF方法修订的q向量是数据驱动式的。除了该方法之外,还可以通过查看题目的Mesa图,并且结合实际题目的内容进行评定后才能确定是否修改。下框呈现了题目3和题目13的Mesa图。
上框中实心点表示原始的题项q向量,PVAF法以第一个大于eps值的q向量为建议的q向量。对于第 3 题,显然 100 是第一个大于 0.9 的向量,所以建议选择修改。但在第 13 题中原始的q向量与 0.9 很接近,在这个时候通常不做修改(这是与ς 2 法的区别)。
若要修改Q矩阵,我们可以使用Q[,]=c()代码。
由于修改了Q矩阵,所以需要重新使用GDINA()函数来进行模型参数估计。
anova()函数可以用于嵌套模型之间的似然比检验(所有模型都与参与比较的模型中参数估计数量最多的那一个进行检验),来比较多个模型对同一批数据的拟合程度。以GDINA、DINA和RRUM的比较为例,在似然比检验中,后两个模型都与GDINA进行比较,因为DINA和RRUM都嵌套于GDINA模型中(DINA和RRUM参数数量少于GDINA)。具体的操作过程如下:
在运行anova()函数后,会输出一个统计表,其中需要着重注意几个参数:par(参数估计的总数)、AIC(赤池信息量准则)、BIC(贝叶斯信息量准则)、p-value(似然比检验的p值)。首先,查看p值结果,fit2一行的p值小于 0.001,说明fit2(DINA模型)与fit1(GDINA模型)对这批数据的拟合质量存在显著差异。此时,需进一步比较AIC和BIC指标,选择AIC和BIC值较小的那一个模型。在本例中,GDINA模型的AIC和BIC均小于DINA的值,因此,与DINA模型相比,GDINA模型对这批数据的拟合更好。再看fit3一行的p值大于0.05,说明fit3(RRUM)与fit1(GDINA模型)对这批数据的拟合不存在显著差异。在这种情况下,选择参数估计数量par较小的一个模型,因为参数数量越少,表示模型越简洁。此处fit3参数估计数量小于fit1,所以选择fit3,也就是RRUM模型。
在实际情况中,同一个模型不一定对整个测验的每一道题目都有最好的拟合效果,此时,可以对每道题目都采用最合适的模型来进行拟合。使用modelcomp()函数可以通过Wald检验找到每个题目拟合最好的模型,这样得到的“模型集合”对整体测验数据的拟合效果更佳,且通常优于单个模型的拟合效果。
此处最优模型的选择规则是:在检验中p值大于0.05的简约模型中选择p值最大的模型,若简约模型p值均小于 0.05,则选择GDINA模型。需要注意的是,仅当题目考查的属性大于等于两个时,才会进行模型比较,若题目只考查一个属性,则直接选择GDINA模型。在找到最适合每道题的模型后,可用下框中的代码将模型信息替换为上方的模型集合,重新进行模型估计,并进行模型比较。
似然比检验中的p值大于0.05,说明fit1(GDINA模型)和fit4(模型集合)的拟合效果之间不存在显著差异,但是fit4 的AIC和BIC指标都小于fit1 的值,且fit4 的参数估计数量小于fit1 的量,因此建议选择fit4得到的结果,即使用modelcomp()函数得到的模型集合对这批数据的拟合相较于GDINA模型更好。
由于题目的质量会影响模型的参数估计结果,因此,可以考虑使用题目的区分度指标对题目的质量进行筛选,根据经典测验理论中区分度的标准(L. Ebel,1985),区分度小于0.2的题目需要进行剔除,在认知诊断理论中,没有明确提出区分度鉴别题目质量优劣的标准,所以此处的操作仅供参考,使用时需要结合实际情况进行判断。例如,若删除该题会影响被试的判准精度,那么建议保留。下面呈现了区分度的调取,以及题目、对应作答数据和模型的删减。
在重新进行模型估计之后,再使用coef()函数、extract()函数、personparm()函数调取所需要的参数结果。此外,还可以使用CA()函数得到模型在整体水平、模式水平和属性水平的分类准确性结果。其计算方法可以参见Iaconangelo (2017)和Wang等人(2015)的研究,操作如下:
分类准确性的取值范围为 0 ~1,值越大说明效度越高。测验水平分类准确性是指针对整个测验的效度指标,结果为0.7477,说明该测验整体的效度良好;模式水平分类准确性是指每一类知识状态分类的效度。可以看出,仅有[000]和[111]两种知识状态的分类准确性较高,而其他的均较低;属性水平分类准确性是指每一个属性的效度。此处,三个属性都有良好的效度。
使用simGDINA(N,Q,gs.parm,delta.parm,catprob.parm,model=“parm”,…)函数可以进行数据的模拟,其中N是被试数量,Q为Q矩阵,gs.parm为题目猜测和失误参数,delta.parm为题目的delta参数,catprob.parm是题目在考查属性对应的所有知识状态下的成功作答概率,model是用于模拟的模型。指定猜测和失误参数情况下的模拟如下:
以第 10 题的delta参数为例,d0 表示GDINA公式(1)中的截距项δ j0 ,d1、d2、d3 表示公式中的主效应项δ j1 、δ j2 和δ j3 ,d12、d13、d23表示公式中的一阶交互项δ j12 、δ j13 和δ j23 ,d123则表示公式中的二阶交互项δ j123 。
按照给定的每种知识状态下正确作答题目的概率进行模拟的示例如下:
指定delta参数情况下的模拟示例:
GUI界面是为无编程语言学习经验的使用者设计的一个简洁的可视化平台,用户仅需要在对话框中输入startGDINA()便可调出如图 3.5所示的浏览器窗口,上传被试作答数据文件和Q矩阵文件便可以进行认知诊断分析。
图3.5 GDINA程序包中的GUI界面示例
首先在Import response matrix和Import Q-matrix 两个窗口中上传被试作答数据和测验Q矩阵。若文件里的数据有“标题”,则在Header选项中打钩;若没有,则不需勾选。在separator选项中选择数据分割的方式,例如制表键Tab、逗号Comma、分号Semicolon、空格Space。此处两个文件的数据分割的方式为空格,所以在Space处勾选,具体文件格式可以参考图3.3和图3.4,操作如图3.6所示。
图3.6
随后点击页面左侧的Estimation Settings,在Measurement models窗口中设置模型参数估计的各种要求,如图3.7所示。在select a single CDM for all items选项中选择估计所有题目所用的模型,此处使用了GDINA模型,如果需要对每个题目选择不同的模型,则选择To be specified,并在下方输入每个题目对应的模型,用逗号隔开。在下方可以勾选Monotonic Constraints选项,表示在估计中要求所有题目符合单调性。
图3.7 模型设置界面
在Other settings窗口中可以在joint attribute distribution里选择联合属性分布的模型。例如,默认使用饱和模型,其余还有三个高阶IRT模型等。勾选【Q-matrix validation】可以输出矫正Q矩阵结果。勾选【Item-level model selection】可以进行题目水平的模型比较,如图3.8所示。点击页面中间的【Click to estimate】开始模型参数估计。
图3.8 其他设置窗口
点击页面左侧的选项,可以查看不同部分的估计结果,如图3.9所示。
图3.9 参数估计结果选项列表
图3.10和图3.11是模型参数估计的部分结果,具体解释可参考前文。
图3.10 模型估计摘要汇总
图3.11 相对/绝对拟合结果