楼主: foocares
5079 15

[书籍介绍] 读书笔记:Ron Cody《SAS Statistics by Example 》 [推广有奖]

  • 0关注
  • 5粉丝

博士生

93%

还不是VIP/贵宾

-

威望
0
论坛币
548 个
通用积分
0
学术水平
28 点
热心指数
26 点
信用等级
24 点
经验
10891 点
帖子
299
精华
0
在线时间
158 小时
注册时间
2017-4-12
最后登录
2018-2-26

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
按:花一周时间陆陆续续啃完了这本书,因为楼主已考完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;

二维码

扫码加我 拉你入群

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

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

关键词:Statistics statistic example Statist Statis 读书笔记

已有 4 人评分论坛币 学术水平 热心指数 收起 理由
客初 + 20 精彩帖子
eijuhz + 1 精彩帖子
lava_mb + 5 + 2 总结的挺好,学习SAS看你一路走来……同道中.
l1i2n3i4n5g + 5 + 2 支持、学习

总评分: 论坛币 + 30  学术水平 + 4  热心指数 + 1   查看全部评分

沙发
foocares 发表于 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,无他为了省资源。

使用道具

藤椅
foocares 发表于 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;

使用道具

板凳
nkunku 发表于 2017-6-6 06:34:43 |只看作者 |坛友微信交流群
期待楼主更新

使用道具

报纸
foocares 发表于 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不要留坑!

使用道具

7
coelicolor 发表于 2017-7-13 10:34:49 |只看作者 |坛友微信交流群
👍一个

使用道具

8
foocares 发表于 2017-7-19 02:12:48 |只看作者 |坛友微信交流群
猪肉冰儿 发表于 2017-7-13 06:35
马克!感谢分享!求LZ不要留坑!
哈哈哈,没想到还有人惦记着。好嘛兄弟,我最近一定捡起来继续,不留坑。
楼主最近主要钻研Tableau去了,所以落下了一些。

岔开一句题外话啊,Tableau比较傻瓜简明,拖拖拽拽就可以直观地跑一下回归拟合,聚类分析乃至还可以做时间序列里的平滑预测,确实是对小白比较友好的一个可视化工具。但这个呢比较适合大头在上面拿着成果做汇报,我等民工还是得回头扎扎实实码程序好了。

使用道具

9
foocares 发表于 2017-7-19 04:01:17 |只看作者 |坛友微信交流群
【第六章】
本章延续推论统计学章节,从单样本t-test拓展到双变量t-test, 针对双样本,又分普通和配对两种情形。先说不相关配对的普通情形:

title "Conducting a Two-Sample T-test";
proc ttest data=example.blood_pressure;
class Gender;
var SBP DBP;
run;

这里class照例是先用来分类,必须是独立于测量对象,且在proc ttest里仅能列出一项。
本例中性别放在class申明中用于分组,来衡量血压的测量值(SBP和DBP)分别针对男女究竟有无不同。

同理可以探究性别与对应收入两组测量数据之间的差异:
title "Conducting a Two-Sample T-test";
proc ttest data=example.income;
class Gender;
var income;
run;

这就是普通的双样本情况了,至于两组测量数据究竟有无显著差异,仍旧由p-value说了算。这里ttest的H0假设是观测没差别。如果足够小(< 0.05),那就推翻原假设,表示基于95%CL男女在该观测项上有别。如果大于0.05,那就无法推翻原假设,表示统计上差别不显著。
接着说配对的情形。
paired t-test通常用来检验对于同一组对象,先后的测量值究竟有无差异。可以想到的应用之一就是广告推广活动前后究竟销售数字有没有显著变化之类,它的语法如下:

title "Demonstrating a Paired T-test";
proc ttest data=reading;
paired After*Before;
run;


注意,在paired V1*V2里,后测的数据V1摆前头,之前的测量值V2放后头(汗,有点拗口)
这样算出来的差别是V1-V2。这个差别究竟统计意义上显著不显著呢,我们看运行结果:
paired ttest
解释一下,这里算出来的mean对应的就是前后的差别值等于9.375,而95%的置信区间观测值从2.03到16.717,那很显然代表无差异的0没落在这个区间里,证明前后观测真的是有差别了,Pr等于0.0194也支持这点(推翻了观测结果相同的原假设 --- 对应人话:支持观测结果显著不同。)
有一条要注意,t-test的假设条件要求残差均匀分布和误差服从正态分布,为了检验这条,可以继续方便地用ods graphics on/off这对开关置于proc ttest首尾,然后看图判定。

关于配对测量,从上头最基本的前后对比V1*V2还可以衍生出各种花式配对,语法举例如下:
语法                                       计算结果
PAIRED A*B;                              A-B
PAIRED A*B C*D;                   A-B and C-D
PAIRED (A B)*(C D);        A-C, A-D, B-C, and B-D
PAIRED (A B)*(C B);             A-C, A-B, and B-C
PAIRED (A1-A2)*(B1-B2); A1-B1, A1-B2, A2-B1, and A2-B2
PAIRED (A1-A2):(B1-B2);       A1-B1 and A2-B2


以上就是第六章的戏肉,如果实际情况比双样本还多咋办?那就是后续章节多样本ANOVA要讨论的范畴了。




使用道具

