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
事儿关经济 经济、IT观察与思考

社会实验的特殊性(三)

在上一篇[cref %e7%a4%be%e4%bc%9a%e5%ae%9e%e9%aa%8c%e7%9a%84%e7%89%b9%e6%ae%8a%e6%80%a7%ef%bc%88%e4%ba%8c%ef%bc%89]里面回顾了费歇尔的实验设计三原则之后,那么归根结底,我们为什么要做实验?

从一个纯经济学的角度来看,社会实验的目的之一就是在我们面对现有的数据受到各种局限、从而无法完美的回答我们关心的问题的时候(说到底还是各种内生性问题),采取的一种主动出击寻求答案的方式。故而,实验之前我们一般是有一个基本的思路和方向的,然后更多的想去看一下这个东西到底是不是在现实中就是这个样子。从这个角度而言,社会实验是在很明确的我们知道想得到什么信息的方向上去设计的。

说一下从我个人的感觉上的最大的在业界和在学术界的不同,可能就是data上。在学术界,难得会有非常好的data,所以很多的时候我们都是在有限的数据资源的基础上、去力求用最完美的方法估计我们感兴趣的值。数据源有限的原因有些是历史上的,比如我们研究几十年前的事情,自然当时没有电脑等东西可以完善的记录所有的事情;有些是数据本身的性质决定的,比如宏观里面常用的gdp等东西,中国的数据是1978年之后才有的,而且一般都是年度数据,更受限于国民统计汇总的层级汇报,自然会有一些测量偏差;有些是业界有数据,但是没法得到,这里就牵扯到一些隐私等法律权益、或者数据接口API等开放的幅度的问题;还有些是知道数据在哪里、也可以得到,但是成本太高,比如个人层面的数据,除了全民普查外很难有全覆盖的数据,一般只是小规模样本;最后的就是信息并不是直接以数字的方式记录的,比如twitter上面的用户微博记录,因此需要借助文本挖掘等手段进一步深究。

业界主要提供的就是第三类,大量的个人用户的数据,比如淘宝上各种买卖双方交易的数据。现在淘宝的交易量真的是非常大,而且每笔交易都是真实的现金往来的(我们不考虑非法的洗钱状况),其实背后对应的就是一个真实的微观交易的集合。但是这个交易数据怎么用?最简单的,我们可以看价格,对于同质品之间竞争已然白热化的,已然相差无几,那么价格几乎就等同于scanner price,可以用来衡量物价的波动。当然,网络交易有不同于实体交易的地方,比如受限于运输成本和采购的规模效应,肯定会和超市里的价格有所区别。另一方面,网络上的价格信息流动非常充分,越来越接近于理想中的完全竞争市场对于信息的要求,所以多少也让人兴奋。

另外一个有趣的数据可能就是微博,因为其实质上是一种“短平快”的信息传播渠道,会把信息通过简单的几个信息源极快的扩散到整个网络中去(所谓的influencer model)。所以现在很多人炒得很热的微博营销也是背后有着深刻的渊源的。但是同样的,信息传输成本降低的背后就是噪音的增加,因此对于微博的信息分析起来除了文本挖掘技术实现之外,就是怎么去在大量的噪音数据中寻找到有用的信息。从这个角度而言,就是在进行任何文本挖掘或者信息提取之前,是不是有一个主导的思路去明确的知道需要挖掘的信息。业界很多时候不是数据太少了,而是太多了,以至于大家根本不知道这些数据可以怎么用,所以data mining成为了救命稻草,一窝蜂的上去看看能不能挖到金矿。从我的角度看,每一个data mining算法背后必然是有一种主导的思想来支撑的,比如决策树,不过是分类统计最优化路径的感觉,这样的直觉还是蛮强的。所有数据分析的任务无外乎两个字:降维,怎么在一个多维的好烦的数据海中找到自己最感兴趣的数据,可能是几个变量之间的关系,可能是一个综合指标的创建。最简单的,GDP就是对于国民生产消费活动的降维衡量指标,所以他既然降维了自然有损失,能够多么真切的反应经济活动的现实就必然要打个折扣。

