
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
CDA认证:数据时代的职业通行证 当海通证券的交易大厅里闪烁的屏幕实时跳动着市场数据,当苏州银行的数字金融部连夜部署新的风控 ...
2025-06-24金融行业的大数据变革:五大应用案例深度解析 在数字化浪潮中,金融行业正经历着深刻的变革,大数据技术的广泛应用 ...
2025-06-24Power Query 中实现移动加权平均的详细指南 在数据分析和处理中,移动加权平均是一种非常有用的计算方法,它能够根据不同数据 ...
2025-06-24数据驱动营销革命:解析数据分析在网络营销中的核心作用 在数字经济蓬勃发展的当下,网络营销已成为企业触达消费者 ...
2025-06-23随机森林模型与 OPLS-DA 的优缺点深度剖析 在数据分析与机器学习领域,随机森林模型与 OPLS-DA(正交偏最小二乘法判 ...
2025-06-23CDA 一级:开启数据分析师职业大门的钥匙 在数字化浪潮席卷全球的今天,数据已成为企业发展和决策的核心驱动力,数据分析师 ...
2025-06-23透视表内计算两个字段乘积的实用指南 在数据处理与分析的过程中,透视表凭借其强大的数据汇总和整理能力,成为了众多数据工 ...
2025-06-20CDA 一级考试备考时长全解析,助你高效备考 CDA(Certified Data Analyst)一级认证考试,作为数据分析师领域的重要资格认证, ...
2025-06-20统计学模型:解锁数据背后的规律与奥秘 在数据驱动决策的时代,统计学模型作为挖掘数据价值的核心工具,发挥着至关重要的作 ...
2025-06-20Logic 模型特征与选择应用:构建项目规划与评估的逻辑框架 在项目管理、政策制定以及社会服务等领域,Logic 模型(逻辑模型 ...
2025-06-19SPSS 中的 Mann-Kendall 检验:数据趋势与突变分析的利器 在数据分析的众多方法中,Mann-Kendall(MK)检验凭借其对数据分 ...
2025-06-19CDA 数据分析能力与 AI 的一体化发展关系:重塑数据驱动未来 在数字化浪潮奔涌的当下,数据已然成为企业乃至整个社会发展进 ...
2025-06-19CDA 干货分享:统计学的应用 在数据驱动业务发展的时代浪潮中,统计学作为数据分析的核心基石,发挥着无可替代的关键作用。 ...
2025-06-18CDA 精益业务数据分析:解锁企业增长新密码 在数字化浪潮席卷全球的当下,数据已然成为企业最具价值的资产之一。如何精准地 ...
2025-06-18CDA 培训:开启数据分析师职业大门的钥匙 在大数据时代,数据分析师已成为各行业竞相争夺的关键人才。CDA(Certified Data ...
2025-06-18CDA 人才招聘市场分析:机遇与挑战并存 在数字化浪潮席卷各行业的当下,数据分析能力成为企业发展的核心竞争力之一,持有 C ...
2025-06-17CDA金融大数据案例分析:驱动行业变革的实践与启示 在金融行业加速数字化转型的当下,大数据技术已成为金融机构提升 ...
2025-06-17CDA干货:SPSS交叉列联表分析规范与应用指南 一、交叉列联表的基本概念 交叉列联表(Cross-tabulation)是一种用于展示两个或多 ...
2025-06-17TMT行业内审内控咨询顾问 1-2万 上班地址:朝阳门北大街8号富华大厦A座9层 岗位描述 1、为客户提供高质量的 ...
2025-06-16一文读懂 CDA 数据分析师证书考试全攻略 在数据行业蓬勃发展的今天,CDA 数据分析师证书成为众多从业者和求职者提升竞争力的重要 ...
2025-06-16