SAS逻辑回归之多分类

数据集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
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值