SAS中文论坛

标题: 一些对数据进行评分的方法 [打印本页]

作者: slash    时间: 2014-3-9 19:34
标题: 一些对数据进行评分的方法
今天跟大家分享一些SAS中利用模型结果对数据评分的方法,即做预测。主要包括三部分:Score ProcedureScore StatementCode Statement。下面对其一一进行介绍。


为了说明方便,首先准备两个数据集:一个是用来拟合模型的数据;一个是用来做评分的数据。代码如下:


  1. /* 用来拟合模型的数据 */
  2. data A;               
  3. input x y @@;
  4. datalines;
  5. 1  4  2  9  3 20  4 25  5  1  6  5  7 -4  8 12
  6. ;
  7. run;
  8. /* 用来评分的数据 */
  9. %let NumPts = 200;
  10. data ScoreX(keep=x);
  11. min=1; max=8;
  12. do i = 0 to &NumPts-1;
  13.    x = min + i*(max-min)/(&NumPts-1);
  14.    output;
  15. end;
  16. run;
复制代码


The Score Procedure
在SAS/STAT模块中的一些Procedure能将模型预测的参数估计值输出到一个SAS数据集当中。Score Procedure能使用该数据集中的参数估计值来对新的数据评分。在此处将用到PROC REG,通过OUTEST=选项将参数的估计值输出到一个数据集。

  1. proc reg data=A outest=RegOut noprint;
  2.    Y_Pre: model y = x;    /* Y_Pre是这个模型的一个label*/
  3. quit;

  4. proc score data=ScoreX score=RegOut type=parms predict out=Pred;
  5.    var x;
  6. run;
复制代码


部分数据结果:
RegOut(参数估计值数据集):
[attach]35[/attach]

Pred(对新数据ScoreX评分后的结果数据集):
[attach]36[/attach]

注:这里预测变量的名字为Y_Pre,是在PROC REG中对模型设定的label的名字。如果在PROC REG中不设定label,则此处的预测变量名为MODEL1。

The Score Statement
非参数估计的模型是无法输出参数估计值的,所以上面的方法就没用了。但是非参数估计中有一个Score Statement,可以实现同样的功能。此处以PROC TPSPLINE为例进行说明。

  1. proc tpspline data=A;
  2.    model y = (x);
  3.    score data=ScoreX out=Pred2;
  4. run;
复制代码



评分数据集Pred2结果:
[attach]37[/attach]

预测结果的图形:
[attach]38[/attach]

The Store Statement
Store Statement可以将模型相关的东西存储起来(并不是以数据集的形式),PLM Procedure可以使用这些存储起来的信息并对新的数据进行评分。
根据PROC TPSPLINE对原始数据的拟合图,此处使用GLM Procedure对数据进行三次多项式的拟合,利用Store Statement将模型信息存储起来,数据然后用PROC PLM对新数据评分。
[attach]39[/attach]

代码如下:
  1. proc glm data=A;
  2.    model y = x | x | x;   
  3.    store work.ScoreExample;     /* 存储模型信息*/
  4. quit;

  5. proc plm restore=work.ScoreExample;
  6.    score data=ScoreX out=Pred3;  /* 对新数据评分 */
  7. run;
复制代码


预测结果数据集Pred3:
[attach]40[/attach]


至此,这几种对数据评分的方法已介绍完毕。


作者: henryyhl    时间: 2014-3-10 07:37
谢谢分享,学习了。
作者: webgu    时间: 2014-3-10 08:20
连连发力,给力的Slash!
作者: Polaris    时间: 2014-3-10 09:05
支持!!
作者: 青清世界    时间: 2014-3-10 14:45
赞!受教了,谢谢楼主
作者: mono    时间: 2014-4-2 19:29
第一个过程称作对数据的“评分”,令人迷惑。称为”预测值“计算应该更好。这个方法是处理missing values时最简单的一种方法。
作者: slash    时间: 2014-4-7 12:27
mono 发表于 2014-4-2 19:29
第一个过程称作对数据的“评分”,令人迷惑。称为”预测值“计算应该更好。这个方法是处理missing values时 ...

是的,其实就是预测
作者: bxfly    时间: 2014-4-8 11:29
对于小规模数据的预测,一种简单的方法就是把预测的部分和拟合模型的数据放在一起就行了。
作者: slash    时间: 2014-4-8 20:59
bxfly 发表于 2014-4-8 11:29
对于小规模数据的预测,一种简单的方法就是把预测的部分和拟合模型的数据放在一起就行了。 ...

嗯,是的!
作者: gogotiger    时间: 2014-5-31 00:07
if you have char variables, you cannot use proc score/score statement.





欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2