经济学里面常用的“降维”的方法就是回归,无论回归在统计学或者其他学科里面被批判的多么体无完肤,但是回归最大的好处在我看来就是最容易融入经济学直觉。在[cref %e5%b0%8f%e7%aa%a5%e2%80%9c%e9%ab%98%e7%bb%b4%e6%95%b0%e6%8d%ae%e9%99%8d%e7%bb%b4%e2%80%9d-2]里面我曾经提到一些最新的高维数据降维的算法,然而算法本身必然是有直觉甚至是(经济)理论来支撑的。当数据挖掘方法被应用在一个经济活动或者经济问题的时候,如果完全脱离了经济直觉和经济思维衍生的分析方法,我觉得未免有点太过于高傲了。有的时候,如果分析思路足够敏锐,那么基于这样思路的各种算法的出来的结果可能是殊途同归。正所谓“万变不离其宗”,这也是我觉得很多data mining的方法应该和经济学、商科的思维更好的融合在一起的缘故。就像挖矿,我们除了要有先进的挖掘机以外,事前的各种勘探和经验思路还是有非常大的价值的,至少可以降低找到金矿位置的成本、尤其是时间成本。这也是我觉得经济学在业界的应用天地断然不仅仅限于和金融相关的那些而已的缘故。

另外,如果“降维”说的广义一点,就是科学的目标。可能不同的人对科学有不同的定义,我除了喜欢一种“概率”角度的定义之外,刚看到一种定义也是蛮受启发的,

The object of science is the discovery of relations.., of which the complex may be deduced from the simple. John Pringle Nichol, 1840

然而,说到底,经济直觉总要来源于实践经验,只要经济学还是定位于“研究人类行为活动的科学”。实践中信息不足的时候,信息是制约的瓶颈,因此我们要借助更多的数学建模工具来力求完美精细的刻画现有的数据构成的轮廓。反之,如果数据是可选择的,那么更多的精力就应该放在如何去“选择”数据上。我认为,实验最大的好处就是数据完全是由实验设计阶段决定的,实验设计的好数据自然会更好的告诉我们所关心的答案。

忘了是哪位大牛在Handbook of Econometrics里面写的了,大意是“与其寻求更好的估计方法,不如寻找更高质量的数据”,言下之意就是在数据可以被“设计”而获得的情况下,我们可以把精力更多的放在实验设计而不是估计模型的选择上。我并不是一个纯粹的reduced form鼓吹者,相反,我是更欣赏structural model后面的经济学思维的。因此,在实验的方法被付诸实践之前,我更希望更多的按照一种经济学model的模式去考量这些问题,去更精巧的让实验告诉我们想知道的答案。除了社会实验的特殊性考量之外,必然的,我们没有任何理由抛弃现有的经济理论、尤其是微观经济理论去完全随意的“检查”几个变量之间的实验上的因果关系。且不论efficiency,社会实验的对象为参与经济活动的人、这一特质决定了我们在设计实验的时候便要充分利用现有对于人类行为的认识成果,更好的一步步设计实验的流程——可能不只是一次实验的流程,更多的是一环扣一环的一个个实验如何按部就班进行下去。一个动态的实验设计会更好的考量实验设计者对于经济学的理解,也是社会实验较之于费歇尔三原则下的自然科学实验、要求更高的方面之一。

Categories
事儿关经济

数据挖掘 vs 计量经济学 (Data Mining vs Econometrics)

先说一下免责声明:我在数据挖掘 (data mining)和计量经济学 (econometrics)两方面涉猎都不算深入。今天斗胆写这么一篇文章主要是最近在看data mining的东西,有一些小小的体会,故记录下来以备后用。

Data mining是最近几天热起来的东西,而由于其中文翻译又可译作“数据挖矿”,所以做data mining的人有的时候也被戏称为“矿工”。Data mining和近十几年的信息化潮流密不可分——若没有计算机在各行各业的大力应用,又怎么可能会有这么大规模的数据用来分析呢?简单的说,data mining有点“透过现象看本质”的味道,在大家还都在“雾里看花”的时候,data mining致力于“拨开云雾见月明”。当然一个最经典的例子就是“啤酒和尿布”,即经过统计发现男士购买尿布的时候也容易购买啤酒,所以把他们两个放在一起可以很有效的提升啤酒的销量。所以从我个人的浅薄理解来看,data mining更多的就是利用计算机高计算性能把大规模数据一一的进行模型匹配,然后按照我们制定的标准来返回最优的模型。

