数据集Car(1728个观测值,6个自变量,因变量Car有unacc\acc\good\very good 4个取值。
分两个过程实现,代码如下:
1. PROC LOGISTIC 过程实现:
/*逻辑回归数据集Car(1728个观测值,每个含6个属性,目标变量Car(unacc\acc\good\very good))*/
/*导入数据集australian到逻辑库work中*/
proc import out=ds
datafile="\\vmware-host\Shared Folders\桌面\SAS\\data\\Car.csv" /*文件路径*/
dbms=csv replace; /*文件类型指定*/
delimiter=',';
getnames=yes; /*是否将第一列作为列名*/
run;
/**************************** 使用交叉验证法选择最优模型 *****************************************/
/*利用10-折交叉验证法计算测试集上的预测准确率*/
%let k=10; /*定义宏变量-交叉验证的折数k*/
%let rate=%sysevalf((&k-1)/&k); /*给出交叉验证的样本抽样比率(因为宏变量k的本质是文本,不能直接参与运算,要将其视为数字计算要用%evalf or %sysevalf)*/
/*生成交叉验证的10个样例,保存在cv中*/
proc surveyselect data=ds
out=cv /*生成的样例全部放在数据集cv中*/
seed=158
samprate=&rate /*抽样比率设定,宏变量rate的调用要加&*/
outall /*输出全部数据*/
reps=10; /*指定样本重复的次数*/
run;
/*交叉验证的生成数据集中,selected列为1表示该行为训练集样本,0表示测试集样本,这里为new_y赋值,
若selected=1,则可获得Y的值,若为0,该行的new_y为空。接下来给出new_y为空行的预测值。*/
data cv;
set cv;
if selected then new_y=Car;
run;
/*逻辑回归主程序 - 使用LOGISTIC进行有序多分类logit回归 - 10折交叉验证*/
PROC LOGISTIC data=cv ;
CLASS Buying Maint doors Persons Lug_boot Safety;
MODEL new_y=Buying Maint doors Persons Lug_boot Safety
/ LINK=cumLOGIT /*拟合有序多分类logistic回归模型*/
SELECTION=STEPWISE /*选择建模方式 - 逐步排除法*/
SLE=0.1 SLS=0.1 ; /*拟合有序多分类logistic回归模型*/
by replicate;
score data=cv out=out1(where=(new_y='')) ;
RUN;
/*汇总交叉验证的结果*/
/*计算预测准确率(测试集中预测准确的样本占预测总样本的概率)*/
data o