对大数据的处理,确实需要技巧。
不过除了特殊的情况下,一般在统计计算和建模的时候用不到那么大的数据量。针对超大的数据集,往往限于计算一些汇总统计量,这个任务可以由数据库来做,效果会很好;并没有必要使用R\S来做直接做。当然,如果要直接在R中做,也可以自己编写(现在已经有这方面的pkgs了)程序,通过逐批方式来做(这也是所谓的借助硬盘来实现了,SAS就是这类)。
对于大多数复杂点的模型拟合,数据过大且无法通过逐批处理,SAS也是无能为力的——这些都是具体模型算法研究方面的问题了,和软件的架构无关了。此外,我对做常规模型使用超大量的数据集一直抱怀疑态度——统计上面的抽样等是否就没有必要用了。
程序质量的问问题,倒是仁者见仁智者见智。
SAS作为商业软件,需要对客户负责,保证千锤百炼,保证质量。可惜其底层的代码是看不到的,可以由其手册中描述的统计方法之类的来推测。
而R底层是C做的,用了科学计算领域最成熟的一系列算法(和MATLAB底层差不多,比MATLAB版本更新要快一些),不能说完全保障,至少代表了国际一流水平。至于R小组审核后的基础包和推荐包,质量是极高的,至少目前报告的一些bugs中罕有关于其思路或算法的——这些包的作者均为是最前沿的学者,对R的测试也不会差。至于其他很多领域的pkgs,被小组确认作为推荐或者核心的,质量也可靠。更加重要的是,你可以看到源代码,大家都可以来测试这些程序,这种机制对质量的保障起到了至关重要的作用。
运行速度的问题
常常听说SAS运行快之类的,其实那是当时和SPSS之类的比较而言的,在常规的建模方面把所有数据放到内存中的做法无疑是速度的保证。MATLAB和R的矩阵运算都是用的相同的库,除非你自己做特别的优化(估计可能性不太大,这些算法都是近几十年来智慧的结晶了),速度属于一个数量级的。有测试报告说R还会略微胜过MATLAB一筹,其实只要保障数量级相同,其他的细枝末节的问题没有必要太在意,关键是要熟悉这种语言的性能,养成好的编程思路。
用户习惯问题
以我自己为例,和数据分析相关的软件基本上我都使用过,甚至一些很专门的如network analysis方面的也用过。我的看法是找到你自己适合的工具,而不是开头就有一个成见。现在我基本上工作都是用R来做:不要钱、功能广泛。我认识的一些朋友中不少被认为是资深的做数据分析的人,基本上对R有好感;更多的是开始学这个了。
如果你是商业用户,比如我知道国内现在不少银行要自己做一些分析方面的系统,大部分都会打听下SAS。从我了解的几个项目来看,很少用到SAS建模方面的功能,多半就是做点汇总、报表了。其实这些东西用甲骨文的组建来做也是一样的,速度和可靠性不比SAS差。SAS在还有一个突出的有点,就是其功能流程上的完整性:它连数据库都是自己有的、做服务引擎也蛮好的,etc。而且SAS之类的是商业软件,相对来说商务上面的是要好说多了;如果用一开源的,领导的压力就来了。所以最终还是一个具体环境具体应对的问题。
个人意见
我常常的观点是以学习工作中需要为导向,练习好一个主要的;但是千万不要轻视甚至无视其他工具的存在。比如你公司用SAS的,你也不妨了解下R\S;反之亦然。
对于学数理统计的,尤其是工作中要自己做模型和算法实现的,我就推荐用R\S或者MATLAB之类的先实现(事实上我常常开玩笑说,通常的工作不过是把R已有的pkgs中需要的部分依照自己要求组合一下而已,很多关键性工作已经有人帮着做了)。如果需要速度和性能方面的,就再写成C\Fortran,甚至是硬件实现。
对于金融、生物等方面的做统计工作的,我建议尽量把R\S作为最主要的工具之一,根据我的经验,这些快速发展的领域,需要一个灵活、强大、丰富的工具,而R比较好的符合了这个特征。