Categories
日常应用

七天搞定SAS(七):常用统计模型

本系列连载文章:

其实最后一天,反而是任务最繁重的。这一天,需要纵览SAS的各个常用的统计模块。BTW,在用惯了ggplot2之后,再也不认为有任何理由用其他软件画图了...所以SAS的图形模块自动被我无视(貌似很多SAS用户也一直在吐槽这东西着实不好使)。

SAS里面的概要统计:PROC MEANS

其实前几天也说过了PROC MEANS,不过这里稍稍补充一点置信区间的东西吧。其实它的参数真的挺多的:

    • CLM:双侧置信区间
    • CSS:调整平方和
    • CV:变异系数
    • KURTOSIS:峰度
    • LCLM :单侧置信区间——左侧
    • MAX:最大值
    • MEAN:均值
    • MIN:最小值
    • MODE:众数
    • N :非缺失值个数
    • NMISS:缺失值个数
    • MEDIAN(P50):中位数
    • RANGE:范围
    • SKEWNESS:偏度
    • STDDEV:标准差
    • STDERR:均值的标准误
    • SUM:求和
    • SUMWGT:加权求和
    • UCLM:单侧置信区间:右侧
    • USS:未修正的平方和
    • VAR:方差

ode variance

  • PROBT:t统计量对应的p值
  • T:t统计量
  • Q3 (P75):75%分位数,etc.
  • P10:10%分位数,etc.

在调用CLM的时候需要指定ALPHA:

DATA booklengths;
INFILE 'c:\MyRawData\Picbooks.dat';
INPUT NumberOfPages @@;
RUN;
*Produce summary statistics;
PROC MEANS DATA=booklengths N MEAN MEDIAN CLM ALPHA=.10;
TITLE 'Summary of Picture Book Lengths';
RUN;

结果如下:

2013-12-09 15_46_26-The Little SAS Book(Fourth).PDF - Adobe Reader

SAS里面的相关性分析:PROC CORR

虽然correlation一直被各种批判,但是往往在拿到数据的第一步、毫无idea的时候,correlation还是值得一看的参考指标。SAS里面的PROC CORR提供了相应的功能。

PROC CORR DATA = class;
VAR Television Exercise;
WITH Score;
TITLE ’Correlations for Test Scores’;
TITLE2 ’With Hours of Television and Exercise’;
RUN;

SAS的相关性分析结果输出如下:

2013-12-09 15_47_04-The Little SAS Book(Fourth).PDF - Adobe Reader

SAS里面的基本回归分析:PROC REG

类似于R中的lm(),这个实在是没什么好说的了,最基本的最小二乘法。

DATA hits;
INFILE 'c:\MyRawData\Baseball.dat';
INPUT Height Distance @@;
RUN;
* Perform regression analysis;
PROC REG DATA = hits;
MODEL Distance = Height;
TITLE 'Results of Regression Analysis';
RUN;

SAS的输出结果如下:2013-12-09 15_47_46-The Little SAS Book(Fourth).PDF - Adobe Reader

 

包含了回归模型的基本统计量。我们一般更关注的回归系数:

2013-12-09 15_49_16-The Little SAS Book(Fourth).PDF - Adobe Reader

到这里,我的感慨就是:真的很像Stata呀!值得注意的是,REG有很多可选的参数,对于这些参数是干嘛用的,最权威的自然还是SAS官方的文档:http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_reg_sect007.htm。其实熟悉了SAS的语法和工作模式之后,具体到某个模型还是看官方文档比较舒服。不愧是商业软件啊,文档写的都很专业,有很多模型选择问题其实看看文档就能多少明白一些了。

比如PROC REG的参数就有:

