摘 要: S-P表是一种简单易用的测试信息分析工具,它不仅能分析被测者的学习状态,而且能从项目反应分析的侧面了解教育者的工作绩效。传统的人工计算方法虽然简单,但过程复杂,不利于推广和应用。本文主要讨论了S-P表算法的MATALB语言实现。
关键词: S-P表 算法实现 MATLAB语言
S-P表分析法是一种分析测试项目、学生团体和个体的有效方法。在教学过程中,如果将其与教学设计、教学评价等理论结合,可起到良好的效果。但目前S-P表的应用情况不尽如人意,究其原因,S-P表需手工计算,尚无开源的软件供教学相关人员使用是重要方面。因此,我就此做相关研究。
一、S-P表简介
(一)S-P表的定义
S-P表是由测试项目的二值得分作排序处理后,具有学生(S)曲线和问题(P)曲线的二维表格。S-P表分析法是利用学生的问题得分表进行教学情况分析的一种信息处理方法,使用这种方法既可评价学生个体的学习状况,又能对班级整体的学习倾向及整个问题的妥当程度作出评价。
表1是10位学生对10个测试项目应答情况的S-P表,其中,实线为S曲线,虚线为P曲线。
(二)S-P表的功能
S-P表可用于对测试项目、教师教学过程、学生团体和个体的分析。具体有以下功能:评价测试项目的应答情况;反映团体和个体的学习状况;可应用于多种类型的测试;有效辅助教学评价。
二、S-P表的算法
对于大量的测试数据,若采用人工方法求解,工作量大,因此我们采用程序来实现。本章节介绍S-P表算法和工具选择。
(一)S-P表的算法
流程图采用“N-S”模式,如图1所示。S-P表算法要解决行排序、列排序等,具体过程如下:
1.开始
2.输入数据A=(aij)m*n,其中,矩阵A表示原始成绩矩阵,m、n分别表示学生和问题数目。
3.根据是否是多值数据决定预处理情况。
If aij=′Y′
F(aij)′进行“1-0”映射
Else
4.行排序
对∑aj的值按高低顺序由上至下排序。
5.列排序
对∑ai的值按高低顺序由左至右排序。
6.参数计算
利用2.1.5中的公式计算相关参数。
7.画S-P曲线
根据2.1.6中,S-P曲线的画法画S-P曲线。
8.输出S-P表
将程序得到的S-P表输出。
9.结束
根据上述讨论可知,处理数据时需要数学运算突出的软件,而MATLAB即是这样一种软件:可方便处理矩阵运算,不需要生成图形化界面,只需要将原始数据以矩阵形式作为程序片段,拷贝至命令窗口即可进行计算。下面对其进行介绍。
(二)工具选择
MATLAB(Matrix Laboratory,矩阵实验室)语言是国际自动控制领域的首选语言,是一种功能非常强大的科学计算软件,因其内置函数多,且在控制系统、仿真设计领域和处理矩阵等数学问题方面尤为突出,而S-P表需要进行大量的矩阵运算,所以最符合我们的要求。
其主要特点有:(1)功能强大,数学功能尤其突出;(2)语言简单,通俗易懂;(3)代码短小,程序高效;(4)计算功能强大;(5)扩充能力强,可开放性强,帮助功能完整。
默认设置情况下,运行MATLAB程序时,显示MATLAB主窗口、命令(Command Window)窗口、历史(Command History)窗口、当前目录(Current Directory)窗口和工作间(Workspace)管理窗口等工作窗口。
三、S-P表的算法实现
依据图1的顺序,现将S-P表程序的关键代码进行分块解释。
(一)实现主观题成绩预处理的程序
clear
initial _score_ array=[
15 7 8 8 7 8
……];
[class_count,problem_count]=size(initial _score_ array)
class_S_P = zeros(class_count,problem_count);
for i=1:class_count
for problem_count=1
if class_mean(i,1)>=15
class_S_P(i,1)=1;
……
end
该程序片段用来实现主观题成绩的预处理功能。Clear的作用是清除存储空间的变量,以免对下面的程序运行产生影响。根据原始数据initial _score_ array,首先获取其行列数,然后构造矩阵class_S_P,其大小与initial _score_ array相同,且其默认各元素为0,用MATLAB中的zeros()函数实现。该段程序以主观题P2(对应试卷中的21题)为例:若某学生该题得分大于等于15即将矩阵中相对应元素设置为1,否则不作处理为0不变。而每次for循环或者if语句结束时用end标志。
(二)实现学生正确率排名和问题正答率排名的程序
以下程序用来构建S-P表
[data_input_row,data_input_col]=size(data_input);
s_p_form=zeros(data_input_row+4,data_input_col+4);
for i=1:data_input_row
s_p_form(i,data_input_col+1)=i;
for i=1:data_input_col
s_p_form(data_input_row+1,i)=i;
s_p_form(1:data_input_row,data_input_col+2)=sum(data_input,2);
s_p_form(data_input_row+2,1:data_input_col)=sum(data_input);
s_p_form(data_input_row+1,data_input_col+1)=sum(sum(data_input));
data_input为经过预处理后的成绩矩阵,同上一程序块相同,第一行的作用仍是获取输入数据的行和列。第二行构建S-P表,S-P表的大小比data_input多四行四列,其中第一行为问题原来的列数,即试题的题号,第二行为每道题答对的数量,第三行为题目的注意系数,第四行为平均答对率;第一列为记录行数,即学生的编号,第二列为每个人答对题的数目,第三列为学生注意系数,第四列为该学生的问题答对率。
以下程序用来实现对每个学生答题数目按从上到下排列
for i=1:data_input_row
for j=i+1:data_input_row
if s_p_form(i,data_input_col + 2)<s_p_form(j,data_input_col + 2)
for i1=1:data_input_col + 2
temp=s_p_form(i,i1);
s_p_form(i,i1)=s_p_form(j,i1);
s_p_form(j,i1)=temp;
对学生和问题实现按照正答率由高至低顺序排列的程序如上所示,基本思想是冒泡排序法,不再赘述。
(三)正确率相同的学生(或问题)的重新排序
for i=1:data_input_row
for j=i:data_input_row
if s_p_form(i,data_input_col + 2)==s_p_form(j,data_input_col + 2)
for k=1:data_input_col
if s_p_form(i,k)==0
S_left_sum=S_left_sum+s_p_form(data_input_row+2,k);
end
if s_p_form(j,k)==0
S_right_sum=S_right_sum+s_p_form(data_input_row+2,k);
if S_left_sum>S_right_sum
for l=1:data_input_col + 2
tem=s_p_form(i,l);
s_p_form(i,l)=s_p_form(j,l);
s_p_form(j,l)=tem;
end
……
对于正确率相同的行,即答对题目数相同的学生,按照“其得分矢量与问题的答对人数矢量之间的协方差大小”,自上而下排序,程序中先求得得分相同学生的得分即问题的答对人数之和,然后通过冒泡排序法实现。对于答对人数相同的问题,按“问题矢量与累计得分矢量之间的协方差大小自左至右排序”。
(四)学生(问题)注意系数的求解
u1=mean(s_p_form(data_input_row+2,1:data_input_col),2);
for i=1:data_input_row
for j=1:data_input_col
if s_p_form(i,j)==1
c1=c1 +s_p_form(data_input_row + 2,j);
end
end
for j=1:s_p_form(i,data_input_col + 2)
c2=c2 + s_p_form(data_input_row + 2,j);
end
if c2-u1*s_p_form(i,data_input_col + 2)==0
s_p_form(i,data_input_col + 3)==0;
else
s_p_form(i,data_input_col+3)=1-(c1-u1*s_p_form(i,data_input_col+2))/(c2-u1*s_p_form(i,data_input_col + 2));
end
end
以上程序中,c1,c2,u1分别代表该同学所对应的S曲线左侧为“0”的人数之和,S曲线右侧为“1”的人数之和,以及问题的平均答对人数,得到相应之和,依据注意系数的公式计算,把所有学生的注意系数放在S-P表多建的四列中的第三列。差异系数及问题注意系数实现原理相同,这里不再详述。
参考文献:
[1]沈霄凤.现代教育信息处理[M].上海:现代教育出版社,2008:258-266.
[2]薛理银.教育信息处理原理[M].北京:北京师范大学出版社,1995.
[3]夏玮,李朝晖,常春藤.控制系统仿真与实例详解[M].北京:人民邮电出版社,2008:11-18.
[4]范云欢.数据挖掘技术在测试信息分析中的应用[D].华东师范大学,2009硕士学位论文.
[5]傅德荣.教育信息处理[M].北京:北京师范大学出版社,2006:152.