SAS—计算K-S值及画图
(2017-06-02 09:50:55)
标签:
sas数据分析师数据分析数据分析师培训 |
近来,时于夜半下雨,也常在梦里被雨扰醒。究其原因,也是因为近来工作无趣,本身也只喜欢写写SAS或Python代码,做模型,可近来却连数据权限都没有,万灰俱灭。雨声轻轻,却也容易愁闷得睡不着。想着要去外包,却因自己的犹豫不决也没有去成。
好了,不说废话了。昨天有人在微信上问KS的计算方式。今天介绍一下KS值吧。
先看一段程序:
data logistic;
datalines;
1 17 1 1
1 44 0 0
1 48 1 0
1 55 0 0
1 75 1 1
0 35 0 1
0 42 1 1
0 57 0 0
0 28 0 1
0 20 0 1
0 38 1 0
0 45 0 1
0 47 1 1
0 52 0 0
0 55 0 1
1 68 1 0
1 18 1 0
1 68 0 0
1 48 1 1
1 17 0 0
1 70 1 1
1 72 1 0
1 35 0 1
1 19 1 0
1 62 1 0
0 39 1 1
0 40 1 1
0 55 0 0
0 68 0 1
0 25 1 0
0 17 0 0
0 45 0 1
0 44 0 1
0 67 0 0
0 55 0 1
1 61 1 0
1 19 1 0
1 69 0 0
1 23 1 1
1 19 0 0
1 72 1 1
1 74 1 0
1 31 0 1
1 16 1 0
1 61 1 0
;
proc logistic data=logistic
model accident(event='1')=age vision
drive/selection=stepwise
sle=0.05 sls=0.05 outroc=roc;
output out= pred
run;
proc npar1way data=pred
run;
以上是一段常规的计算KS值。
首先要了解什么是KS值,K-S值(kolmogorov-smirnov
curve)将总体进行n等分组并按照违约概率降序排列,计算每一等份中违约与正常百分比的累积分布,绘制出两者之间的差值就是K-S曲线。其中K-S曲线中的最大值即为K-S统计量,取值范围在0到1之间。
以下是计算K-S值及画图的宏程序:
%macro KS(data, var, status, data1, Mks,M);
proc sort data=&data;
by &var;
run;
proc sql noprint;
data &data1;
set &data nobs=NN;
by &var;
retain tile 1
Tile_size=ceil(NN/&M);
if &status=1 then totP=totP
&status;
else totN=totN 1;
Pper=totP/&P;
Nper=totN/&N;
if _N_ = Tile*Tile_Size then
keep Tile Pper Nper;
run;
data temp;
run;
Data &data1;
run;
data &data1;
run;
proc sql noprint;
run; quit;
proc datasets library=work nodetails nolist;
run;
quit;
%mend;
%macro PlotKS(data1);
proc gplot data=&data1;
quit;
%mend;