10
foocares 发表于 2017-7-21 04:42:38 |只看作者 |坛友微信交流群
【第七章】
开始越来越繁杂了哈,随着讨论深入,有时不得不多补几张图。
上回说到,如果观测样本大于两组,再用两两ttest做比对就不大适合了。为了解决这个问题,本章开始讲基于多变量的方差分析(ANOVA),而SAS里用于ANOVA检测的主打途径就是proc glm (属于广义线性模型的一部分)。
由易到难,先从单向的方差分析(One-way ANOVA)开始。
ods graphics on;
title "Running a One-Way ANOVA Using PROC GLM";
proc glm data=store plots = diagnostics;
class Region;
model Electronics_Sales = Region / ss3;
means Region / hovtest;
run;
quit;
ods graphics off;

通常SAS的proc step是不怎么讲究执行顺序的,但到了proc glm里(以及后续的回归模块),语句顺序却必须搞对,一行行来看:
一头一尾用ods graphics开关用于懒人出图,这个讲了这么多章想必大家都已经知道了,而plots diagnostics则提供懒人图缺省额外的图。具体说到glm里面:
class, model, means(以及后续讲到的lsmeans)必须挨个申明调用。
class是为了指定模型中的独立自变量(相当于函数里的X),model语句则用于确立应变量(相当于Y)与自变量的映射, ss3选项是输出第三类方差统计信息。means用于检验自变量在ANOVA分析中的假设,本例里hovtest开关对应的是检验误差的均度。
注意跟通常的proc比,在run之后还多了一行quit,这个是因为proc glm是自驻内存的模块步,如果不打这行它就一直在跑,直到你申明quit或者碰上另一个执行步/数据步才结束。

回到最初,这个例子里用proc glm来做单向的方差分析,目的是想看某个销售数字是否因地区不同而有变化。原假设H0是没变化,即不因地区而异,如果分析结果得到的P值足够小,就可以推翻原假设。如下图所示,P < 0.001, 意味着销售随地区有显著差别。
anova1.png
如前所述,程序里交代要出图,摘其中一个也可看得更清楚,在东西南北四个区域上比较至少西和南的均值差得大了。
anova2.png

我们在图里看得清楚各区域的差异,但上头的单向分析只回答了销售到底是否随地区变化而变的问题,如果要具体到究竟区域之间谁跟谁差多少,那是下面多向方差分析要讨论的:

title "Requesting Multiple Comparison Tests";
proc glm data=store;
class Region;
model Electronics_Sales = Region / ss3;
means Region / snk;
lsmeans Region / pdiff adjust=tukey;
run;
quit;

和之前单向相比,glm用于多向分析时最大的差别体现在选项控制上。这里一个是在means句后声明了要启用Student-Newman-
Keuls (SNK)检验。二个是引入lsmeans(最小二乘法),然后声明用turkey法来做比对(具体到什么是火鸡法,可参看相关统计书籍,就是最基本的同时无差别对所有样本建立观测)。
看图说话:
SNK分组里认为东西差别显著,一个451一个400单独分组为A和B,相比较之下南北区的均值364和345差异不显著,都被分在了C组里。
anova3.png
用火鸡法检验建立了一个比对矩阵,再次提醒,原假设H0是各组差别不显著,而在2和3的比较中P值0.49比其他组的大得多,所以无法推翻原假设。同样证明了代表2和3的南北区差别不显著。
anova4.png

到目前为止本章举例所讲的都是针对一个独立自变量Region的方差分析,那么再多加几个自变量进来呢?比如,销售数字不但可能跟地区相关,也可能跟性别相关,而且考虑到地区与性别分布之间也有关联?
proc glm要做的就是用“|”来添加这样的关联,从model y=x 进阶为 model y = x1|x2;
title "Performing a Two-way Factorial design";
proc glm data=store;
class Region Gender;
model Electronics_Sales = Region | Gender / ss3;
lsmeans Region | Gender;
run;
quit;

注意到class声明里现在自变量有两个了,同理对应到model和lsmeans语句。
model Electronics_Sales = Region | Gender;
注意,这样写在方差分析里要检验的是三个参数,sales跟region的,sales跟gender的,以及sales跟region和gender关联项的(关联在SAS里用region*gender这样的表达式)

如果乐意,你还可以添加更多相关项,比如model Y = X1|X2|X3|X4... ,这种写法与后面要讲的多项回归式的写法类似。
但加的越多,这些自变量之间乱七八糟的关联项也越多,这时可以用参数来控制关联程度,比如:
model Electronics_Sales = Region | Gender | Advertising @2;
这里@2的意思是说放进模型考虑的关联项到二阶就好,有region与gender, 也可以是gender与advertising, 但不会出现把三参数都包进去的三阶关联。想进一步考察各种具体关联下的差异,可以用slice选项,如:
lsmeans X1*X2 /slice = X1;
这么写SAS会给出按X1区分对应的各个关联项里因变量Y的各自分布。

如果新加入的自变量确实有显著贡献(体现在对应的P值上),那么该模型适合描述各组差异。但有时也可能加了也没太多用处,此时可以考虑引入隔绝项:

title "Analyzing a Randomized Block Design";
proc glm data=store;
class Region Gender;
model Book_Sales = Gender Region / ss3;
lsmeans Gender;
run;
quit;

虽然model里仍是多变量,但不再用有关联的“|”,而且lsmeans里只保留了一项gender, 意味着region在这里只用来做控制分类开关,假定了它与gender没有关联,而且也不再考虑销售跟地区的关系,以便让方差检验的结果更集中地考察销售在性别分组里的差异。这么干是为了消除杂项噪音,让销售差异对性别分组更为敏感。如果隔绝项用对了,你会发现GLM输出结果里对应的误差项MSE会变小。

到本章为止,差不多讲述完了推论性统计学的内容,从下章起将跨入预测性统计学的领域,开始讲回归分析了。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 22:48