全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5721 15
2017-06-05
按:花一周时间陆陆续续啃完了这本书,因为楼主已考完base和adv, 最近同时也在看SAS的SBA建模与回归相关内容,感觉这本书里有很多东西能够横向联系得上,那么这里顺带写下来一点点心得,算是个读书笔记吧,与大家分享。由于楼主比较懒同时又比较忙(真是奇怪的状态组合),所以也许要分几天完成所有更新。

首先,喝水不忘挖井人。
https://bbs.pinggu.org/forum.php?mod=viewthread&tid=4174542
如果没有这位兄弟的慷慨,我们将被迫花50论坛币高价去买另一个。

其次,不像入门圣经little SAS book那样偏重于教学,这本书比较适用于已经有一定SAS底子的人,比如它不会淳淳善诱不厌其烦地教你怎么去各种花式读数据和列出字符串各种功能介绍,而是从一个个例子入手,所以风格上很偏实际应用。与考base/adv证的教程上浩如烟海的考点相比,这本书真正涉及的知识点也就那么几个,都直接与统计应用挂钩。尽管可能简单粗暴,有的统计背景知识也不讲究说得多透,但感觉拳拳到肉,里面的例子都可以拿来速成应付工作。

所以这是一本偏实战教学的好工具书。毕竟在楼主看来统计应用无非就是两个基本面:
一个是评估已有的结果,进而从一个小样本管中窥豹类推全貌,例如我这个药有没有效果,对哪类对象有效,在一类人群身上的效果与另一类人群的效果相比有没有显著区别,等等。统计上管这类应用叫Descriptive Statistics和Inferential Statistics,像t-test, ANOVA都属于此类;
第二个是根据已有数据预测未来的走向,即Predictive Statistics(在楼主看来,但凡能够预测未来的手段都是牛逼技能),例如已搜集到用户的消费习惯是这样,而这个人的芝麻信用分是这么多,那么根据这些数据,建立一个模型来预测他下个月的消费额度会有多少,假如给这个用户推荐信用卡或某种那个商品,他大概有多大可能会上钩,相应的盈亏业绩怎么估,等等。这本书里涉及的主要手段就是各种线性和逻辑回归。

本书总共分十四章,前头七章基本在讲上头举的第一类统计应用,即描述性与推论统计学范畴。从第八章开始进入第二类预测性统计学,介绍各种回归模型,中间夹杂也讲了离散变量评估,非参数检验以及随机取样。以下楼主就来逐章点评,为了配合本书简单粗暴的风格,尽量简炼划重点,直接引用书上的例子捡有用的讲,能不废话就不废话。

【第一章】
对于有底子的人来说本章可以快进忽略,基本属于热身简介。可以扫一眼快速复习的是举了读数据时最常用的excel的csv格式,记得用infile配合dsd选项来读。
如果是更复杂点的其他格式,比如读Access,SPSS, Stata之类数据格式,也可以用proc import配合相应的DBMS来解决。

【第二章】
第一个登场的是proc means,用来看平均值等各种统计数据。
基本格式就是proc里用class对应分类,var来指明感兴趣的变量对象。
常用的几个配合参数有clm和maxdec,例子如下:
proc means data=example.Blood_Pressure  clm stderr maxdec=3;
class Drug;
var SBP DBP;
run;

下一个是proc univariate,不但可以显示各类统计项数字,而且还可以在proc里直接做图,最常用的三类是histogram,probplot和qqplot. 后两者常见于用来判断是否正态分布。
例子如下:
title "Demonstrating PROC UNIVARIATE";
proc univariate data=example.Blood_Pressure;
id Subj;
var SBP DBP;
histogram;
probplot / normal(mu=est sigma=est);
run;
这里有一个不错的点,做直方图时可以配合midpoint参数来自定义分布图横轴的范围,比如:
histogram / midpoints=100 to 170 by 5 normal;

最后一个介绍的是proc sgplot, sgplot有着广泛的做图应用,在本章先提到的是hbox。
有用的两个参数:
1)用datalabel图上直接标记:
proc sgplot data=Blood_Pressure_Out;
hbox SBP / datalabel=Subj;
run;
2)用category来分组,比如按药分类把三组hbox画在一张图上:
title "Box Plots of SBP for Each Value of Drug";
proc sgplot data=example.Blood_Pressure;
hbox SBP / category=Drug;
run;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-6-5 14:40:12
【第三章】
前章讲的是统计描述连续型数值变量,本章主旨推进到了对类别型,离散型变量(比如记录性别男或女)的统计描述。
对于这类变量,重要的就是统计出现的次数,因此这里整章的重点是讲proc freq的用法。
proc freq中以tables语句来指定感兴趣的记录对象,类似于proc means里用var语句的方法。

proc freq默认只统计非缺失数据,如果要连缺失记录一并计入统计(对应的百分比就随之变了),那么可以用missing参数,例子如下:
title "Demonstrating the effect of the MISSING Option";
proc freq data=example.Blood_Pressure;
tables Gender Drug / nocum missing;
run;

因为proc freq在输出时有自己的默认按字母排序,想改变的话可以用proc format先自定义格式,然后在proc freq里用上order=formatted的选项来实现(这里等于顺带介绍了proc format的用法),例子如下:
proc format;
value $region 'North' = '1 North'
'East' = '2 East'
'South' = '3 South'
'West' = '4 West';
run;
title "Change the Order in a PROC FREQ Output";
proc freq data=store order=formatted;
tables Gender * Region;
format Region region.;
run;

