| Jiangtang's profile技止于此BlogListsNetwork | Help |
blogs community on data analysis, in Chinese
1-Most Important; 4-Least
|
技止于此/*备忘录:数据挖掘、数量金融、SAS*/ //联系我:jiangtanghu<at>gmail<dot>com 5/3/2009 通告我的朋友,这段日子我换了个东家,技术路线有所倚重,这个(所谓)技术博客要停止更新了。这期间如果还有些数据挖掘跟应用统计方面的文章,会发布在“统计之都”(cos)上面: 有网友说SAS爱好者,“或多或少、有意无意”都有光顾过这个博客。我从文科转入软件工程,以SAS起家,涉足数据挖掘与金融计算,更新不定,主题也不够专注,想想是比较惭愧。喜的是通过这些记录,大致能看到自己的用心所在,同时结交得许多志同道合的朋友,很多场合见面,就没有生疏之感。我现在一家药厂做SAS程序员,多跟临床试验打交道,想先沉淀一段日子再说。 说,技术或有转型,生活还是平稳如初。大伙感兴趣的,不妨先去我的生活博客转转: RSS订阅地址是: 想除了技术,我们还一定有许多聊得开的东西。再会。 2/18/2009 分类模型的性能评估——以SAS Logistic回归为例(3): Lift和Gain书接前文。跟ROC类似,Lift(提升)和Gain(增益)也一样能简单地从以前的Confusion Matrix以及Sensitivity、Specificity等信息中推导而来,也有跟一个baseline model的比较,然后也是很容易画出来,很容易解释。以下先修知识,包括所需的数据集: *更多,见 http://cos.name/2009/02/measure-classification-model-performance-lift-gain/ del.icio.us Tags: Lift,Gain,Confusion Matrix,Logistic回归,SAS,Sensitiveity,Specificity,分类模型,数据挖掘,混淆矩阵,Kolmogorov-Smirnov,Lorentz Curve 2/17/2009 fyi: 数据挖掘软件大评比去年年底(2008年11月),德国一家技术咨询公司,mayato,发布了一篇数据挖掘挖掘软件的评估报告,考察了以下12种产品:
传统的数据挖掘套件(Classic suites):
SAS Enterprise Miner 5.3 SPSS Clementine 12 开源数据挖掘软件(Open Source):
RapidMiner 4.2 KNIME 1.3.5 Weka 3.4.13 自动化数据挖掘软件(Self-Acting):
KXEN Analytic Framework 4.04 专门化的数据挖掘软件(Specialized):
Viscovery SOMiner 5.0 prudsys Discovery 5.5 / Basket Analyzer 5.2 Bissantz Delta Master 5.3.6 BI产品内置的数据挖掘软件(BI Vendors):
SAP NetWear 7.0 Data Mining Workbench Oracle 11g Data Mining Microsoft SQL Server 2005 Analysis Services 最近数据挖掘市场呈现出多元化的态势,除了传统的数据挖掘厂商SAS、SPSS的产品外,又有各种专有用途的数据挖掘软件,加上开源软件和BI产商提供的数据挖掘功能,这个市场看着是红红火火,给各种层次的用户提供了灵活的选择空间。mayato这篇报告的题目就叫做
Data
Mining Software 2009: Successful Analyses at Affordable Prices
(November 2008)。
可惜mayato这次的评估不够深入,所用的标准也嫌太过粗糙。在对Enterprise Miner (SAS),
Rapidminer (Rapid-I), Analytic Framework (KXEN), and NetWeaver Data Mining
Workbench (SAP)这四种产品进行了所谓thoroughly的评估后,它的结果是,Analytic Framework
(KXEN)综合排名第一,Enterprise Miner (SAS)紧接其后,然后是SAP NetWeaver Data Mining
Workbench和Rapidminer。
这次KXEN排名第一,我们并不感到吃惊(mayato是KXEN的合作伙伴)。不过,KXEN处理数据的速度的确非常值得称道。KXEN号称自动化数据挖掘软件(Self-Acting),客户定制调优的空间比较小,在默认选项下,其他软件在运行速度上就吃亏不少了。最后提一下,这次评估,KXEN在速度上占优,而SAS在性能上最为突出。
总的来说,这份评估过于简单,只能作为参考。不过它所展现的(以及遗漏的)数据挖掘软件市场,还是让人比较兴奋的(这次评估,当然有非常多的遗漏,如重要的Teradata
Warehouse Miner、IBM的DB2 Intelligence
Miner、Angoss、Unica等)。
1/15/2009 心酸之路——S-Plus(被)并购大事记0. 史前史:S语言(见John
Chambers)
1976-1980,诞生于AT&T的贝尔实验室(Bell Labs)
又,贝尔实验室也是命途多舛。这个时候它还是AT&T门下。后来AT&T遭分拆,朗讯(Lucent)分立出来,接手了贝尔。再后来,阿尔卡特(Alcatel)收购朗讯,贝尔就成了Alcatel-Lucent
Bell Labs,不提。
1. StatSci
1987-1988年,位于西雅图的华盛顿大学的统计学教授,Douglas Martin,创办Statistical
Sciences公司(StatSci),商业版的S软件面世(当时还不叫S-Plus)。
2. MathSoft
1993-1994,StatSci获得S语言的特许许可证(exclusive
license),并和MathSoft公司(创立于1984年)合并,成为其中的一个数据分析部门,Data Analysis Products Division
(DAPD)。
3. Insightful
2001年,Mathsoft把它下属的一个部门,Engineering and Education Products
Division
(EEPD),卖给这个部门经理,自己改名为Insightful,继续从事S-Plus的研发和销售。2002年,Insightful从贝尔实验室买下了S语言的所有权。
附,以后这个Engineering and
Education公司就叫MathSoft了,有一个在工程界很有名的科学计算软件,MathCad。2006年,Mathsoft公司卖给了PTC(Parametric Technology Corporation)。
4. Tibco
2008年,Tibco收购Insightful
太史公曰:S-Plus系出名门,产品做得也不赖,到现在居然潦倒如此,不但几易其主,还有伤主之嫌(但愿S-plus和接手它的公司能够走出历史的怪圈)。在同门,声势比不过R,在商业软件领域,又远远被SAS、SPSS甩开,甚至想跟Stata一样独善其身而不得,噫。 1/14/2009 FYI: 用SAS/Graph做仪表盘(Dashboard)以前提到过,SAS一个员工做了一份给圣诞老人用的dashboard,在YouTube也能找到。最近Support.sas.com公布了一批Dashboard示例,比较有意思,不妨一看: http://support.sas.com/kb/26/134.html 具体的:
1/13/2009 R与SAS之争:一个导读现在R与SAS社区里,最热闹的大概是源于《纽约时报》的一篇文章而引发的R与SAS之争了。 2009年1月7号,《纽约时报》科技版登了一篇注定要引起四方瞩目的文章, Data Analysts Captivated by R's Power(1月6号就有网络版),作者是该报的记者Ashlee Vance。这大概是开源统计软件包R,自1996年诞生以来,第一次出现在公众视野,而且是出现在《纽约时报》这样的主流媒体。这篇文章里有一句,让R社区和SAS社区都颇为兴奋,而且有很多私人博客也积极跟进:
报道中有对SAS公司一位市场总监Anee Milley的采访。Anee Milley的一句回应也注定要引来不少争议(甚至是公关危机):
1月7号中午,就有用户在全球最主要的SAS论坛SAS-L发贴,提醒大家注意这篇报道。目前,这个帖子的跟贴不断,是目前SAS-L中最火的帖子,其中有不少R软件的支持者发言。SAS-L的大多活跃用户都是一些SAS老手,用SAS几十年,在最近的工作中意识到R的好处,所以对SAS与R的融合比较感兴趣。
更多,请见“统计之都”: http://cos.name/2009/01/r-sas/
1/6/2009 SAS金融函数(1):期权定价(new in SAS9.2 Base)以前贴过一份SAS9.1 Base的金融函数(23个。SAS9.1/ETS还有9个),惜乎没有展开来讲。现在SAS9.2 Base新增了一些有意思的金融函数(还有一些调整,比如,SAS9.1/ETS那9个金融函数都整合到SAS9.2 Base中去了),正好可以慢慢道来,从新增的期权定价函数开始(以前这些函数在SAS的风险管理软件Risk Dimension里面)。 SAS9.2 Base新增的这些定价函数(8个)都是计算欧式期权价格的,对看涨(call)期权、看跌期权(put)以及不同的期权类型(股票期权、期货期权、货币期权、交换期权),分别提供了以下四种模型:
SAS9.2期权定价函数一览:
具体用法,见SAS9.2的在线帮助文档,Functions and CALL Routines by Category: Financial: 推荐一个网站,可以比较各种不同的期权定价模型:http://www.montegodata.co.uk/ 下期预告:一个通吃的金融函数,Finance(.) 一个孤零零的金融函数,能够做52种(是52种!)不同的金融计算,前面提到的SAS9.1/ETS那9个金融函数就是被它给硬生生消化掉了,…… 1/1/2009 江山一笼统-新年快乐新年快乐 ( Xin Nian Kuai Le),
Guten
Rutsch ins neue Jahr, Happy New Year,Bonne Année, Nav varsh ki shubh kamnayey, Felice Anno Nuovo, Feliz Año Nuevo, Feliz Ano Novo, 明けましておめでとうございます (Akemashite Omedetô), Gelukkig Nieuwjaar, Szczęśliwego Nowego Roku, Καλή Χρονιά (Kalí Chroniá), Seh Heh Bok Mani Bat Uh Seyo, חג חנוכה שמח (Hag Hanukkah Sameah), Cчастливого Нового Года, 12/31/2008 分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUCROC 上回我们提到,ROC曲线就是不同的阈值下,以下两个变量的组合(如果对Sensitivity和Specificity两个术语没有概念,不妨返回,《分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵》,强烈建议读者对着看): 二话不说,先把它画出来(以下脚本的主体是标红部分,数据集valid_roc,还是出自上面提到的那篇):
上图那条曲线就是ROC曲线,横轴是1-Specificity,纵轴是Sensitivity。以前提到过,随着阈值的减小(更多的客户就会被归为正例),Sensitivity和1-Specificity也相应增加(也即Specificity相应减少),所以ROC呈递增态势(至于ROC曲线凹向原点而非凸向原点,不知道有无直观的解释,不提)。那条45度线是作为参照(baseline model)出现的,就是说,ROC的好坏,乃是跟45度线相比的,怎么讲?更多,见COS: http://cos.name/2008/12/measure-classification-model-performance-roc-auc/ 12/25/2008 分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵跑完分类模型(Logistic回归、决策树、神经网络等),我们经常面对一大堆模型评估的报表和指标,如Confusion Matrix、ROC、Lift、Gini、K-S之类(这个单子可以列很长),往往让很多在业务中需要解释它们的朋友头大:“这个模型的Lift是4,表明模型运作良好。——啊,怎么还要解释ROC,ROC如何如何,表明模型变现良好……”如果不明白这些评估指标的背后的直觉,就很可能陷入这样的机械解释中,不敢多说一句,就怕哪里说错。本文就试图用一个统一的例子(SAS Logistic回归),从实际应用而不是理论研究的角度,对以上提到的各个评估指标逐一点评,并力图表明:
本文从混淆矩阵(Confusion Matrix,或叫分类矩阵(Classification Matrix)开始,它最简单,而且是大多数指标的基础。(这篇小东西先发布在cos.name上,比较长,感兴趣的朋友可以去看看): http://cos.name/2008/12/measure-classification-model-performance-confusion-matrix/ 12/10/2008 英文博客开张开一个英文博客玩玩:
Google Blogger的服务,在我们的泱泱贵国可能偶尔被撞,你可以订阅RSS源:
这个博客的名字叫Incorporate Things of Diverse
Natures,意思大致是我喜欢的“贪多务得,细大不捐”(韩愈《进学解》)。马克思爷爷说,他喜欢的格言是,“人所具有的我都具有”,何止一个“贪”字了得。我可能要以计算机和金融知识混饭吃,但对不少文科领域还是抱着一股持久的兴趣。现只更新了两篇,一是写早上读到的斯蒂文森(写《金银岛》的那位)的句子:
这句是写一个Good Children,上班的公车上读到,面部表情都轻松许多。另一篇转述SAS员工在defects系统里写的俳句(不错,是俳句,“古池塘,青蛙跳,水声响”那种),显示开发人员幽默的一面。
这句你看了可能觉得索然无味。碰到过弹出窗口不work的人,读了就悠悠心会。
决定写英文博客,是有“媚外”的成分在里面,不止是为了练英语。kdnuggets最近有项针对数据挖掘人员为专业沟通的目的上社交网站的调查,使用LinkedIn的最多,其次是AnalyticBridge和facebook,还有几个用Twitter。这些也是我偶尔用的服务。为对外交流的顺畅,整个英文博客就很有必要了。前天在单位,看到一个公司员工玩twitter的list,感触多些。以后这个博客生活味会淡些,用英文写个人生活,这可需要高超的语言功底。先写着,大致跟学术兴趣相关,语言可以生硬些。
经常在几个技术社区逛,呆久了,朋友多了,就有集体的概念,四处相逢,就会说,哎呀,这个圈子真小啊。
12/9/2008 白话统计(4):P-value:一个注脚/*本文发布在cos.name(统计之都)。*/ *************本书给你数理统计的直观**************************** 资料来自美国G.H.维恩堡等著的《数理统计初级教程》(常学将等译,太原:山西人民出版社,1986) 《白话统计(2):中心极限定理》************************************************************************* 郑冰刚提到P值,说P值的定义(着重号是笔者加的,英文是从WikiPedia摘来的):
以下延续白话系列,解释一下,“什么是P值,什么是极端”,算是郑文的一个长长的注脚。 回到上次的硬币试验,那是一次二项试验,每次试验投100次,记下出现正面的次数,比如,如果
如上,正面数和反面数的差异越大,你就越有把握认为硬币不是均匀的(拒绝原假设)。重复一下P值的定义,“P值就是当原假设为真时,比所得到的样本观察结果更极端的结果出现的概率”,把这个定义套入上述硬币试验的场景中,比如你观察到“正面数是10或者90,正反面次数差异是80”:
以前说过,10-90是A博士的接受区域。如果一枚硬币投出的正反面次数,差异大于80,——这真是一个“极端”的情形,连保守的A博士看了都摇摇头,不能接受原假设,只好认为原假设不对,硬币是有偏的。这里的逻辑是:
参考资料: 1. 维恩堡《数理统计初级教程》(常学将等译,太原:山西人民出版社,1986,Statistics: An Intuitive Approach By George H. Weinberg and John Abraham Schumaker) 2. Statistics I: Course Notes, 2008 SAS Institute Inc. Cary, NC, USA 12/3/2008 白话统计(3):决策与风险/*本文发布在cos.name(统计之都)。*/ *************本书给你数理统计的直观**************************** 资料来自美国G.H.维恩堡等著的《数理统计初级教程》(常学将等译,太原:山西人民出版社,1986) 《白话统计(2):中心极限定理》************************************************************************* /*读书笔记,白话统计系列,力图用普通话讲述统计学的基本概念。这里的题目是“决策与风险”,讲的就是两类错误(type I and type II errors)。以下改编至维恩堡《数理统计初级教程》(常学将等译,太原:山西人民出版社,1986),英文名叫Statistics: An Intuitive Approach By George H. Weinberg and John Abraham Schumaker。这书几近绝迹,当回文抄公,以期重见天日。*/ 1、假设与决策:场景
/*当我们难以拒绝原假设时,只能得到结论:原假设也许是真的,现在不能拒绝它。而当我们能够拒绝它时,结论是:它肯定不真。以下的口语表述不如这里明确(和拗口)的,以这里的表述为准。*/ 试验:在平坦的地方,独立地投掷硬币100次,每次投掷的结果都做记录。最后,正反面出现的次数分别是:
提问:根据你所看到的结果,判断一下,你接受还是拒绝”硬币是均匀的“这一假设? -R博士回答:“拒绝这个假设,因为所得到的正面数超过了反面数的允许界限,这表明硬币是有偏的。” 上面的对话应该让大伙体会到了一些假设检验的意思。可以总结一下,对照下面的表格,思路会清晰一些:
A博士(Accept,接受)的法则是,除非试验得到的比率超过90比10,否则就接受硬币是均匀的这一假设。A博士厌恶犯否定均匀硬币的错误(”弃真“,第I类错误),他的法则使得犯这种错误的概率最小。由于均匀的硬币几乎不会出现超过90比10的比率,他很少冒把一个均匀的硬币说成有偏的风险。然而,他付出的代价是,大大降低了试验的检测能力(power,见下),他的法则使得拒绝假设是极端困难的。大量有偏的硬币也不会出现如90对10这样大的差异,因此它们也会被当成均匀的硬币而没有被检测出来。可以说,A博士对接受假设有偏爱,当假设为真时,他很少犯拒绝它的错误;但当假设不真时,他会常犯接受它的错误。 R博士(Reject,拒绝)的法则是,除非比率低于55对45,否则就不能接受硬币是均匀的这一假设,也即,仅当硬币的正反面数差异在一个狭窄的界限之内,她才接受假设。她把试验看成类似9.11时美国进行的安全检查(”宁可错杀三千,不可错过一个“),重要的是检测出有偏的硬币。R博士的法则在接受错误的假设方面所冒的风险极小(”取伪“,第II类错误),代价是增加了把一个均匀硬币判成有偏的风险。可以说,R博士对拒绝假设有偏爱,当假设碰巧不真时,她很少犯接受它的错误;但当假设碰巧为真时,她常犯拒绝它的错误。 2-1、决策与风险(用均匀的硬币做试验,第I类错误) 一次试验,不足以判断两位博士谁的法则是正确的。现在,用一个均匀的硬币(我们知道,两位博士不知道,这里的原假设是硬币是均匀的),把上面提到的投硬币试验,重复100次(每个试验由100次投掷构成),那么,记录下的正面数X,将构成一个二项分布,X~B(n,p),其中,n=100,p=0.5。根据某个中心极限定理,正态分布是二项分布的极限分布,上面的二项分布可以由均值为np=50,方差为np(1-p)=25的正态分布来近似。又因为二项分布只取整数值,在近似它的正态曲线下会出现很多空隙,为了校正这种情况,可以把整数的两头各扩大0.5个单位,以这个区间表示正态曲线下的那个数。 对R博士来说,仅当掷出的正面数多于45,少于55时,她才接受假设。在正态曲线下,这两个端点可以写成45.5和54.5。
标准化,(45.5-50)/5=-0.9,(54.5-50)/5=0.9,根据标准正态表,可知45.5-54.5这个接受区域包括了总面积的63%。也即,投掷均匀硬币所产生的样本中,有63%的样本,其正面数落在接受区域,相应地,其正面数落在R博士提出的否定域的概率为37%。也就是说,当硬币是均匀的时,R博士犯第I类错误的概率为37%。对A博士来说,他的接受区域在10-90之间,他几乎不会犯第I类错误。 2-2、决策与风险(用有偏的硬币做试验,第II类错误,功效) 现在取一个有偏的硬币(我们知道,两位博士不知道,这里的原假设还是硬币是均匀的),即投出正面的概率不等于二分之一(注意,说硬币是有偏的,并不必对p的值作出指定,因为硬币有偏可以有无限多种方式)。为了评价两位博士的法则在拒绝假设方面有多大的成功,我们需要对硬币指定一个偏度,比如是掷出正面的概率是0.6,做上面同样的100次试验(每次试验有100次投掷),近似成一个正态分布,均值np=60,方差是np(1-p)=24。 对A博士来说,他的判定法则是,只要得到的正面数在10到90之间就接受假设。显然,即使一个有偏的硬币所得到的正面数,也位于A博士的接受区域里。即,当硬币出现正面的概率为0.6时,A博士还是经常要接受均匀硬币的假设,他几乎总要犯第II类错误。 对R博士来说,她的判定法则是,仅当所得到的正面数位于45-55之间时,才接受假设。可以算出45.5-54.5的面积占整个正态曲线区域的13%,也就是说,在使用偏度为0.6的硬币做试验时,R博士错误地接受了硬币是均匀的这一假设的概率是13%(第II类错误),相应地,她正确地拒绝均匀硬币假设的概率为87%。 在这里描述的备择假设(在硬币是有偏的,偏度是0.6)下,A博士实际上没有能力检测出原假设(硬币是均匀)的错误,而R博士则有相当大的能力实现(87%).这里1-β=87%也被定义为功效(power),即,当特别的原假设出现时,正确地拒绝原假设的概率。 3、假设检验 以上不厌其烦地强调了犯两类错误之间的tradeoff。在我们的假设检验中,采取的是类似A博士的法则,尽量减少犯第I类错误的概率(尽量不要”弃真“),尽管这将提高犯第II类错误(”取伪“)的机会。这是一个保守的策略,大概是因为犯第I类错误的风险更大,类似于法庭上”无罪推定“的法则:
除非有特别的充分的证据,否则就认为被告无罪。这里,把清白的被告处以极刑(第I类错误)的代价是非常大的,而释放有罪的被告(第II类错误),只是增加了一点司法成本。 /*待续,接下来的主要目的是,用类似的方式,说出P值是什么东西。*/ 11/27/2008 实用SAS编程技巧25招(译注版)这一期的SAS Publishing News(2008-11)有一则SAS资深玩家Kirk Lafler提供的25 Best Practice Coding Techniques for SAS Users。文章和作者简介见这里。看着好玩,一一做些译注,对其中关于SAS软件质量管理和视图方面的建议,注释就详细些: 1. After running a SAS program, immediately review the SAS log for notes, warnings, and error messages. Avoid turning off SAS System options that turn off SAS log notes, messages, and warnings. 运行完SAS代码,立即查看日志文件。 2. Turn on the SOURCE2 SAS System option to display included source code on the log. Best practice coding techniques should mandate inclusion and display of any and all information that is available during a SAS session. 打开SOURCE2的SAS系统选项。这里有个讲究,一般提交SAS代码有两种方式,一是在SAS的编辑器里编写或者打开,然后执行,源代码在不在日志文件出现由系统选项SOURCE决定,SOURCE的默认值是1,二就是用如%include "test.sas"语句提交,这时源代码test.sas是否在日志里出现由系统选项SOURCE2决定,它的默认值是0。打开SOURCE2的SAS系统选项的方法是,打开Tools-Options-System,在Options-log and procedure output control-SAS log下,找到SOURCE2,把它的Value改成1。 3. Considering procedures like PROC SQL and PROC REPORT for code simplification. Because multiple processes can be frequently accomplished in a single procedure step, I/O may be reduced. 为了简化代码,考虑使用proc sql或者proc report。作者是一个SAS畅销书PROC SQL: Beyond the Basics Using SAS的作者。SAS是一个庞大的工具箱,有多种编程方式。选择应该是基于实用主义原则的,哪个好用用哪个。 4. When a DATA step or PROC can do the same job, consider using procedures whenever possible. Procedures are tried-and-proven throughout the world's SAS installations, testing requirements is considerably less. 如果data步和proc步能完成同一个任务,尽量用proc步。SAS内置的proc步是经过研发人员多次测试通过的,一般会比我们写的强健一些。 5. Create user-defined format libraries to store formatted values in one place. User-defined format libraries have the added advantage of making programs easier to maintain since formatted data values are not hard coded. 在同一个地方建库,存放所有自定义的格式化数据。 6. Include RUN statements at the end of each DATA or PROC step (to separate step boundaries) to print benchmark statistics on the SAS log immediately following each step. 在每一个data步和proc步之后加上run语句。 7. Document programs and routines with comments. In addition to the value associated with explaining program logic, comments should provide important information about complex code and logic conditions in a program. This helps to document important program processes as well as minimizes the learning curve associated with program maintenance and enhancement for other users. 养成代码加注释的习惯,尤其是在代码算法方面。 8. Assign descriptive and meaningful variable names. Besides improving the readability of program code, it serves an important element in the form of documentation. 养成良好的变量命名习惯。选用一目了然的名字,而不是如var1、var2。 9. Construct program header information to serve as program documentation for all programs. The following example illustrates the type of information that can be added so others have a useful documented history. 软件项目管理,好像只跟C++、Java有关,其实,在一个大的SAS开发或应用系统里,项目管理的实施同样重要。这里说的是代码归档的事(documentation)。前面第7条说的代码加注属于documentation的尝试之一,program header(文件注释头)是每份源代码的开头,写的对其他程序员或客户看的指导性的注释,我们常见的花盒子注释就是。一个叫A Programming Development Environment for SAS Programs的文档,可以参考这里。 10. Simplify complex code and operations into smaller, more manageable parts. By splitting complex code into two or more programming statements, a program becomes easier to read as well as more maintainable. 把复杂的代码分解成易于管理的小块(blocks)。
11. Specify SAS data set names when invoking
procedures to help improve documentation efforts as well as preventing an
incorrect data set from being processed.
在调用proc步时,指定要引用的数据,用proc print data=a;而不是proc
print;。
12. Utilize macros for redundant code and enable
autocall processing by specifying the MAUTOSOURCE system
option.
用宏(macro)来管理你的代码。打开MAUTOSOURCE系统选项以便自动调用宏(这是默认的)。
13. Create macro libraries to store common macro
routines in one place.
在同一个地方建库,存放所有类似的宏文件。
14. Create permanent libraries containing
information from daily, weekly, monthly, quarterly, and annual runs. The type of
libraries consists of scripts, SAS programs, SAS logs, output lists, and
documentation of instructions for others to follow.
为每天、每周、每月、每季度和每年都要运行的例行代码,分别建立永久性的库,存放相关的信息。
15. Create views based on user input to simplify
and streamline redundant, complex and/or burdensome tasks. Consider creating
views in a central view library to support maintenance and documentation
requirements.
视图是数据库里的概念。简单地说,比如,你用十行SQL代码完成了一次查询,这个查询结果是你老板(客户)感兴趣的。以后你老板想要看这个查询结果,你可以让他每次都写或运行这个十行代码,或者,你把这次查询的结果做成一个虚拟的表——说是虚拟的,因为数据库里并不真正存在这张表,存在的只是这十行SQL脚本;说是表,是因为运行这个脚本时表就会动态生成。这个虚拟的表,就叫做视图。现在你把中堆东西做成了一个视图,你老板想要这个结果,只需要写一句“视图,阿里巴巴”。视图有很多好处,这里是可以简化老板对数据的理解,同时简化他们的操作。
16. Code for unknown data values. This will
prevent unassigned or null data values from falling through logic
conditions.
对未知的数据值,用编码表示,如99999999之类。如果是空值,可能会引起一些预料不到的逻辑错误。
17. Store informats, formats, and labels with the
SAS data sets that use them. Informats, formats, and labels should be stored
with important SAS data sets to minimize processing time. An important reason
for using this technique is that many popular procedures use stored formats and
labels as they produce output, eliminating the need to assign them in each
individual step. This provides added incentives and value for programmers and
users, especially since reporting requirements are usually time
critical.
把数据的描述性部分(descriptor portion)如informats, formats, and
labels跟数据存储在一起。
18. Construct conditions that would render data
unusable and abort (or end) the program. This prevents unwanted or harmful data
from being processed or written to a data set.
写一段条件语句,使得数据不能够被随意改写。(这段我还要好好琢磨一下)
19. Test program code using "complete" test data
particularly if the data set is small or represents a random sample of a large
data set.
测试代码时,使用所有的测试数据,特别是这些测试数据本身很小,或者它们就是总体数据的一个很好的样本。
20. Set OBS=0 to test syntax and compile time
errors without the risk of executing any observations through a DATA or PROC
step.
测试代码的语法错误时,使用obs=0这个选项。
21. Use the PROC SQL VALIDATE clause to test
syntax and compile time errors in PROC SQL code.
PROC SQL时,用VALIDATE这个选项来指示语法错误。
22. Specify the NOREPLACE system option to prevent
permanent SAS data sets from accidentally being overwritten while writing or
testing a program.
为了防止永久逻辑库里的数据文件被改写或者覆盖,使用NOREPLACE这个系统选项。具体做法是把系统选项REPLACE的值改为0。做练习时这个选项要慎用。
23. Take advantage of procedures that summarize
large amounts of data by saving and using the results in order to avoid reading
a large data set again.
为了避免重复读入大型的数据,利用一些proc步,它们可以通过保存一些处理过的结果来概况数据。
24. Add options that are frequently used into the
SAS configuration file. This eliminates the time and keystrokes necessary to
enter them during a SAS session.
在SAS的配置文件里添加一些你常用的选项。SAS的配置文件就是sas root下的那个SASV9.CFG,以SAS
9为例。这里你可以找到更多相关的信息。
25. Add statements that are frequently used into
the SAS autoexec file. This eliminates the time and keystrokes necessary to
enter them during a SAS session.
在SAS的自动运行文件AUTOEXEC.SAS里加入一些个性化的语句。不熟就不要尝试了。
次贷冲击下的统计学反思/*这篇小东西先发布在益辉主持的cos.name(统计之都)上,转回来做个备份。以后有跟统计相关的文章,都先发布到cos.name,然后转回这个博客。上次我那篇《如何学习统计学,或我的学习之路——初学者写给初学者》,也发布在cos。*/
有点标题党的意思了,确切地说,本文只是一个小小的通讯稿。前两天(11月25-26)我参加一个“中国银行风险管理国际峰会2008”,其中SunGard公司的David
M.Rowe博士的主题演讲Lessons from the Subprime Mortgage Crisis(次级按揭危机经验教训),第一条就是Limits
of Statistical
Analysis(统计分析的局限性)。Rowe先生是SunGard公司风险管理部门的高级副总裁,宾大计量经济学与金融学博士,沃顿商学院MBA,以及卡内基梅隆大学的经济学学士。
这次次贷危机,对外部评级机构如Moodys来说是一个丑闻,它们利用各种复杂的统计模型为各种证券评级。Rowe举一个例子,AAA级的债券,定义的年违约风险是0.01%,也就是说,其违约概率是每一万年发生一次,而最优良的次级房贷抵押债券,在外部评级机构的评分中,享有AAA甚至更高的评级。Rowe就问:在这样的评级中,实证研究何在?
Rowe的总结是:
最后,Rowe提到Nassim Nicholas Taleb的黑天鹅理论(Black Swan
Theory),最近似乎很流行。一般认为天鹅是白的,但一旦发现天鹅也有黑的(的确是发现了),就会对人们的视野产生极大的冲击。黑天鹅理论就是讨论这些极少发生的、难以预测的,一旦发生,就会造成很大影响的事件。不知道统计系在读这本书没有。
11/20/2008 如何学习统计学,或我的学习之路——初学者写给初学者可能学习和工作还有兴趣都跟统计沾些边,一些朋友和网友也问我些如何学习统计之类的问题,他们当然一样是非统计出身。结合自己的学习经历,这里一并回答了,也权当一个成长备忘录,所以这里取一个柏拉图“《智者篇》,或论正名,逻辑”式的标题。(这篇文字的pdf版见http://sites.google.com/site/sharedbyhu/,欢迎大伙拍砖) 先说说自己在统计方面的学习经历,相信很多非统计出身的朋友会有共鸣。我本科在北京工商大学念经济学,先后修过三门相关的课:
1.
统计学。其实应该叫做经济统计基础(很老套的学科了),因为除了描述性统计跟统计推断外,这课还包括大量关于经济指数编制等内容。当时我是凭着一只科学计算器完成所有的作业包括考试的,想想是很土。
2.
计量经济学。这是经济系学生的主干课,我们天天跟着老师演算公式。这个比较恐怖,至少截止到期末考试的当天,我还记得二元线性回归的所有推导以及最终恐龙般的公式。这门课用的是授课老师编的教材,不值得推荐。当时为了记住一元跟二元回归的公式,我找到一本好像没多少人提到的书,一个叫白砂堤津耶的日本人写的《通过例题学习计量经济学》(人大出版社,2003)。这本书就是要让人手算各种计量模型,符号系统非常简洁,让要背公式考试的我省心不少。需要提一句的是,这本小书居然还提供了邹氏检验(Chow
Test)的手算示例。
我的第一门计量经济学课程就是这么落伍。现在想想,千般不好也有一个好处,就是让我手推跟手算过基本的线性回归模型,这些东西对我而言不再是黑箱。这门课的最后,老师介绍了一下计量经济学小软件TSP的用法,当时没跟着学下来。据师弟师妹反映,该老师的一位研究生教会老师使用Eviews,以后我们的计量老师就在课堂推广Eviews了,福音啊。
3.
SPSS与统计分析。这是一门选修课。之前为了培养对统计的兴趣,自学过些用Excel分析数据,选修这门SPSS是想让自己的工具箱更为强大。这课学得比较积极,跟老师的关系也挺好。
当时学习SPSS还有一个动力。2003年秋季学期我去北京大学经济研究中心(CCER)旁听计量经济学。比较幸运,教员是美国刘易斯-科拉克州立大学的计量经济学教授黄少敏。他刚好在北大访问,经济系七七级出来的。黄老师在课堂上推荐SPSS,并根据这次授课编了一本小书,叫《计量经济学入门》(北大出版社,2004)。那阵子还买了张文彤的两本SPSS书,大红版的《SPSS
11.0统计分析教程》(基础篇和高级篇,北京希望电子出版社,2002)。张当时是上海一个大学做医学统计的教授,在SPSS学习社区里很有名,现在好久没关注了。
本科时就大致如此了。还跟机械系的同学修过一门Matlab与系统仿真,仿真我不懂,就是图跟着学习一下Matlab,不过玩得不是很熟。SPSS很好上手,让我对数据有了不少信心。要捏着计算器面对一大堆数据,人都要疯的那种。
研究生期间我在北大念软件工程,金融信息工程方向,一样要跟数据打交道的专业。先是一门信用评分模型的课,让我自学起SAS。包括接下来一些数据挖掘应用的课程,我开始用SAS完成所有类似的数据分析工作。一般我们提到学SAS用SAS,说的大多是Base
SAS或者再加上SAS/STAT,都是编程方式。现我在一家做数据挖掘与商务智能软件的公司实习,接触并学习了SAS产品的其他可视化模块,如Enterprise
Guider、Enterprise
Miner、JMP等等。这段时间,统计学的学习,包括多元分析时间序列等,都是通过去数学系旁听和自学。期间也尝试玩过R、S-Plus、Minitab之类,都是图个体验,没有认真学的意思。
回顾我的统计学习之旅,一个明显的特征就是统计软件一路同行。我的感受是,对于一个非统计出身的统计爱好者,不借助统计软件,几乎无法领略统计之妙——你没法通过推导公式研究算法而得到乐趣。跟各种软件打了这么多交道,另一个感触就是,过分依赖工具而忽略统计直觉可能是更为危险的事。这两条平行的观点,就构成了我对以下问题的建议:一个非统计出身的人,如何学习统计?
无论你从什么背景转到应用统计,通常的建议是找一本有趣的入门书,这个我觉得大多数国内引进的国外基础教材都不错,取一本而且只取一本学了就是。人大出版社引进的几本厚厚的统计学教材,给商学院学生准备的,突出的是应用,都是非常好的入门读物。商学院出来的学生,有一个好处,即使他们真的不懂数理统计,也不妨碍他们娴熟地运用统计模型向客户兜售观点,赢得单子。因该说,这是应用统计学教育的成功,尽管在统计学的(有意)误用方面,他们常受指摘。这里我熟一点的是安德森的《商务与经济统计》和林德的《商务与经济统计技术》,也有影印版,都多次重印的经典教材。这方面我走了不少弯路。本科时拿一本学校老师编的书上课,为了考试,还看得特别仔细,每道习题都做。想在想想,当时要是用这等精神攻读安德森或者林德的书,境界就不一样啦。现在也翻他们的书,做参考用,却不是以前苦读的劲头。这处女“读”,要献给谁,真是很重要。这跟读书一样,我没有师出名门,本科在北工商念,不敢说自己比北大本科的差,只想说,如果本科在北大念,我会表现更好。同样,如果你用院编教材,要达到安德森或林德的水平,你要付出更多的努力。幸运的是,在统计学习方面,你可以一开始就把自己的努力建立在一个较高的水平上:读安德森或林德。
去年年底,我翻出一本书来补自己的统计直觉,这部不推荐,是因为这书不好找了,只是个人喜欢,书也薄些,美国G.H.维恩堡等著的《数理统计初级教程》(常学将等译,太原:山西人民出版社,1986)。这本书的扉页,有位前读者题辞(在图书馆的书乱涂乱画啊):“本书给你统计学的直觉。”这书我续借超期再借在续借,已近一年,感受是,这书在培养直觉直观方面,真是下足了功夫。美中不足的是,这个译本没有提到这本书的原名就叫做Statistics:
An Intuitive Approach。
前面我好几处提到“直觉”。统计直觉我没资格发言,以前念经济学,隐隐约约能感觉到economic
intuition这玩意。这东西不好说,却也能表达一二。跟大部分学科一样,经济学看着也能分成两个类型(接下来我还要强调它们不是对立的),一是专业期刊里充满恐龙级数学符号那种,另外就是白话散文那种。分析现实问题(不必是经济问题)时,也就相应两种思路,一是建立数学模型,二就是拿白话解释,偶尔再加一个简单的图表。这两种方式,白话看似容易些,但也容易流于胡说八道,就要为学院人士所不齿。数学的技术活多些,容易出成果,好拿诺贝尔经济学奖。由白话而成巨星的,我们称之为思想家,更是难能可贵,如诺奖得主科斯,主创产权和交易成本理论的。北大出来去芝加哥大学念经济学的王勇讲了一个好故事:
白话加逻辑,不用数学而对问题有洞见,说的大概就是“直觉”吧。当然,数学公式密布的场合,直觉也有用武之地,比如,满满一黑板你证明出了一个复杂的定理,然后你拿白话说明为什么会有这个结果,The
intuition behind this equation is blablabla,那直觉就相当强了。
经济学直觉完毕。关于统计学直觉,我是类似这样理解的。对非统计科班出身的我们来说,这种训练可能更为重要,而且更为迫切。我们对统计学抱着非常实用的态度,无暇也无力关注大多模型定理背后的推导过程,但为了解释和理解,我们需要对它们有一个通盘的印象,其中的细节不是通过数学推导而来,但是能够用白话明确地表达出来。比如中心极限定理,一个简单的形式是独立同分布的中心极限定理,大概说,如果随机变量X1,…Xn,…相互独立,服从同一分布,且具有相同的数学期望和方差,则随机变量之和ΣXi的标准化变量服从标准正态分布,这可以用数学精确地证明出来。我没有掌握这个推导,但我敢说我能理解这个定理,并且能够明确无误地传达出来,用白话,而不是刚才提到的数学语言。我读维恩堡《数理统计初级教程》,里面是这种处理的(下面的文字来自我做的读书笔记,而不必是该书的摘录。很多朋友可能没法看到该书,我在博客里有记):
这就是我喜欢的Intuitive
Approach。这本书行走可读,坐卧可读,借助些简单的符号,适度的图表,统计学的基本模型都可以这样清晰地用白话表达出来。我下功夫学习并鼓吹用白话描述统计学,是去年跟Teradata的一位朋友聊天,他提到向客户陈述数据分析结果时,一定要用大白话明确地说出来。当时我尝试了一下,发现自己对统计学的基本概念,都还停留在数学描述的阶段。惭愧惭愧,那时的还自以为自己颇有些统计的基础呢,从此下决心苦练基本功,目标是对所有基本的统计概念、模型,都要达到能够清楚地向一个高年级高中生描述的程度。从应用的角度来说,这种训练是必须的。一个统计学家,不能指望他的听众都一样统计出身,同样,对大多数需要应用统计工具的非统计学家来说,也不能假设他的客户一样是统计爱好者,专业词汇只在一个很窄的圈子里通用。
上面提到的是对统计理论的直观理解。在运用统计技术时的直觉,需要理论基础和经验,这个我就说不了太多了。猜想,一个对统计技术有良好直觉的人,应该对各种数据的分布很敏感,对各种统计方法的运用和误用都了如指掌,总之言之言而总之,他应该像一个经验丰富的手工艺人,老木匠老雕匠一样。
再说统计工具的选用,先是初学时的工具,然后是工作的工具。初学者的工具,就是比如你第一次学习安德森或林德的基础统计学,需要选用的统计软件。首先不推荐用SAS、SPSS之类大型的商业软件包,他们会把初学者的精力吸引到工具的使用上面而不是统计理论的理解方面。就像初学一门编程语言,比如C++,所有的经典教材都鼓励用文本编辑器(如记事本、Notepad++等)写代码,而不是一上来就是用一些集成开发环境(IDE)如微软的Visual
C++之类。文本编辑器足够简单,能让初学者集中精力关注代码本身而不是IDE的环境设置等扰乱心神的东西。
对初学者来说,电子表格如Excel是一个非常好的选择,足够简单,容易上手,而且还几乎够用。我推荐Excel的另一个理由是,在电子表格里,初学者可以更亲密地接触数据。电子表格里的数据容易编辑,容易犯错,容易修正,容易转换。我甚至鼓励初学者只用加减乘除四则运算,在Excel里手算些基本的如回归模型。手算的好处就是,你会觉得这个模型是你可以“掌”握的,每个结果都是你可以控制的,而不像SAS等软件包运行后就冒出来一大堆像是不请自来的结果。
为了增强对数据的敏感,我鼓励初学者花时间熟悉他有代表性的练习数据。学习统计或者统计软件时,我们面对大量不同的数据,经常是跑完一个数据,看看结果,然后转到另一份数据。这不利于培养对数据的敏感度,前面我提到,对数据的敏感是对统计技术运用有良好直觉的表现之一。讲个极端的例子,在Oracle数据库里,有一个用于测试和练习的公共账户scott,里面有一些数据库表的实例,其中主要两个表,雇员表EMP和部门表DEPT。大概全世界的Oracle程序员都用这两个表练习写SQL语句。他们对这几个表的熟悉程度到了多么夸张的地步呢?Oracle程序员聚会时,一个人提到EMP表里的某个人物,比如Smith,另一个人就可以说出他的职位来(这里Smith的Job是Clerk)。这真正是跟数据同呼吸共命运。
扯远了。还是用程序编辑器的类比,文本编辑器如记事本在初学时够用,但真正做项目时就会显得捉襟见肘了,Windows下的程序员多数还是会选择一些集成开发环境如VC++,这就是统计世界的商业软件包,成熟的是SAS、SPSS和S-Plus,选一款用就是,每款都几乎够用。我现在用SAS,不是说它一定就是最好的,只是说机缘巧合,选择了它,喜欢它,并且不准备更换。选择一个统计包,其实是个很偶然的事,你的老师用什么,你的朋友用什么,你的同事用什么,你大概就会用什么。石头都能刻出花来,无论玩哪一个,都能达到很高的境界。武林高手都有自己得心应手的兵刃,对学者来说,讨论SAS与SPSS孰优孰劣真是没有一点意义,都工具而已。即使不用SAS不用SAS,高手用SQL语句也是能够硬生生鼓捣出一棵决策树出来。
再提一下R,最近在各个统计社区都很流行,这是一款基于命令行的开源统计包。一个讨论就是,用基于命令的软件如R、SAS还是有图形界面的如SPSS。仁者见仁,智者见智,这当然又是一个伪问题,就看个人喜好了。其他的我不是很熟,就拿SAS说事。我们一般认为SAS是要写代码的,那是大多数用户接触Base
SAS和SAS/STAT。SAS系统也有好用的桌面工具,如Enterprise Guider、Enterprise
Miner、JMP等,图形界面都很友好,自己也经常用。工作中,其实我们都会抱着一个很实用的拿来主义态度,哪个适合完成任务,就选用哪个。但初学者静不下来,就会紧着考虑自己到底要选择哪些装备。
一般地,如果你熟悉SAS,一家只购买了SPSS的公司就不会怀疑你是不是会使用SPSS,其他类似。这里我还是强调它们的工具特性。工具会让我们更有自信,一个资质平平而且无意成为武林高手的庄稼汉,只要接受一点军事训练,拿一把刀就可以壮胆,在战场上还可能立功。现在他手头有一把屠龙刀,你就能指望他号令天下吗?一样的道理,你掌握了SAS,只能让你对处理数据更有信心,而且也能让你在工作中达到既定的目标,但这不表明你的统计功底就达到了你期望的水平。很久很久以前,统计先驱们是硬生生地摇手柄或者干脆拿稿纸手算,创立了现在我们使用的大部分基本统计模型。
到现在,总结一下思路,卑之无甚高论,我对初学者的建议是:
10/21/2008 SAS的编程元素(OOP和其他)/*《SAS的编程元素(OOP和其他)》,转自我在quanthr.com的帖子。*/
有朋友提到,quant社区中,SAS与Matlab哪个更为流行。做数学模型,Matlab更好,做统计,SAS占优,在社区里,Matlab当然较SAS流行,但是建模一块,C++通吃,这似乎没有什么疑问,所以埋头学C++是王道。这里我多讲些SAS,个人偏好,它诸多的编程元素也让人爱不释手。
SAS是一个庞大的系统,可以说几乎什么活都能做,除了传统优势(统计、时间序列、数据挖掘、商务智能)外,SAS在编程方面让人称道的还有, --它是一门过程式的语言(循环、分支、数组,……),其中不乏面对对象的特性(详见下) --另外,对C/C++程序员来说,它提供了一个SAS/C Complier --对Java程序员,它有一个基于Eclipse的开发环境SAS AppDev Studio,可以方便地利用SAS的计算引擎开发各种应用, --矩阵运算一块,SAS的矩阵语言IML与Matlab、R等相比也不弱 --字符处理,除了大量的字符函数,SAS也支持Perl正则表达式 --支持标准SQL语句 --支持Hash表 --为XML数据提供了XML引擎 --…… 又,关于SAS系统的OO特性。首先,SAS/AF就是一门完全面对对象的应用开发语言。其他的,在SAS/Base中, --通过Data Step Component Interface,你可以在数据步里建立纯OOP的Java对象 --在DDS中,有一个类似的DDS Data Step Object --最后,在Macro中,一样可以体现出以上提到的各种OO特性,节日快乐。(注:那天是中秋节。) 10/20/2008 信用评分书目
Credit Scoring: Reading List
好久不更新,先整理下手头信用评分方面的书。
1. Credit Risk Scorecards: Developing and Implementing
Intelligent Credit Scoring, by N.Siddiqi, 2005
这书主要讲是信用评分模型开发的流程,技术方面是点到为止,对了解建模的生命周期非常有好处,作者是SAS公司的信用评分专家。研一时MasterCard的冯老师给我们开信用评分课,从学校图书馆(PKU)借出,印了一册,时常翻着。当时据此书写了不少读书笔记,又有把这书翻译过来的念头。
2. Credit Scoring and Its Applications, by L.Thomas, etc, 2002 各种(数据挖掘/机器学习)模型的数学展开,恰到好处,还不至于让人望而却步。有中译本(《信用评分及其应用》,中国金融出版社),原版书在数学系(PKU)的图书室。这书稍嫌旧,经典嘛。
3. Development of Credit Scoring Applications Using SAS Enterprise Miner, by SAS Institute Inc., 2008 信用评分教程,step-by-step,用的是SAS 的数据挖掘工具Enterprise Miner及SAS Credit
Scoring节点。
4. Data Mining Cookbook: Modeling Data for Marketing, Risk and Customer Relationship management, by O. Rud, 2000 这书在国内也比较有名,它提供了Logistic回归建立以及评估信用评分模型的SAS代码,但国内还没见着随书的数据集。有中译本(《数据挖掘实践》,机械工业出版社)。
5. 信用评分模型技术与应用,by陈建,2005 中文书,对了解业务背景有帮助。作者陈建在Fair Isaac做模型。
6. 现代信用卡管理,by陈建,2005 同上,信用卡业务知识。
8/22/2008 数量金融基本书目(Classic Books for Quantitative Finance Available in China)一些有志于数量金融的朋友感叹国内资源不足,花大量时间泡网找电子书。其实这个领域的基本参考书就那么几本,全世界的学者都在用。据我多年泡图书馆和逛书店的经验,不妨给大伙数数国内公开出版的数量金融经典教材,影印版或者中译本,挂一漏万,欢迎随时添加指正(mailto:jiangtanghu(at)gmail(dot)com)。这些书应该都可以从网上书店如china-pub订到,而且单本不会超过一百块。说,材料都容易得到,稀缺的是钻研的耐心。数量金融的基本书目,无非包括三类,金融、数学和编程(C++)。在金融这块,入门多用John Hull的那本所谓华尔街圣经,Options, Futures, and Other Derivatives(《期权、期货和其他衍生品》),现在都出到第七版了(可怜我手头那本6版还没有看完)。清华大学出版社有这本书的影印版(见过5版,不知道有没有更新的),中译本就比较落后,华夏出版社有3版——那就看影印5版喽。Hull还有一本《期货与期权市场导论》 (第5版),北大出版社的中译本(这个本子较新),数学处理上比前面的“圣经”简单,但对了解领域知识一样有用。金融数学这块,最好的书国内都引进了(除了Paul Wilmott on Quantitative Finance,北大图书馆跟国图有藏,最新2版三卷本):Steven Shreve的两卷Stochastic Calculus for Finance,卷一The Binomial Asset Pricing Model和卷二Continuous-Time Models,世界图书出版公司都有影印本,叫做《金融随机分析》。世界图书还有他另外两本名气稍小的影印本子,Methods of Mathematical Finance(《金融数学方法》)和Brownian Motion and Stochastic Calculus(《布朗运动和随机计算》)。都是Springer的精装黄皮本子,比较精致,还便宜。Salih Neftci的几本,武大出版社也有影印本,不过都是平装的本子,纸张看着不舒服,Principles of Financial Engineering(《金融工程原理》),以及An Introduction to the Mathematics of Financial Derivatives(《金融衍生工具数学导论》)。最后一本西南财经大学出版社也有影印本,叫做《金融衍生工具中的数学》。今年西南财经也引进了几本看着不错的书。Baxter和Rennie合著的Financial Calculus: An Introduction to Derivative Pricing (Cambridge) ,图灵图书在人民邮电出版社有影印本和中译本,唤作《金融数学—衍生产品定价引论》。图灵做的书都比较漂亮。最基本的金融数学(随机微积分)参考书,以上已经足够了。其他数学科目,如偏微分、数值分析之类,在数学系的书目里,能选择的就更多了。国内甚至还能找到Paul Glasserman的那本Monte Carlo Methods in Financial Engineering(《金融工程中的蒙特卡罗方法》),高教出版社刚出了一个影印版。最后一组是编程。一些朋友还在犹豫,是用C好呢,还是Java好?或者,Excel VBA、Matlab似乎也不赖,最近C#也好像挺流行,Python也出了个数值计算的库,R也有金融计算的包rMetrics,S-Plus的FinMetrics看着也不错,——都错!如果你不是学有余力精力过剩的话,C++应该是你唯一的选择。C++是数量金融界的标准语言,而且,即使你工作中不用C++,它也会是企业检验你水平的门槛。C++,全世界的程序员和Quant推荐得最多的就是这三本书,而且国内都有最新的影印本和中译本:Lippman的C++ Primer(人民邮电)、Eckel的Thinking in C++(机械工业)和Bjarne Stroustrup的The C++ Programming Language(《C++程序设计语言》,高教)。8/17/2008 SAS/IML,及其与R/S-Plus、SciLab/Matlab的比较(1)SAS的矩阵语言IML(Interactive Matrix Language)只可以处理二维表,数据类型不如R、Matlab等同类矩阵语言丰富,不过它对矩阵的表达和操纵能力一样厉害,而且与SAS程序和数据的相互访问通讯比较好,不妨一学。矩阵语言,看着也类似,下面就做个IML与R/S-Plus、SciLab/Matlab的比较(我手头只有R跟SciLab,以下的例子就用它们,这两个东西我不熟,不妨随时指正。)一句话,SAS/IML在定义矩阵时跟SciLab/Matlab差不多,在提取矩阵元素时跟R/S-Plus相近些:
8/13/2008 在Visual C++ 2008配置QuantLib稍微了解了下quantlib。它是一个开源的C++库,在数量金融社区(quant)里名气最大。 这些日子在学习C++和金融计算的活计,正好有用。今在机器里配置了一个quantlib的环境,配置boost时参考了quantnet论坛的一个帖子(Boost 1.35.0 + Quantlib 0.9.0 with Visual Studio 2008),记录先:
1. 去微软主页下载并安装Microsoft Visual C++ 2008 Express Edition 2-1.去sourceforge下载boost_1_35_0.zip,并解压到C盘。最后,新出现C:\boost_1_35_0 2-2.打开一个Command Prompt(Ctrl+R->cmd),把盘符指向C:\boost_1_35_0\tools\jam\src,运行build.bat,这将产生以下要用的bjam.exe 2-3. 把盘符指向C:\boost_1_35_0,运行以下命令 tools\jam\src\bin.ntx86\bjam.exe --build-type=complete 这将花n多时间。没有计时,我是先忙活其他的事,一个小时后看到运行成功。 2-4.接着运行以下命令: tools\jam\src\bin.ntx86\bjam.exe --build-type=complete install 这又将花掉大概n的一半的时间。成功后,你将看到一个新的文件夹C:\Boost 3.去sourceforge下载QuantLib-0.9.6.zip,并解压到C盘。最后,新出现C:\QuantLib-0.9.6 4-1. 打开Microsoft Visual C++ 2008 Express Edition ->Tools->Options->Projects and Solutions-> VC++ Directories->Show directories for:->Include files,新添一行C:\Boost\include\boost-1_35 同样,在Library files中新添一行C:\Boost\lib 4-2. 打开VC2008->File->Open->Project/Solution,打开C:\QuantLib-0.9.6\QuantLib_vc9.sln,导入QuantLib后,你就将看到, 5-1. 选中上图中的QuantLib,右键选中Set As Startup Project,然后右键选中build,……漫长等待……直到成功。 (注:在build的过程中,老冒出一行警告: The file contains a character that cannot be represented in the current code page (936).Save the file in Unicode format to prevent data loss 大概跟我机器的local有关,后来证明对功能没有影响。) 5-2. 重复以上动作(先Set As Startup Project再build),对其余的项目如BermudanSwaption等做同样的操作, build成功后,可以按Ctrl+F5查看程序运行结果。That's all and have fun! 8/1/2008 Hull书上的一个小例子进来闲些,就想把手头正看着的Hull那册options, futures, and other derivatives (6th ed.)中的模型和例子都拿SAS写一遍。先拿ch4: Interest Rate中的一个小东西练手(p.78 Table 4.1),说复利的计算次数对利息的影响。以下,
以上为适应书上的例子,很多地方写死(hard coding)了。最后的结果跟书上一样,不过以上展示了更多,由各种复利计算次数求出相应的利息,然后从日志文件读出结果再展示:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|