Table 73.1 PROC REG Statement Options
Option Description
Data Set Options
DATA= names a data set to use for the regression
OUTEST= outputs a data set that contains parameter estimates and other
model fit summary statistics
OUTSSCP= outputs a data set that contains sums of squares and crossproducts
COVOUT outputs the covariance matrix for parameter estimates to the
OUTEST= data set
EDF outputs the number of regressors, the error degrees of freedom,
and the model to the OUTEST= data set
OUTSEB outputs standard errors of the parameter estimates to the
OUTEST= data set
OUTSTB outputs standardized parameter estimates to the OUTEST= data
set. Use only with the RIDGE= or PCOMIT= option.
OUTVIF outputs the variance inflation factors to the OUTEST= data set.
Use only with the RIDGE= or PCOMIT= option.
PCOMIT= performs incomplete principal component analysis and outputs
estimates to the OUTEST= data set
PRESS outputs the PRESS statistic to the OUTEST= data set
RIDGE= performs ridge regression analysis and outputs estimates to the
OUTEST= data set
RSQUARE same effect as the EDF option
TABLEOUT outputs standard errors, confidence limits, and associated test
statistics of the parameter estimates to the OUTEST= data set
ODS Graphics Options
PLOTS= produces ODS graphical displays
Traditional Graphics Options
ANNOTATE= specifies an annotation data set
GOUT= specifies the graphics catalog in which graphics output is saved
Display Options
CORR displays correlation matrix for variables listed in MODEL and
VAR statements
SIMPLE displays simple statistics for each variable listed in MODEL and
VAR statements
USCCP displays uncorrected sums of squares and crossproducts matrix
ALL displays all statistics (CORR, SIMPLE, and USSCP)
NOPRINT suppresses output
LINEPRINTER creates plots requested as line printer plot
Other Options
ALPHA= sets significance value for confidence and prediction intervals and tests
SINGULAR= sets criterion for checking for singularity

SAS里面的基本方差分析:PROC ANOVA

方差分析也就不赘述了,其实我感觉没有回归分析更用的普遍...这俩东西某种程度上也是一回事儿,看怎么理解了。

PROC ANOVA DATA = basket;
CLASS Team;
MODEL Height = Team;
MEANS Team / SCHEFFE;
TITLE ”Girls’ Heights on Basketball Teams”;
RUN;

SAS的输出如下:

2013-12-09 15_50_40-The Little SAS Book(Fourth).PDF - Adobe Reader

先是用作分类的变量的基本统计。然后是模型的基本统计:

2013-12-09 15_50_34-The Little SAS Book(Fourth).PDF - Adobe Reader

最后是各个组的分析结果(两两比较,由于指定了SCHEFFE参数):

2013-12-09 15_51_16-The Little SAS Book(Fourth).PDF - Adobe Reader

SAS中的离散被解释变量模型:PROC LOGISTIC和PROC GENMOD

最简单的离散被解释变量模型就是logit了,在SAS里面有直接的PROC LOGISTIC。官方文档在此:http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#logistic_toc.htm

语法自然是一如既往的简单:

proc logistic;
model y=x1 x2;
run;

结果返回:

The LOGISTIC Procedure

 

Model Information
Data Set WORK.INGOTS
Response Variable (Events) r
Response Variable (Trials) n
Model binary logit
Optimization Technique Fisher's scoring

Number of Observations Read 19
Number of Observations Used 19
Sum of Frequencies Read 387
Sum of Frequencies Used 387

首先自然是模型的统计信息。然后是数据的统计:

Response Profile
Ordered
Value
Binary Outcome Total
Frequency
1 Event 12
2 Nonevent 375

Model Convergence Status
Convergence criterion (GCONV=1E-8) satisfied

然后是假设检验:

Model Fit Statistics
Criterion Intercept
Only
Intercept
and
Covariates
AIC 108.988 103.222
SC 112.947 119.056
-2 Log L 106.988 95.222

Testing Global Null Hypothesis: BETA=0
Test Chi-Square DF Pr > ChiSq
Likelihood Ratio 11.7663 3 0.0082
Score 16.5417 3 0.0009
Wald 13.4588 3 0.0037

最后是参数估计:

Analysis of Maximum Likelihood Estimates
Parameter DF Estimate Standard
Error
Wald
Chi-Square
Pr > ChiSq
Intercept 1 -5.9901 1.6666 12.9182 0.0003
Heat 1 0.0963 0.0471 4.1895 0.0407
Soak 1 0.2996 0.7551 0.1574 0.6916
Heat*Soak 1 -0.00884 0.0253 0.1219 0.7270

而对于泊松模型,则需要PROC GENMOD。我觉得我一一个列出这些模型已经超出了这篇笔记的范围了...所以干脆就改成简单翻译一下各个PROC的主要模型吧。说过了,学习模型不是主要的目的——模型终究不该通过软件来学...虽然SAS的user guide真的还算是比较好的统计学教材呢。