至于econometrics,它又想回答什么问题呢?我虽然一路经济学出身,计量却只是当工具学的,从未研究过怎么开发工具,这里只从应用计量经济学的角度来说说我看过的研究。嗯,我们可以说在计量经济学里面总是在做“回归分析”(regression analysis),即给定一个感兴趣的变量,把其他的可视作影响因子的东西扔到方程右边。从广义矩估计的角度来说,即在一阶距为0的前提下(小样本下无偏)、最小化二阶距为目标(OLS方法,欧几里德空间内的距离按||·||2来算)进行拟合。当然简单的回归一定是有问题的,得出的结果最多能说明两个变量之间的“(线性)相关性” (linear correlation)而无法提供进一步的原因:到底是由X导致了Y,还是有其他的因子同时作用于X和Y从而他们显示出一致的变化趋势。从经济学的角度,我们当然更感兴趣什么东西导致了Y,所以在大样本下从寻找一个consistent估计量的角度出发,我们一般要求X是外生的,要不就需要借助IV等其他方法了。如果所有的方程右边的变量都是外生的,那么我们就可以放心的说这里面有“计量上的因果关系(causality in econometrics,这里定义明确一点要不又要被Yihui兄等统计学出身的批判了)”。所以说到这里,我可以小心翼翼的说,econometrics毕竟是和经济学紧密相关的,所以我们感兴趣的是变量之间的“谁导致了谁”的关系,而寻求这种答案的途径之一就是让足够的数据来说话。从这个角度来说,我更倾向于把计量作为检验 (empirical check) 经济理论的一个工具。至于我们怎么可以保证X的外生性(exogeneity),那就是要具体问题具体分析了。两种主流的观点是要么依据一个经济理论中的structural的模型来进行估计,从而什么是外生的一目了然;要么做(随机)(田野)实验 (randomized field experiment)。我感觉近两年两者结合的趋势越来越多,毕竟做实验的那群人不是什么都不知道就去试一通,他们很多时候也是依照现有的经济理论进行随机化实验设计的。从这个角度来说,实验更是检验理论的一种途径了,先不论它可以在什么程度上回答一个(经济学)理论问题。

那么数据挖掘和计量经济学直接是冲突的、还是互补的、抑或其他呢?简单的一路看过去数据挖掘的介绍,譬如Wiki,大多数时候看到的是从计算机或者统计学出身的人写出来的方法论上的东西,缺少有人直接论及这东西和经济学是怎么结合的。我也只是粗粗的搜了一番,找到的只有一篇简短的文章:Data Mining in Economic Science,by Ad Feelders。先引用一下它开头引用的一段话:

Let neither measurement without theory nor theory without measurement dominate your mind, but rather contemplate a two-way interaction between the two, which will your thought processes stimulate to attain syntheses beyond a rational expectation!

Arnold Zellner

大意就是说“我们不应一味迷信数据不顾理论,但也不宜欢迎没有现实世界数据支撑的理论”。这篇文章不长,感觉作者可能是更偏向宏观经济学(macroeconomics)分析,所以例子都是宏观中经典的譬如体现凯恩斯主义的IS-LM模型。作者的观点是,很多经济理论并没有直接的给出一个特定的模型设定,所以数据挖掘的方法可以用来选择最优的模型(依稀记得某宏观经济学家曾在上世纪90年代就一一试过1700多个线性模型……当然现在看来他的分析难逃内生性问题的争议,不过这大概是我所知道的最早的和数据挖掘思想相近的尝试吧)。后面还提到时间序列分析VAR模型(vector auto-regression),这个我有点不喜欢VAR的思想,所以不再多做评议。

回到那个啤酒尿布的例子,我想到的是,确实,这个统计结果出来之后经济学家可以很容易的解释“为什么”,但是经济学理论却难以告诉我们在某个(微观)实例中到底反映这种理论力量的“是什么和什么”。与我来说,经济学的 explanatory power已经很强大,但是具体到一个可以操作的层面还是需要其他技术来支撑的。如果我们可以通过数据挖掘在找寻可能存在关系的两个变量(此例中啤酒和尿布),那么就可以依据经济学理论进行可能的解释,然后还可以进一步设计随机对照试验,分析试验结果则是计量的用武之地了。

嗯,这大概是我刚刚接触数据挖掘的一点感触,不知道几分正确几分错误,或许若干年后回头看就会觉得有些幼稚了。最后想说的是,从我个人的观点来说,经济理论能告诉大家的更多的是“为什么”,在这个很general的基础上,我们可以进一步尝试的去回答在某个例子中到底“是什么”。最后无论使用线性模型进行回归分析还是其他的模型设定都好,数据挖掘技术可以在这个方面推进工作的进展、帮助我们更好的理解数据和读懂数据、在浩繁的数据海洋中提取最有力的信号,剩下的可能就是经济学进行分析的工作了(当然我是从纯经济学角度出发说这个话的)。从这个角度而言,数据挖掘和计量经济学更是一种相互裨益的感觉,前者更多是一种思想吧~矿工嘛,先挖挖试试看。

[注:我只是从自己的所学出发随便说说,其间必有偏颇之处,还望各位海涵及不吝拍砖!]