【第七章】
开始越来越繁杂了哈,随着讨论深入,有时不得不多补几张图。
上回说到,如果观测样本大于两组,再用两两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, 意味着销售随地区有显著差别。
如前所述,程序里交代要出图,摘其中一个也可看得更清楚,在东西南北四个区域上比较至少西和南的均值差得大了。
我们在图里看得清楚各区域的差异,但上头的单向分析只回答了销售到底是否随地区变化而变的问题,如果要具体到究竟区域之间谁跟谁差多少,那是下面多向方差分析要讨论的:
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组里。
用火鸡法检验建立了一个比对矩阵,再次提醒,原假设H0是各组差别不显著,而在2和3的比较中P值0.49比其他组的大得多,所以无法推翻原假设。同样证明了代表2和3的南北区差别不显著。
到目前为止本章举例所讲的都是针对一个独立自变量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会变小。
到本章为止,差不多讲述完了推论性统计学的内容,从下章起将跨入预测性统计学的领域,开始讲回归分析了。