SAS里面的PROC一览

除了上面说到的PROC,SAS当然还有更多强大的模块。我就顺手一一点开看看这些东西都能做什么...

Categories
读书有感

降维模型若干感悟

前几天集中爆发了一些email,直到最后和Frank兄提起,他说我应该去看一下 Adaptive Lasso,我才终于痛下决心开始看这方面的东西。先说说为啥开始看Lasso。

需求。大数据时代,任务有很多:

  • 理论层面,要有适应大数据的模型。一方面是数据量的增加(表现为个体记录的增长),一方面是数据维度的增加(简单的说就是回归方程右边的变量),让大数据这个任务变得格外艰巨(p.s. 这个不是我总结的,照抄上次ShanghaiR沙龙时候Ming的原话...话说我别的没记住,就这句话深深的印在脑海了,哎~)。
    • 数据量的增加,对应的是大样本理论。这个好玩的有很多,暂且不表。
    • 数据维数的增加,则需要相应的降维模型。你总不能在回归方程右边放入几千个变量,“维数灾难”啊...所以变量选择是个很好玩的话题。
  • 应用层面,一个模型性质再漂亮,你也要能算得出来才行是不是?
    • 首先就是要有个好的算法,比如在「统计学习那些事」中提及的LAR对于Lasso的巨大贡献。
    • 其次,什么分布式计算啊,并行计算啊,都成为热呼呼的实践问题(当然我还是go against那些不管三七二十一、直接软件中调用模型的。任何一个模型的假设和局限性都是应该首先考虑的,要不真不知道预测到哪里去了呢~)。

好吧,好久没用这么多层级了。只是昨天稍稍理了理思路,顺便写在这里,算作「感悟一」。

然后,说到底统计学还是为其他学科服务的(好吧,我是想说数据不是无源之水,总归有自己的背景,总归有在这个背景领域的人希望借助数据来解决的问题)。那么作为一种empirical method,统计模型关心的是什么呢?在被计量经济学熏陶外加祸害了若干年后,发现它本质还是为了经济学研究的一些目的服务的,所以关注的更多是consistency,大家张口闭口就是“变量外生性”...而这多少有些直觉+经验判断的东西。显然,统计模型不仅仅是计量经济学,昨天看「The Elements of Statistical Learning: Data Mining, Inference, and Prediction」,大致的关于统计模型关心的判断标准的「感悟二」总结在这里:

  • consistency:这个还是逃不掉的,一致性在大样本下虽然比小样本的无偏要求来的弱得多(plim毕竟比期望算子好“操作”一些)。其实有一段时间我一直很抵触把计量经济学里面的causality叫做因果关系,学习计量模型的过程基本就是保证估计一致性的推导过程...想说的只是,真正的因果关系不是统计学就可以定义的,还是要回到学科本身。consistency更多包含着“internal validity”的味道,即一个结果可以期望在样本本身内重复实现。个人感觉,从经济学理论与实证研究的角度,这大概是计量经济学能达到的最多的程度了吧。再苛刻的因果真的就是经济理论本身的问题了。
  • accuracy: 统计还有一大任务,做预测。我们都知道OLS有的时候可以很简单的给出一个consistent的估计量,但是仅仅是均值意义上的估计还是不够的,对你还得给出个方差。这个方差就刻画了你的估计值是不是飘来飘去。我们当然希望一个方差比较小的估计量,所以大多数时候OLS是不能满足这样的要求的(顺便复习一下BLUE的那些条件)。
  • implementable: 有的时候我们可以用现有的数据、花费大量的时间,来拟合一个漂亮的模型。但是,模型不是放在那里就可以的,在实际应用中大家更关心的是,模型建立之后对于日后决策的指导作用。可能1000个自变量拟合出来的模型比20个好10%到20%,但是在实际应用中,20个变量显然更实用...同理,有些非线性模型漂亮的一塌糊涂,但是计算复杂度可能远远不是多项式级别的。这个时候,退而求其次也不失为一记良策。说到底,有的时候并不要求最完美的模型,总要在性能和效率之间取得一个平衡。
  • 当然说到prediction,这里更多的就有statistical learning的味道了。回归多少还算是supervised learning,至少脑海里大致有个印象什么是回归方程那一边的y。更多的时候,连y是什么都没有概念,所以就有了基于similarity的模型,比如clustering,比如协同过滤...不过有句话确实说的好(摘抄自「统计学习那些事」):

