有多少人听说过R软件?有多少人用过R软件?你现在最常用的软件是什么?SAS?SPSS?EViews?如果你是一个经常和数据分析打交道的人,或者从事金融建模,数学建模的人员,还不用R,你就有点out了。如果现在不学R,五年后你没有任何优势可言;如果5年后,你还不学R,那你差不多就可以被淘汰了。
接下来,我先介绍一下R软件,然后,会详细的讲解为什么你不用R就会out。
R是有Ross Ihaka跟Robert一起开发的一个面向对象的编程语言。什么是面向对象呢?就像现在,我在这里演讲,直接看见你们,你们就是我面向的对象,当然,这是开玩笑。面向对象的意思就是,R里面的一切东西都是视为对象(Object)。无论是数据框、列表还是函数或者环境,这里先不讲,免得把大家吓跑了。
R语言的前身是S语言,这个语言一度是数据分析领域里面的标准语言。当然,现在也是,但是正在逐步被R语言取代。S语言是由贝尔实验室开发的,贝尔实验室开发了很多经典的东西,S是其中之一。S语言的缺点是它不是免费的,而R最大的优点在于R是免费的。
现在很多人用SPSS,SAS,MatLab,但是用的都是盗版软件。从法律上来讲这是非法的,但是非法的东西在中国很流行,很多教授也用这些非法软件,并且还帮着同学去获取盗版软件,其实,这不太可取。当然,在感情上我予以充分理解。
上次去上海参加第4届R会议,来了一个嘉宾是新西兰人,新西兰是R的故乡,中间熊熹提到她复印了一本ggplot2的书,被外国人看到,外国人就问她征求过版权问题吗?在外国人看来这是很严肃的事情。当然,这是题外话。
免费是R很大的优点,但不是唯一的。R的最大优点是出色的作图功能、丰富的统计学方法以及超快的更新速度。下面讲一下R的各种功能。
首先,R可以作为计算器使用,例如(屏幕演示)。其次,出色的绘图功能,例如(屏幕演示,直方图,小提琴图),还可以绘制一些高级的图形,向日葵图,玫瑰花瓣图,脸谱图。当然,这是最基本的功能。虽然很基本,SPSS这些软件是不可能做到这么完美的。R的画图分四个层级,最基本的就是刚才演示的。高级一点的是grid,然后是,Lattice,Lattice的图形是这样的(屏幕演示),很适合做多元数据展示。grid是这样的(屏幕演示),grid图形引入了图层概念,并且可以切换图形的视角。举个例子:(A4纸演示),接下来是ggpolt2:ggplot2是一个更具有创新性的绘图设备,它创建了自己的语法,相当于R里面有创建了一门新的绘图语言。ggplot2的功能是这样的(屏幕演示)。最后,比较终极的绘图BOSS是ggobi,这是一个动态的绘图软件,交互性很强,不过可能很快要被谢益辉的cecran给取代了。后者是前者的加强版。
然后,就是R建模。R的建模能力超强。建立线性模型,只需要用lm函数就可以了,广义线性模型glm就可以了,广义可加模型gam就可以了。
然后是,时间序列分析。这个很有用的。我觉得,对于本科生也好,研究生也好,想基于一元或者多元回归做一个比较上层次的论文是困难的。但是,用时间序列分析是可以的,可以用arima,说到这里很多人就笑了,arima这个我知道,终于听到一个自己知道的模型了,其次是garch模型。我知道很多人做garch模型用EViews,但是这个软件太老了,极其不智能,稍微高级的方法都用不了。加一个外生变量要折腾半天。而且最重要的是你用的是盗版软件,话说过来,即使是正版的Eviews也不智能。R里面做garch模型就很简单,用rgarch包就可以了,可以构建各种高级的garch模型,tgarch,igarch,gjrgarch之类的,还有高级的Dccgarch,可能你又听不懂了,还有更高阶的BEKK模型,BEKK没什么神秘的,其实就是多元GARCH模型,就是把GARCH模型从一维推广到了二维了。还有更高阶的,因为参数估计起来太麻烦,所以应用比较少。
Rgarch包还能计算VaR。也就是Value at Risk。风险价值。这个东西很高级,没有听过吧?其实,我认为上了大三的人就应该很熟悉VaR。但是很多人不知道,因为中国的教育不太成功,我们叫不成功,不叫失败,免得打击教育部。高校的老师,怎么说呢,比较善于推己及人。他们当年读大三的时候,就不懂得VaR,他们复习半年,考上研究生的时候也不怎么懂。所以他们认为别的本科生也不懂,或者说没有能力懂。他们对中国的学生太没有信心了。其实,VaR的概念并不是很难。(演示)
这就是VaR,其实就是分位数。分位数其实就是对密度函数求变上限的积分,求变上限的积分都会吧?不过,也不用手动求,用R就可以了。
理论上讲,只要知道了密度函数,求积分不在话下。所以求密度函数其实是VaR的核心。根据求VaR密度函数的方法的不同,可以将它分成三种重用的方法,历史模拟法,蒙特卡洛模拟法,方差-协方差法。历史模拟法就是用历史数据的密度函数代替未来的密度函数,蒙特卡洛模拟法就是假设一个分布,模拟一批随机数。说到随机数,想起来本科期间一件事情,当时精算专业要生成随机数,一批学生不知道怎么做,在Excel里面瞎折腾。我就想不明白,为什么不用R呢,产生正态分布的随机数rnorm(5)就可以了,产生5万个,rnorm(50000),在Excel里面,折腾死你。
蒙特卡洛模拟完随机数,就根据这一批样本来计算VaR。方差-协方差呢,跟这个不同,它求的是条件密度函数,理论上讲应该更准确。历史模拟法对历史区间的选择很敏感;蒙特卡洛对分布的假设很敏感,正态分布假设和t分布假设结果相差很大;方差-协方差对厚尾与否很敏感。
如果是单个资产的话,像上面这样求分位数就搞定了。资产组合的时候,要知道联合分布,才能求分位数。联合分布怎么求,最新的方法是Copula。简单而言就是个复合函数:假设你有联合分布函数F(x1,x2,x3,…),有边际分布,f(x1),f(x2),f(x3)…要找到要个函数H(·)使得F(x1,x2,x3,…)=H(f(x1),f(x2),f(x2)…)。
这个函数就是Copula。这是工作原理,操作起来有一系列复杂的技术。当然,求解这个过程计算机会帮忙的,不需要手算。君子善假于物也。
本科生的时候做过一个项目是关于VaR的。当时学校的一个老师提出过质疑,因为VaR的最初定义是是关于头寸的。而R里面是基于收益率的。两者在测量风险方面没什么差异。但是,他非得坚持算头寸。答辩的时候,我跟他讲这是很容易换算的,他问怎么容易。我就解释给他,当时年少无知,连续向他发问,我估计他很久没有看最新的VaR文献了,因此,我质疑的问题,他一个都答不上来,后面听答辩的同学,开始欢呼,掌声雷动。我很了解同龄人,大家都喜欢看见权威被打倒。这是潜在的暴力倾向,我很不喜欢。值得注意的是,刘姝威老师也在下面拍手。
现在想起来当时太冲动了,事后我试图向那个老师道歉。当然,不是因为我用错了方法,只是因为我用错了态度。我觉得一个人还是应该尊重另一个人的。
刘姝威老师后来说,本科生能做出来这个VaR是很不容易的。我当时心里很舒服,得到了赞赏。后来想想,这个赞赏的代价很大。VaR明明很容易计算,她却因为这个儿称赞我,那不是在贬低其他所有的不会算VaR的同学吗?这是我后来想明白的。
R还能做极值理论。今年上海交大的一个研究生问我用R作极值理论的东西,我就帮他说了一下,他说帮了他大忙。说要感谢我,我说不用,在论文后面,鸣谢一下就可以了。其实,我心里一直在怀疑,研究生要毕业了,极值理论都还不懂,研究生到底读的是神马?更进一步,这样的人为什么能踏过研究生的门槛,问什么能考上研究生呢?中国的研究生录取机制有问题。
再之外,R在数据挖掘领域是顶呱呱的。里面有各种方法,比如随机森林,支持向量机,Lasso等。什么是Lasso,也许你说,那是lasso,我跟你说,你说错了,这个单词的重音在第二个。关于这方面,刘思喆是专家,你们可以到论坛上或者微博上咨询他。
R能做的东西很多。那有没有R不能做到的事情?让我想一想,好像还真有。比如,R好像不能下电影,看电影,听音乐。不过,R里面却是提供了很多高级的工具,它提供了一个hook,可以启动电脑中的其他程序,比如迅雷,可以自动下载网页附件,自动解压缩,读入数据等等。很多R粉丝甚至用R关机,用R发微博,发校内状态。R能给人很多惊喜,比如用R下五子棋,扫雷,玩儿递归汉诺塔。做贺卡,马赛克图,这里面是什么知道吗?是AV女优,不信你看看,是不是发现了很多熟人?
话说回来,很长一段时间里。SPSS,SAS,Matlab还会继续存在,不会骤然消失。我甚至认为这些软件不会消失。因为他还是有自己的受众的。你不能要求所有人的都学习R编程。
这些软件也有些优点,我最喜欢Matlab,他跟R有点像。好吧R跟matlab有点像,免得伤害Matlab user的感情。曾经有一个人发了一段代码,让用R实现。我不知道那人是什么动机。是想看看R能不能做到,还是想看看COS有没有人会。很不好意思,我两者都会一点,于是我就用R重现了那个过程,代码极其简单。后来,那人说,太牛了,这都能做到。其实,我想说,这不算什么。真的。牛人都在做更重要的事情。
我希望将来随着时日推移、随着SPSS,SAS,Matlab这一批老人家的辞世,R能快速的成长起来,老人家不愿意学编程,这一点我是很理解的,但是,他们阻碍了R的崛起,R将来势必是一种潮流。
目前,市场上流行一个观点。即数据越便宜,数据分析技术越昂贵。我早就意识到了这个问题,目前中国获取数据很难,大家都把数据当资源来买。国外就是不一样,国外开放很多数据,因为国外认为,数据里面的信息才是资源。我把数据源放开,你有本事就从里面寻找信息吧。所以,国外分析数据的人就很贵。
将来,中国的数据提供商肯定会转型,会开始搞咨询,搞分析,而不是单纯的卖数据。卖数据没有前途。他们不卖数据了,数据分析师就会开始值钱了。这一天,我相信很快就到来了。
R这么好,如何学习R呢?我推荐一些材料给大家。一个是Rforbeginner,R导论。看完之后,看一下Rin a Nutshell,接着看The R book或者Statistics with R。这些资源基本都是开放的。
你们也可以跟着学校的老师学,如果有用R的老师的话,实在不行就靠自己自学,来论坛问也是可以的。
总之,R是一片广阔的海域,你认为自己有理想,就放马过来吧。加入时代的浪潮,Come on!最后一点希望,希望在做的各位,将来毕业时都能够写出一篇漂亮的论文,不要抄袭!
祝各位身体健康,天天快乐,谢谢!