这上头顺带就带出了二维表的标准用法,记住语法是行在先,列在后。
tables row-variable * column-variable;
比如下面的例子针对性别和地区分别计数,男女两行,地区东南西北作为四列。
title "Demonstrating a Cross-Tabulation Table using PROC FREQ";
proc freq data=store;
tables Gender * Region;
run;

另外第三章中间顺带穿插讲了下用ods进行不同格式的输出(这里例子给出的pdf, 可以换成html等,活用ods其实还有别的妙处,后续会讲到)。sgplot可以做竖筒图(上章介绍了横的hbox,这里来个vbar,领会精神)。例子如下:

ods listing close;
ods pdf file='c:\books\statistics by example\bar.pdf'
style=journal;
title "Generating a Bar Chart – Using PROC SGPLOT";
proc sgplot data=store;
vbar Region;
run;
quit;
ods pdf close;
ods listing;

之所以先关掉缺省的ods listing再开pdf,最后输出完成后关闭pdf通道重开listing,无他为了省资源。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-6-5 15:04:26
【第四章】
本章着重讲述各种散点图的做法,主要就是用proc gplot, proc sgplot以及proc sgscatter三种方法。
由简入繁,一样样来:
proc gplot的语法是y轴变量*x轴变量:
plot y-variable * x-variable;
一个有用的参数是如果还想按第三个变量来分类做散点图的话,格式是
plot y*x =z;
例子如下:
goptions reset=all;
title "Creating a Scatter Plot Using PROC GPLOT";
title2 "Adding Gender Information to the Plot";
symbol1 color=black value=dot;
symbol2 color=black value=square;
proc gplot data=store;
plot Book_Sales * Music_Sales = Gender;
run;
quit;
注意这里symbol语句定义了两组图标,以区别因为Gender分组的各自散点图形状。

同样的活也可以用proc sgplot来干,语法变成了:
scatter x= y=/group = z;
例子如下:
title "Using PROC SGPLOT to Produce a Scatter Plot";
title2 "Adding Gender Information to the Plot";
proc sgplot data=store;
scatter x=Book_Sales y=Music_Sales / group=Gender;
run;
quit;

然后是功能更为强大的proc sgscatter登场:
基本语句跟proc gplot相同,只不过它还可以一页做多图,语法是
plot y-var1*x-var1 y-var2*x-var2 … y-varn*x-varn;

更进一步,proc sgscatter可以用compare语句实现一纵轴对多横轴的散点图,或者反之。非常灵活强大。
例子如下:
一纵三横:
title "Comparing Total Sales to Book, Music, and Electronics Sales";
proc sgscatter data=store;
compare y=Total_Sales x=(Book_Sales Music_Sales Electronics_Sales);
run;

反过来一横三纵,并且按Gender来分类(等于是六组散点图):
title "Switching Axes and Adding a GROUP= Option";
proc sgscatter data=store;
compare x=Total_Sales
y=(Book_Sales Music_Sales Electronics_Sales) /
group=Gender;

run;

最后放出proc sgscatter的终极大杀器 --- 散点3x3矩阵图(这个在多元回归里判断自变量关联时用得着),中间对角格里用直方图分布填补自己散自己的尴尬。
title "Producing a Scatter Plot Matrix";
proc sgscatter data=store;
matrix Book_Sales Music_Sales Electronics_Sales /
diagonal=(histogram);

run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-6-6 06:34:43
期待楼主更新
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-6-6 11:27:22
【第五章】
从本章开始讨论Inferential Statistics的应用, 即推论统计学。不像描述性统计只记录不求甚解,推论统计的特点是由小样本建立观测,进而去推测整体的分布特征会是怎样,在这个以小见大的推证过程中引入了随机概率和置信区间的概念。
先从单变量的ttest起步:
title "Conducting a One-Sample t-test Using PROC TTEST";
proc ttest data=exercise h0=50 sides=2 alpha=.05;
var Age;
run;

跟proc means类似,都是用var语句来指定感兴趣的对象。从这里就要开始根据置信区间的p value来判读运行结果的意义了,这个判读过程将一直延续到所有后续章节。
如附图所示:
ttest_reseult.JPG
我们知道观测到的平均值是51.36, 95%的置信区间在46.7725和55.9475之间,什么意思呢?就是你随机在这组数据里挑一个,有95%的可能它的数值会落在上述区间之内。
然后Pr>|t|=0.5541,远大于95%所对应的0.05阈值。这表明,从统计意义上在95%的置信区间里我们没法拒绝原假设:即观测到的变量平均值与预期值H0 50不会有显著差别。

从现在开始请容忍这种统计上惯用的拗口表述,翻成人话就是变量Age的观测平均值跟50差不离,这点从平均值51.36也可以看得出来。
上头的例子用proc univariate也可以实现,并且如前所述,还可以在proc里直接做图:用probplot和qqplot来看是否符合正态分布。
具体如下:
title "Testing if a Variable is Normally Distributed";
proc univariate data=exercise mu0=50;
var Age;
probplot / normal (mu=est sigma=est);
run;
其实不止正态,别的分布函数也可以验证,例如:
probplot Age / weibull (c=est);

说道做分布图,本章还介绍了一个便利的办法,就是用ODS开关。把前头ttest的例子加上ODS控制如下:
ods graphics on;
title "Demonstrating the Default ODS Graphics for PROC TTEST";
proc ttest data=exercise h0=50 sides=2 alpha=.05;
var Age;
run;
ods graphics off;

ODS Graphics这么一开一关,不用额外再写做图语句,SAS就会自动生成分布和QQplot分布图在输出结果里,比较适合懒人。
/*By turn on ODS graphics, SAS automatically draw Summary and QQplot*/
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-7-13 06:35:48
马克!感谢分享!求LZ不要留坑!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群