立新老师曾经有这么一句话:“If a method works well in practice, there must be some theoretical reasons for its success.” 如果一个模型在实践中表现的很好,那么一定有它好的原因。

所以基于上述三点(当然还有可能有更多的考虑),不同的模型对于不同的标准有着不同的达标水平。大家各有所长,用哪个还真得看实际任务的需求了。

「感悟三」,则是statistical learning (统计学习,有点机器学习的味道)的任务,这个是从「The Elements of Statistical Learning: Data Mining, Inference, and Prediction」上照抄的:

  • 预测准确性要高:和上面的accuracy对应。
  • 发现有价值的预测变量:更有可能从归纳法回溯到演绎法,给出更多的insights。

最后的,稍稍偏数学一点。「The Elements of Statistical Learning: Data Mining, Inference, and Prediction」里面第三章讲了很多Shrinkage Methods,关心的是varible selection(生物统计中feature selection)的问题。从大家最耳熟能详的stepwise(逐步回归),到ridge regression(岭回归),再到Lasso(或者把LAR也算进来)。基本说来,ridge和Lasso是在OLS基础上一个很有意思的变化。

  • OLS求解的最优化问题是:
  • ridge regression则是加了一个L2惩罚项,即 ,其中t是一个给定常数参数。
  • Lasso则是把这个L2变成了L1,即

就这么一个简简单单的变化,就有了后面那么多神奇的性质。「感悟四」就是,原来Lasso思想并不是那么复杂啊。

Categories
经济、IT观察与思考

千里之堤,溃于蚁穴

最近连续有人说我“过于认真”了……当然知道这并不是一个贬义词儿,但是这样也意味着某种灵活性的损失吧。本来一个人两个人说我我是不会在意的,或者跟我生活工作没啥交集的我也不会在意的,但是偏偏是几个跟我最近接触比较多、指导我工作也比较多的,所以我就不得不格外留心了。

学经济的时候感觉,如果数学家看到我们的文章,一定会被气死的,太不够严谨了……同样的,刚开始工作的时候看到周围人写的各种report,强烈无语。这个,不仅仅是方法论的问题啊,有时候基本的逻辑都不通啊。后来曾经和若干正在读Ph.D的朋友谈及此事,感觉他们对于各种商业报告的鄙夷确实并不是无不道理的,但是仅限于理解他们的想法,毕竟除了自己手下出来的东西,其他人的东西都是不可控的,而且对所有人都要求一个很高的statistical and analytical sense完美结合,是不现实的……这个时候,才觉得自己做的最有价值的事儿,或许就是在一堆纷繁的数据里面,有一些清晰的分析策略和指标形成吧。好像学了半天经济学,最大的收获就是遇到问题不会完全的不知所措,还是知道怎么可以一层层剥开坚壳看内涵的。

千里之堤,溃于蚁穴啊。多少对于统计模型的乱用、统计结果的错误解读(前几天微博上流传着一句“很多分析师是用直觉强奸数据”),导致了后期决策的偏差。也正是因为自己接触到的都是第一手的数据,清清楚楚的可以从一行行R代码里面知道各种指标是怎么计算出来的,才可以对某些人对于结果的一厢情愿的解读、理直气壮的提出意见吧。有些事情,过分的“完美主义”是不必须的,但是统计结果和指标制定,我觉得认真还是应该是第一原则吧。

至于统计模型……我想说,看过了这么多其妙的算法啊,模型啊,其实觉得很多时候是“殊途同归”和“返璞归真”。有的时候,把握一个方向确实比多么精确的去测度一个指标更重要。在一个实际的business里面,大家关注的并不是学术界的各种指标,更多的是“好用、易用、实用”而已。像我这种有时候“完美癖”发作的,确实感到一种现实过于骨干的痛苦……但是也没有办法。毕竟你关心的,大多数人是不关心的。同样的,很多开发人员、算法设计人员关心的事儿,在我这里看来也不是那么重要……最多能理解他们,但是,亲,真的,很多事情没有你想象的那么重要的。

最后,罗嗦一句,CV毕竟是面子工程啊……亲,别乱写行不行,排版漂亮点行不行?在这个信息浩繁的时代,酒香也怕窖子深啊~