京公网安备 11010802034615号
经营许可证编号:京B2-20210330
SAS逻辑回归之二分类
数据集这里用的是australian,有14个自变量Xi,一个因变量Y,Y值只取0或1。
代码如下:
/*逻辑回归数据集australian(690个观测值,每个含14个属性,目标变量y(0、1))*/
/*导入数据集australian到逻辑库work中*/
proc import out=aus
datafile="\\vmware-host\Shared Folders\桌面\SAS\\data\australian.csv" /*文件路径*/
dbms=csv replace; /*文件类型指定*/
delimiter=',';
getnames=yes; /*是否将第一列作为列名*/
run;
/*查看数据集*/
proc print data=aus;
run;
/**************************** 使用交叉验证法选择最优模型 *****************************************/
/*利用10-折交叉验证法计算测试集上的预测准确率*/
%let k=10; /*定义宏变量-交叉验证的折数k*/
%let rate=%sysevalf((&k-1)/&k); /*给出交叉验证的样本抽样比率(因为宏变量k的本质是文本,不能直接参与运算,要将其视为数字计算要用%evalf or %sysevalf)*/
/*生成交叉验证的10个样例,保存在cv中*/
proc surveyselect data=aus
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=Y;
run;
/*逻辑回归主程序 - 10折交叉验证*/
ods output parameterestimates=paramest /*输出交叉验证的参数估计值*/
association=assoc; /*输出交叉验证的C统计量*/
proc logistic data=cv des; /*des控制以Y=1来建模*/
/* class new_y (param=ref ref='yes'); 若new_y是分类变量,则用class对其参数化处理,这里选择处理方式为ref,以“yes”作为参考水平,以便于后续odds的计算*/
model new_y=X1-X14 / SELECTION=STEPWISE SLE=0.1 SLS=0.1;
by replicate; /*以交叉验证的组别来分组建模*/
output out=out1(where=(new_y=.)) /*只给出测试集的预测结果(即new_y为空的样本)*/
p=y_hat;
run;
ods output close;
data out1;
set out1;
if y_hat>0.5 then pred=_LEVEL_ ; /* PHAT为logistic方程针对每个观察体计算的属于该组别的概率,若PHAT>0.5,则属于该组别(这里level为1),否则,属于另一组别 */
else pred=0; /* 本例为二分类,概率依照level(1)计算,因此另一类为0 */
run;
/*汇总交叉验证的结果*/
/*计算预测准确率(测试集中预测准确的样本占预测总样本的概率)*/
data out2;
set out1;
if Y=pred then d=1; /*d为真实值和预测值的误差,这里设无误差为1,有误差为0*/
else d=0;
run;
proc summary data=out2;
var d;
by replicate;
output out=out3 sum(d)=d1; /*预测正确的个数*/
run;
data out3;
set out3;
acc=d1/_freq_; /*预测准确率*/
keep replicate acc;
run;
/*结果中加入交叉验证的C统计量(度量观测值和预测值之间的一致性,越大越好)*/
data assoc;
set assoc;
where label2="c";
keep replicate cvalue2;
run;
/*合并交叉验证的统计结果*/
data cvresult;
merge assoc(in=ina) out3(in=inb);
keep replicate cvalue2 acc;
run;
proc print data=cvresult;
title'交叉验证组号、c统计量、预测准确率';
run;
title '交叉验证最优模型选择:组号、预测准确率';
ods output SQL_Results=cvparam; /*保存最优模型结果在cvparam数据集中*/
proc sql ;
select replicate,acc from cvresult having acc=max(acc);
quit;
ods output close;
/***************** 以交叉验证的最优结果组进行建模 *************************************/
/*以最优组合从cv的10个样例中拿出最优样例,作为训练集和测试集*/
/*取出最优组号对应的selected=1的行,作为训练集train,其余的作为测试集test*/
proc sql ;
create table train as
select * from cv where replicate in (select replicate from cvparam)
having selected=1;
create table test as
select * from cv where replicate in (select replicate from cvparam)
having selected=0;
run;
TITLE '--------Logistic Regression - 数据集Neur - 建模方法 STEPWISE ---------------------------';
/* 逻辑回归主程序 - 通过训练集建立logistic模型*/
proc logistic data=train DES /*根据分类值从大到小选择建模组别,此处为yes*/
covout outest=Nout_step /*输出建模参数估计值及变量间的协方差矩阵*/
outmodel=model /*输出建模结果(若想要通过已有的建模结果来预测新数据集,这里可以用inmodel实现)*/
simple; /*输出变量的简单统计量*/
/* class Y (param=ref ref='yes'); 若Y是分类变量,则用class对其参数化处理,这里选择处理方式为ref,以“yes”作为参考水平,以便于后续odds的计算*/
MODEL Y=X1-X14 /*logistic回归模型:反应变量=自变量1 2 3...*/
/ SELECTION=STEPWISE /*选择建模方式 - 逐步排除法*/
SLE=0.1 SLS=0.1 /*变量在模型中的显著程度,默认为0.05*/
details /*输出模型界定的过程,包括自变量的检定和相关系数的值*/
lackfit /*输出HL拟合优度*/
RSQ /*模型解释度R方*/
STB /*输出标准化模型后的参数*/
CL /*参数估计和置信区间*/
itprint /*输出分析每个步骤的统计量*/
corrb /*输出变量的相关矩阵*/
covb /*输出变量的协方差矩阵*/
ctable /*输出不同阈值下的二分类变量的分组情况,类似于ROC曲线上的每个点的值*/
influence /*输出观察体中每个变量统计量,便于找出对分析结果影响力较大的观察体*/
IPLOTS ; /*针对influence的结果画出图形,影响力过高的观察体在图形上都会显得特别突出*/
score data=train outroc=train_roc; /*通过score语句得到训练集上一系列的sensitivity和specificity,画出ROC曲线*/
score data=test
out=test_pred
outroc=test_roc; /*通过score来预测测试集,结果保存在test_pred中,画出ROC曲线*/
OUTPUT out=train_pred /*保存模型预测结果在该数据集中,数据集中包含的列由以下添加的统计量给出*/
P=PHAT lower=LCL upper=UCL /*输出文件中包含每个观察体属于logistic方程预测组别的概率,用PHAT作列名,LCL和UCL为置信上下限的值*/
RESCHI=RESCHI RESDEV=RESDEV /*Pearson残差和偏差残差,找出与模型不太符合的观察体*/
DIFCHISQ=DIFCHISQ DIFDEV=DIFDEV /*检测观察体对对皮尔森卡方适合度和对偏激统计量的影响程度,越大说明与模型越不符*/
/* 还可加入的统计量:C、CBAR、DFBETAS、H、XBETA、STDXBETA */
/ ALPHA=0.1; /*界定P值的信赖度,默认为0.05,对应信赖度为95%,这里为90%*/
run;
quit;
/*
逻辑回归主程序 - 根据logistic模型对测试集进行预测(有需要时可使用独立的logistic过程对新数据进行预测)
proc logistic inmodel=model;
SCORE data=test
outroc=predict_roc;
run;
*/
/* 训练集的预测结果中只给出了预测概率,接下来根据0.5分界将观察体归到具体的类中,加一列“pred”(预测组别)*/
data train_pred;
set train_pred;
if PHAT>0.5 then pred=_LEVEL_ ; /* PHAT为logistic方程针对每个观察体计算的属于该组别的概率,若PHAT>0.5,则属于该组别(这里level为1),否则,属于另一组别 */
else pred=0;
run;
/* 输出混淆矩阵 - 训练集*/
ods output CrossTabFreqs=ct_train; /*保存混淆矩阵表(训练集)*/
ods trace on;
proc freq data=train_pred;
tables Y*pred;
run;
ods trace off;
ods output close;
proc sql;
create table acc1 as
select sum(percent) from ct_train where (Y=pred and Y ^=.);
proc print data=acc1;
title '训练集上的预测准确率';
run;
/* 输出混淆矩阵及准确率等指标 - 测试集*/
ods output CrossTabFreqs=ct_test; /*保存混淆矩阵表(测试集)*/
proc freq data=test_pred;
tables F_Y*I_Y ;
run;
ods output close;
proc sql;
create table acc2 as
select sum(percent) from ct_test where (F_Y=I_Y and F_Y ^='');
proc print data=acc2;
title '测试集上的预测准确率';
run;
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
数据分析师的日常,常始于一堆“毫无章法”的数据点:电商后台导出的零散订单记录、APP埋点收集的无序用户行为日志、传感器实时 ...
2025-11-28在MySQL数据库运维中,“query end”是查询执行生命周期的收尾阶段,理论上耗时极短——主要完成结果集封装、资源释放、事务状态 ...
2025-11-28在CDA(Certified Data Analyst)数据分析师的工具包中,透视分析方法是处理表结构数据的“瑞士军刀”——无需复杂代码,仅通过 ...
2025-11-28在统计分析中,数据的分布形态是决定“用什么方法分析、信什么结果”的底层逻辑——它如同数据的“性格”,直接影响着描述统计的 ...
2025-11-27在电商订单查询、用户信息导出等业务场景中,技术人员常面临一个选择:是一次性查询500条数据,还是分5次每次查询100条?这个问 ...
2025-11-27对数据分析从业者和学生而言,表结构数据是最基础也最核心的分析载体——CRM系统的用户表、门店的销售明细表、仓库的库存表,都 ...
2025-11-27在业务数据可视化中,热力图(Heat Map)是传递“数据密度与分布特征”的核心工具——它通过颜色深浅直观呈现数据值的高低,让“ ...
2025-11-26在企业数字化转型中,业务数据分析师是连接数据与决策的核心纽带。但“数据分析师”并非单一角色,从初级到高级,其职责边界、能 ...
2025-11-26表格结构数据以“行存样本、列储属性”的规范形态,成为CDA数据分析师最核心的工作载体。从零售门店的销售明细表到电商平台的用 ...
2025-11-26在pandas数据处理工作流中,“列标签”(Column Labels)是连接数据与操作的核心桥梁——它不仅是DataFrame数据结构的“索引标识 ...
2025-11-25Anaconda作为数据科学领域的“瑞士军刀”,集成了Python解释器、conda包管理工具及海量科学计算库,是科研人员、开发者的必备工 ...
2025-11-25在CDA(Certified Data Analyst)数据分析师的日常工作中,表格结构数据是最常接触的“数据形态”——从CRM系统导出的用户信息表 ...
2025-11-25在大数据营销从“粗放投放”向“精准运营”转型的过程中,企业常面临“数据维度繁杂,核心影响因素模糊”的困境——动辄上百个用 ...
2025-11-24当流量红利逐渐消退,“精准触达、高效转化、长效留存”成为企业营销的核心命题。大数据技术的突破,让营销从“广撒网”的粗放模 ...
2025-11-24在商业数据分析的全链路中,报告呈现是CDA(Certified Data Analyst)数据分析师传递价值的“最后一公里”,也是最容易被忽视的 ...
2025-11-24在数据可视化实践中,数据系列与数据标签的混淆是导致图表失效的高频问题——将数据标签的样式调整等同于数据系列的维度优化,或 ...
2025-11-21在数据可视化领域,“静态报表无法展现数据的时间变化与维度关联”是长期痛点——当业务人员需要分析“不同年份的区域销售趋势” ...
2025-11-21在企业战略决策的场景中,“PESTEL分析”“波特五力模型”等经典方法常被提及,但很多时候却陷入“定性描述多、数据支撑少”的困 ...
2025-11-21在企业数字化转型过程中,“业务模型”与“数据模型”常被同时提及,却也频繁被混淆——业务团队口中的“用户增长模型”聚焦“如 ...
2025-11-20在游戏行业“高获客成本、低留存率”的痛点下,“提前预测用户流失并精准召回”成为运营核心命题。而用户流失并非突发行为——从 ...
2025-11-20