星期二, 十二月 27, 2011

R语言多元分析系列之四:判别分析

判别分析(discriminant analysis)是一种分类技术。它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类。

判别分析的方法大体上有三类,即Fisher判别、Bayes判别和距离判别。Fisher判别思想是投影降维,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一组内的投影值所形成的组内离差尽可能小,而不同组间的投影值所形成的类间离差尽可能大。Bayes判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断。距离判别思想是根据已知分类的数据计算各类别的重心,对未知分类的数据,计算它与各类重心的距离,与某个重心距离最近则归于该类。

星期四, 十二月 22, 2011

R语言多元分析系列之三:多维标度分析

多维标度分析(MDS)是一种将多维空间的研究对象简化到低维空间进行定位、分析和归类,同时又保留对象间原始关系的数据分析方法。

设想一下如果我们在欧氏空间中已知一些点的座标,由此可以求出欧氏距离。那么反过来,已知距离应该也能得到这些点之间的关系。这种距离可以是古典的欧氏距离,也可以是广义上的“距离”。MDS就是在尽量保持这种高维度“距离”的同时,将数据在低维度上展现出来。从这种意义上来讲,主成分分析也是多维标度分析的一个特例。

星期二, 十二月 20, 2011

R语言多元分析系列之二:探索性因子分析

探索性因子分析(Exploratory Factor Analysis,EFA)是一项用来找出多元观测变量的本质结构、并进行处理降维的技术。 因而EFA能够将具有错综复杂关系的变量综合为少数几个核心因子。EFA和PCA的区别在于:PCA中的主成分是原始变量的线性组合,而EFA中的原始变量是公共因子的线性组合,因子是影响变量的潜在变量,变量中不能被因子所解释的部分称为误差,因子和误差均不能直接观察到。进行EFA需要大量的样本,一般经验认为如何估计因子的数目为N,则需要有5N到10N的样本数目。

虽然EFA和PCA有本质上的区别,但在分析流程上有相似之处。下面我们用ability.cov这个心理测量数据举例,其变量是对人的六种能力,例如阅读和拼写能力进行了测验,其数据是一个协方差矩阵而非原始数据。R语言中stats包中的factanal函数可以完成这项工作,但这里我们使用更为灵活的psych包。

R语言多元分析系列之一:主成分分析

主成分分析(principal components analysis, PCA)是一种分析、简化数据集的技术。它把原始数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是在处理观测数目小于变量数目时无法发挥作用,例如基因数据。

R语言中进行主成分分析可以采用基本的princomp函数,将结果输入到summary和plot函数中可分别得到分析结果和碎石图。但psych扩展包更具灵活性。

星期六, 十二月 17, 2011

新书推荐:《Visualize This》

这是一个数据的时代,各种数据铺天盖地涌现出来,如何从中获取有用的信息?人类的大脑喜欢图形,因此将数据可视化或许是种方法。数据可视化是美学、数据分析和专业知识的结合,能以清晰简明而优美的方式讲述数据背后的故事。

如果你对数据可视化感兴趣,那么向你推荐Visualize This这本书。作者Nathan Yau是加州大学洛杉矶分校统计学博士生。同是也是flowingdata.com的创建者。

星期二, 十二月 13, 2011

缺失数据的处理

对于缺失数据通常有几种应付手段,一种是当缺失数据较少时直接删除相应样本,另一种是对缺失数据进行插补,最后是使用对缺失数据不敏感的分析方法,例如决策树。基本上缺失数据处理的流程是首先判断其模式是否随机,然后找出缺失的原因,最后对缺失值进行处理。

星期六, 十二月 10, 2011

qplot绘图函数快速入门

绘图是进行数据探索分析的重要方法,也是数据报告中的必备元素。但进行多元数据绘图时,R语言中的基本绘图工具往往很不给力,使用lattice包又要记一大堆命令。在你痛苦不堪的时候,需要ggplot2包来拯救你。虽然在刚开始学习这种绘图方法时会有少许难度,但跨过这道坎后你会感觉到它的简洁和力量。

对于初学者ggplot2提供了qplot函数,可以方便的绘制多种图形,下面来看看它是如何作的。首先加载ggplot2包,然后读取diamonds数据,运行?diamonds可以得到关于数据的更多信息。由于该数据集非常大,所以为了举例方便从中抽取了500个样本。

星期四, 十二月 08, 2011

多层回归模型简介

多层回归模型(Multi-level model)中有很多容易混淆的概念,因为很多概念是来源于不同的专业背景。首先让我们先罗列这些名词进行区分,再来R语言来举例。

多层回归模型通常涉及到对同一个体进行反复测量,这样得到的数据就不再相互独立而是存在某种相关性,所以普通线性回归不再适用。当这种反复测量是在不同时点上进行时,这就称为面板数据分析(panel data analysis)或者纵向数据分析(longitudinal data analysis)。

星期三, 十二月 07, 2011

加性模型(Additive Model)在R中的实现

加性模型是一种非参数模型,如果说二维散点图的平滑是简单线性回归模型的一般化,那么加性模型就是多元回归模型的一般化。加性模型非常具有灵活性,因为它不象参数模型那样需要假设某种函数形式,只要预测变量对响应变量的影响是独立即可,也称为可加和假设。

加性模型的拟合是通过一个迭代过程(向后拟合算法)对每个预测变量进行样条平滑。其算法要在拟合误差和自由度之间进行权衡最终达到最优。在R中可以利用mgcv包中的gam函数实现加性模型,我们仍以trees数据集作为例子,其中Volume为响应变量,Girth和Height为预测变量。

星期一, 十二月 05, 2011

在R语言中进行局部多项式回归拟合(LOESS)

局部多项式回归拟合是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回归时采用加权最小二乘法,即越靠近估计点的值其权重越大,最后利用得到的局部回归模型来估计响应变量的值。用这种方法进行逐点运算得到整条拟合曲线。

在R语言中进行局部多项式回归拟合是利用loess函数,我们以cars数据集做为例子来看下使用方法。该数据中speed表示行驶速度,dist表示刹车距离。用loess来建立模型时重要的两个参数是span和degree,span表示数据子集的获取范围,取值越大则数据子集越多,曲线越为平滑。degree表示局部回归中的阶数,1表示线性回归,2表示二次回归,也可以取0,此时曲线退化为简单移动平均线。这里我们设span取0.4和0.8,从下图可见取值0.8的蓝色线条较为平滑。

星期日, 十二月 04, 2011

在R语言中用自助法求统计量置信区间

当样本不符合理论分布假设时,求样本统计量的置信区间就成为一个难题。而自助法(Bootstrap)的思路是对原始样本重复抽样产生多个新样本,针对每个样本求取统计量,然后得到它的经验分布,再通过求经验分布的分位数来得到统计量的置信区间,这种方法不需要对统计量有任何理论分布的假设。一般认为,只要样本具有代表性,采用自助法需要的原始样本只要20-30个,重复抽样1000次就能达到满意的结果。

在R中进行自助法是利用boot扩展包,其流程如下:

参数检验、非参数检验与置换检验的比较

当我们研究的样本处于良好情况下(近似正态、无离群点、数据量大等),传统的参数检验是很有效的。但是当这些前提条件不再满足时,参数检验就不再有效。此时人们往往求助于非参数检验,非参数检验不再关注数据的值,而只关注数据的秩,这样就抛弃了大量可用的信息。而置换检验采取重复随机抽样的方法,通过对样本再抽样构造经验分布,然后在此基础上生成P值进行推断,达到很好的效果。但要注意的是,如果样本不能很好的代表总体,任何检验方法都是无效的。

星期五, 十二月 02, 2011

聊聊散点图

散点图很简单,但它无疑是探索数值数据之间关系的有力工具。它有直观简便的优点,通过观察散点图,不但可以得到定性的结论,而且可以通过观察并处理异常数据,提高用于估算相关程度的准确性。在R中实现散点图最简单的函数就是plot,我们首先随机生成两个数据,然后用作散点图
y=rnorm(100)
x=rnorm(100)
plot(x,y)
如果希望从简单的散点图中得到更多信息,我们可以使用car包中的scatterplot函数,散点图增加了单变量的箱线图,线性回归线和局部回归线。此外该函数也可以进行条件绘图。
scatterplot(x,y,spread=F)

星期四, 十二月 01, 2011

R语言中的方差分析

1 单因子方差分析(one-way ANOVA)
1)建模:
我们采用multcomp包中的cholesterol数据集作为例子,其中response为响应变量,trt为预测变量,这个处理中有五种水平。从下面的箱形图中可观察到处理的不同水平对于响应变量的影响。再用aov函数建立单因子方差模型,从结果的P值可看到各组均值有显著不同。
aggregate(response, by=list(trt), FUN=mean)
bwplot(response~trt)
model=aov(response~trt)
summary(model)

星期一, 十一月 28, 2011

什么是数据科学(Data Science)


何谓数据科学?在wikipedia中你还找不到Data Science的词条,但它将成就你的未来。

谷歌首席经济学家Hal Varian在2009年说,下一个十年最有吸引力的工作就是统计学家。能获取并处理数据,从中得到有用信息并能图形化,并使人们得以理解,这将是非常重要的技能。在此处他所称的“统计学家”,实际上是能够提取大数据集的信息,然后展现给非数据专家的那些人,我们也可称之为数据极客(Data Geek)或是数据科学家(Data Scientists)。

一、数据科学的构成
数据科学的组成要素可以从下面这个维恩图得到线索。它包括了计算机技巧,数学和统计知识,实质性的专业知识。


你不一定要拥有计算机科学的学历,但数据是电子化交易的商品,所以你需要了解一些极客技能。这些技能包括:Linux知识,能够操纵文本文件的命令行,了解矢量操作,算法的思想,这些技巧都是数据极客所需要的。

一旦你已经获得并清理好数据,下一步就是从中提取有用的知识。此时你需要运用适当的数学和统计方法。这并不是说你要成为统计学博士,但你确实需要知道普通最小二乘回归之类的东西,以及如何解释其结果。

在第三个关键是专业领域的知识背景。如果数据分析只是你的业余爱好,那么只捣鼓数学、机器学习和统计数据也就够了。但如果你从事数据科学的工作,这就要求从专业背景上提出问题,并用数据和统计方法进行检验,这样才能真正的发现并构建知识。

最后,要注意的是黑客技能加专业知识的危险区。这里所描述的是那些“半桶水专家”,他们知道如何得到合适的数据,甚至掌握如何用R语言进行线性回归并报告系数,但他们不理解那些系数的真正含义。在不了解内在统计意义时进行数据分析是危险的,这也是数据分析经常被滥用情况。

二、数据科学家的能力
“数据科学家”的工作自然定义了数据科学。他们的工作涵盖了从数据收集到数据整理,应用统计学和机器学习等相关技术,对数据进行解释、沟通和可视化。

数据科学崛起的原因之一是因为技术进步,这使数据科学家很容易获得广泛的专业知识。在10年前如果某个人能整合多个数据库进行多层回归,并生成一个优美的图形,这被认为是非常罕见的。

原因之二是因为职业棒球数据分析师所起的表率作用。商界领袖喜爱用体育来打比方和举例子,职业体育领域的数据分析使得数字能击败直觉,所以它立即受到大家的关注。

数据科学家有三个重要技能:

1)计算机能力:数据的获取和整理
  • 数据整理。任何数据分析项目的第一步是数据整理,对应着数据获取、清洗、格式转换等工作,使之成为可用数据。现在有各种各样的数据格式:数字、表格、Web网页、文本,甚至包括语音和视频。在处理凌乱的原始数据时,脚本语言(例如Perl和Python)是必不可少的。
  • 大规模数据。传统的关系型数据库在大规模数据条件下已经不在有效。为了有效地存储庞大的数据集,我们看到的数据库出现的新品种。这些通常被称为非关系数据库,例如谷歌的BigTable和Amazon的Dynamo,它们有非常灵活的架构设计,分布在多个节点,以提供“最终一致性”。
  • 存储数据只是数据平台建设的一部分。在目前的大规模数据集计算问题上,谷歌推广MapReduce方法,基本上它是利用非常庞大的计算集群进行分布计算。最流行的MapReduce开源实现方法就是Hadoop。Hadoop使“敏捷”数据分析成为可能。在软件开发中,“敏捷”意味着更快的产品周期,开发商和消费者之间更密切的互动。传统的数据分析需要极长的周转时间。它可能要几个小时、甚至几天才能完成。但是在Hadoop帮助下可以很容易地建立集群,以执行大规模数据集的迅速计算。更快的计算速度使你更容易地测试不同的假设,不同的数据集和不同的算法。

2)数学和统计学能力:数据的挖掘
  • 机器学习是数据科学家的另一项必不可少的工具。目前有许多机器学习库可以利用:在Python中有PyBrain,在Java中有WEKA,谷歌刚刚宣布了他们的Prediction API,使其机器学习算法得以公开使用。Stanford的机​​器学习课程,是计算机科学中最流行的课程之一,推荐学习。
  • 虽然在这里没有强调传统的统计模型在数据分析中的重要作用,但是统计是“数据科学的语法”。它是至关重要的。数据科学不只是获取数据然后来猜测其意义,它也包含了假设检验,确保你的数据结论是有效的。统计已成为一项基本技能。它并没有被机器学习或商业智能所取代。
  • 虽然有许多商业统计软件包,但开源R语言是一个不可或缺的工具。虽然R是一个奇怪的语言,但它为大多数统计工作提供“一站式购物”。它还具有出色的绘图功能。 CRAN中包括了多种类型的数据解析器和分布式计算扩展。如果有一个单一的工具,能为统计工作提供了一个最终解决方案,那就是R语言。

3)图形可视化:数据的提炼和展现
一张图片胜过千言万语,可视化是数据分析的初步探索工作,也是每个阶段的关键。FlowingData博客是一​​个寻找创意可视化非常棒的地方。这也是我的最爱之一,这个可视化例子就是随着时间的推移,沃尔玛增长的动画。这就是数据可视化的艺术。

三、数据科学家的职业生涯

对数据科学的定义也是从其职业生涯角度来看的,一个典型的职业路径可能是从编程开始学习,然后在科学领域花了一段时间,围绕着各种不同的角色,然后学会多种不同的技能,所有这些都涉及到使用分析技术,以便理解数据。

这种职业路径不是特别新,但它现在可能使你能快速而廉价地开展科学数据工作。高速计算机,开源工具,和一些编程技巧​​允许我们快速的尝试一种新型数据管理方法或一种新的机器学习技术,直到找到问题的解决方案。

这里就存在两个方面的后果。首先,现代数据科学家的生产力显著增加了。数十年前需要一个团队工作几年的项目,现在几天内就能完成。其次,这个惊人的生产力,可以使人们的时间更多的花费在数据科学的垂直整合过程中,而不必花在单一方面的技能学习上。在以往成为数据科学量需要学习大量的东西,但现在你不用成为某个方面的大师也能快速获得这些技能。

参考资料:
http://www.drewconway.com/zia/?p=2378
http://www.harlan.harris.name/2011/09/data-science-moores-law-and-moneyball/
http://flowingdata.com/2009/06/04/rise-of-the-data-scientist/
http://radar.oreilly.com/2010/06/what-is-data-science.html

星期三, 十一月 23, 2011

R语言基础入门之六(完):Logistic回归

让我们用logistic回归来结束本系列的内容吧,本文用例来自于John Maindonald所著的《Data Analysis and Graphics Using R》一书,其中所用的数据集是anesthetic,数据集来自于一组医学数据,其中变量conc表示麻醉剂的用量,move则表示手术病人是否有所移动,而我们用nomove做为因变量,因为研究的重点在于conc的增加是否会使nomove的概率增加。

首先载入数据集并读取部分文件,为了观察两个变量之间关系,我们可以利cdplot函数来绘制条件密度图.

星期五, 十一月 18, 2011

R语言基础入门之五:简单线性回归

线性回归可能是数据分析中最为常用的工具了,如果你认为手上的数据存在着线性定量关系,不妨先画个散点图观察一下,然后用线性回归加以分析。下面简单介绍一下如何在R中进行线性回归。

1 回归建模
我们利用R语言中内置的trees数据,其中包含了Volume(体积)、Girth(树围)、Height(树高)这三个变量,我们希望以体积为因变量,树围为自变量进行线性回归。

星期四, 十一月 17, 2011

如何从EXCEL和SPSS导入数据到R

做分析没有数据真是一大悲剧,正是无源之水、无根之木再加上无米之炊。通常我们搜寻到的数据格式主要有文本格式、Excel格式和SPSS格式。当然也会有从数据库等其它途径进来,这不在本文讨论范围内。

一般的文本格式导入,都可以用read.table命令把数据扔进R里面。Excel和Spss数据的话,可用相应软件将文件打开,观察数据结构后将其复制到剪贴板,然后一样可以用read.table('clipboard')扔到R里面。如果文件太大不好复制,那么可以利用Excel和Spss的导出功能,将数据导出成文本格式。

还有一种情况就是,你的计算机上没有安装Excel或是Spss,这数据导入就要用到RODBC扩展包了。首先装载RODBC包。然后输入数据文件的绝对路径(要注意是用/而不是\)来定义连接,最后用数据抓取命令获取你需要的标签页数据内容(Sheet1)。

星期三, 十一月 16, 2011

R语言中的色彩

统计学家经常唠叨这样一句话,“一张好的图片胜过千言万语。”绘图正是R语言的强项。其中的基本绘图命令就包括了大量的参数配置,完全可以满足各种出版物的需要,更何况还有lattice和ggplot2这两大格点绘图包的存在。国外媒体包括CNN都在利用R的强大绘图功能展现数据之美。优秀的图形表达离不开丰富的色彩搭配,让我们初步了解一下R绘图中的色彩设置。

让我们随便弄个饼图先
pie(rep(1,10))

星期日, 十一月 13, 2011

R语言基础入门之四:常用的统计推断

通常一个研究项目能够获得的数据是有限的,以有限的样本特征来推断总体特征就称为统计推断。推断又可细分为区间估计和假设检验,二者虽有区别,但却是一枚硬币的两面,之间有着紧密的关联。

1 对总体均值进行区间估计
假设我们从总体中抽得一个样本,希望根据样本均值判断总体均值的置信区间,如下例所示:
x=rnorm(50,mean=10,sd=5)  #随机生成50个均值为10,标准差为5的随机数为作为研究对象
mean(x)-qt(0.975,49)*sd(x)/sqrt(50)  #根据统计学区间估计公式,得到95%置信度下的区间下界
mean(x)+qt(0.975,49)*sd(x)/sqrt(50)  #95%置信度下的区间上界

数据挖掘之你问我答(5/5)

注:本文是由Tim Graettinger的文章编译而来
问题五:最新的算法一定能得到更好的结果吗?

并非如此。

在读研究生的时候,我学到了各种预测建模的算法,并将大部分进行了编程实践。毕业后我去了一家专注于神经网络的软件公司,我想这是最厉害的建模技术了!

工作期间我咨询了许多使用我们公司软件进行应用的客户。在通常情况下,客户的内部员工已经开发过相关的应用,其建模技术并不比神经网络更为复杂。而我发现,相对之前的模型,神经网络技术顶多只能提供微弱的改进。

星期五, 十一月 11, 2011

数据挖掘之你问我答(4/5)

注:本文是由Tim Graettinger的文章编译而来
问题四:我的模型在训练数据上表现很好,为什么在新数据上表现很糟?

你遇到的就是被称为“过度拟合”(over-fit)的典型症状。通常是在为稀有事件建模时较为容易产生这种问题,例如发动机故障预测。

当某种输出结果非常罕见(如百分之一或千分之一)时,就会倾向于建立很复杂的模型。复杂的模型会有很多参数,用来预测或者说“适应”训练数据。问题是,该模型包含了训练数据所独有的特征,但在其它地方并不一定适用。这就像为你自己量身定制的衣服只适合于你自己,但并不适合其他人。在建模的世界里出现过度拟合是糟糕的。我们要构建的是稳健的、能概括新数据的模型。

你能做些什么呢?

在R中使用DataMarket的公开数据源

在如今的商业世界中,各种数据和统计数字是非常重要的决策依据,但良好的数据通常很难获得。因为数据来源分散而且格式不一,世界各地的分析人员往往花费了无数的时间进行数据检索、复制、粘贴和清理。

DataMarket.com是2010年推出的一个数据门户网站,可以一站式访问各种公共和私营部门组织的统计数据和结构化数据。这使得用户非常方便的查找、比较、可视化和下载各类机构的公开数据,如联合国,世界银行,欧盟统计局。时间序列数据还可以与新闻事件相关联,并可以用任何选定的数据格式使用到任何地方。

我们在之前的博文中曾提到过DataMarket的数据源,本文简单介绍一下如何更方便的在R语言中调用DataMarket数据。

星期四, 十一月 10, 2011

数据挖掘之你问我答(3/5)

注:本文是由Tim Graettinger的文章编译而来
问题三:进行数据挖掘需要多少数据?

这是迄今为止关于数据挖掘最常见的问题,这个问题得到如此多的关注是有其原因的。当你第一次进行数据挖掘,几乎会下意识的提出这个问题。你想知道,从数据挖掘的角度来讲手里的数据是否足够。尽管问题很简单,但在没有更深理解问题的前提下回答它却是不明智的。在这里我只能提供一些原则性的指导意见,然后你可就此来做为进一步工作的起点。我甚至会提供一个经验法则来帮助你估计所需要的数据。

第一个原则是基于关系的复杂度。你想构建的关系越复杂,你就需要越多的数据来准确的构建它。但是,你可能会说,“我不知道关系有多复杂啊”。从现实角度来看,关系的复杂度可以从影响关系的因子来加以判断。比方说,要预测天气。那么想想可能的影响因素会有哪些,例如风力、风向、温度、湿度、云层等等。你需要对可能的影响因素有大体的估计。

星期二, 十一月 08, 2011

R语言新书:R并行计算

近年来R语言已经成为流行的开源数据分析软件,但其局限性在于单处理器核心作业和内存限制。想要成为跨平台的优秀软件,则必须经过商用海量数据的考验。而并行计算是一种当前热门的解决途径。

O'Reilly最新出版了《Parallel R, Data analysis in the distributed world》,此书虽然只有122页,但包含了R语言中Snow、Multicore、Parallel、Hadoop、RHIPE、Segure几大扩展包的使用,分别讲解各自优势与缺点。在这些扩展包的帮助下,R语言可以拓展到多核心和多机运行,解决海量数据的运算问题。

星期一, 十一月 07, 2011

R语言基础入门之三:常用统计函数运算

在R语言中经常会用到函数,例如上节中讲到的求样本统计量就需要均值函数(mean)和标准差函数(sd)。对于二元数值数据还用到协方差(cov),对于二元分类数据则可以用交叉联列表函数(table)。下文讲述在初级统计学中最常用到的三类函数。

一、数据汇总函数
我们还是以R中自带的iris数据为例,输入head(iris)你可以获得数据的前6个样本及对应的5个变量。取出最后两列数据作为讲解的对象:Species表示花的种类,Petal.Width表示花瓣宽度
data=iris[,c(4,5)]
下一步我们想计算不同种类花瓣的平均宽度,可以使用tapply函数,在计算前先用attach命令将data这个数据框解包以方便直接操作其变量,而不需再用$符号。

数据挖掘之你问我答(2/5)

注:本文是由Tim Graettinger的文章翻译而来
问题二:如何使决策者购买我的数据挖掘项目?

一般我都是以自身经验有感而发的,所以,我谈论的这些东西并非基于对人或企业行为的详尽研究。这些只是我的所思所想,而且对我来说非常合适。

一、寻找一个“痛处”
“痛处”是一种业务需要或业务问题,而你有信心通过数据挖掘来解决这个问题。你所专注的这个问题的范围要小,也就是说相对来讲自成体系,有着适当的风险回报比率。这个问题还应该是你和你的的团队非常熟悉的,即对其数据来源和业务流程均很了解。这样团队就可会努力获取一个又一个小范围的成功。因为相对于失败的大项目,随着时间的推移,人们更容易接受一连串小范围成功。

请允许我仔细解释一下失败的大项目和禁忌。在我的职业生涯中,我经常被空降到一些“麻烦”的项目上。这些项目通常会有以下这些特点:

星期五, 十一月 04, 2011

数据挖掘之你问我答(1/5)

注:本文是由Tim Graettinger的文章翻译而来
问题一:你推荐什么样的数据挖掘工具?

首先,我们需要搞清楚一些东西:你的数据挖掘目标是什么?你的团队怎么样?目前正在使用的工具和能力如何?

先想想你的数据挖掘目标。你是打算以一次性的项目来解决单一业务问题?或者你要在企业内部建立数据挖掘的核心能力?你的目标将影响你选择的软件工具。此外,你的预算是否支持你的既定目标?这里面还要考虑到培训和支持成本。

下面请允许我提出两个更广泛的建议:
  • 写一个“愿望清单”。假设资金不成问题的话,你会买什么样的工具?为什么?真的,写下你的选择。这个愿望清单在后来是非常有用的。
  • 慢慢起步。在开始做数据挖掘项目时,弄清楚你到底需要什么样的工具。根据实际需要去购买软件。

星期日, 十月 30, 2011

R语言基础入门之二:数据导入和描述统计

1 数据导入
对初学者来讲,面对一片空白的命令行窗口,第一道真正的难关也许就是数据的导入。数据导入有很多途径,例如从网页抓取、公共数据源获得、文本文件导入。为了快速入门,建议初学者采取R语言协同Excel电子表格的方法。也就是先用较为熟悉的Excel读取和整理你要处理的数据,然后“粘贴”到R中。

例如我们先从这个地址下载iris.csv演示数据,在Excel中打开,框选所有的样本然后“复制”。在R语言中输入如下命令:
data=read.table('clipboard',T)
这的里read.table是R读取外部数据的常用命令,T表示第一行是表头信息,整个数据存在名为data的变量中。另一种更方便的导入方法是利用Rstudio的功能,在workspace菜单选择“import dataset”也是一样的。

星期五, 十月 28, 2011

R语言基础入门之一:引言

1 什么是R语言
R语言是一个开源的数据分析环境,起初是由数位统计学家建立起来,以更好的进行统计计算和绘图,这篇wiki中包含了一些基本情况的介绍。由于R可以通过安装扩展包(Packages)而得到增强,所以其功能已经远远不限于统计分析,如果感兴趣的话可以到官方网站了解关于其功能的更多信息。

至于R语言名称的由来则是根据两位主要作者的首字母(Robert Gentleman and Ross Ihaka),但过于简短的关键词也造成在搜索引擎中很不容易找到相关的资料。不过这个专门的搜索网站可以帮到你。

星期四, 十月 27, 2011

rapidminer数据挖掘入门之四:建模和评价(完)

rapidminer中提供了大量的建模方法或学习器,可用于不同情况下的回归和分类问题。从常见的线性回归、决策树到神经网络和支持向量机。此外还提供了集成学习器,即将多个学习器组合使用以提高预测能力,例如Bagging和Boosting,以及Stacking。

这些学习器都可以看做是一个黑箱,输入数据,输出模型和预测结果。在使用这些学习器时要注意的一点就是:不同的学习器需输入的数据类型不同。以Decision Tree学习器为例,它可以输入numerical attributes(数值数据自变量)、binominal attributes(两分类数据自变量)、polynomial attributes(多分类数据自变量),以及polynominal label(多分类数据因变量) binominal label(两分类数据因变量),但它不能处理numerical label(数值数据因变量)。这些信息都可以在学习器上通过帮助信息了解。

星期二, 十月 25, 2011

rapidminer数据挖掘入门之三:特征选择

在一般数据分析条件下,样本集合就类似一个Excel表格,每个样本数据排为一行,而纵列则代表了样本不同的特征或属性。有时候样本数据的特征过多,甚至特征数超过样本数就形成所谓的“维灾难”。

维数过高对于大多数回归分类模型来说是难以忍受的,而且这么高维特征可能会大大干扰训练效果、降低分类性能,因此有必要采取措施进一步地降低特征空间的维数。降维过程包括两类方法:一种是特征选择又称为子集选择,即从最初的N个特征中选取n个特征,而这n个特征可以更简洁、更有效地表示样本的信息。另一种是数据变换,即把N个原始特征变换为n个新的特征,例如主成分分析、投影寻踪方法。

特征选择的一般思路是:构造一个评估函数,对特征子集中的每一个特征进行独立的评估,使每一个特征得到一个评估分,然后对所有特征按照其评估分大小进行排序,选取满足阀值的预定数目个特征形成特征子集。

星期四, 十月 20, 2011

rapidminer数据挖掘入门之二:数据导入、预处理和绘图

1 基本概念
当安装软件时rapidminer会问你新建库文件在所在地,也就是Repositories,它相当于是用户的所有资料存放地。库中主要存放两种资料:一种是建模需要的数据(Data),另一种是建模用到的模型,或称为流程(Processes)。在安装完软件后,用户可以从Repositories下面看到sample文件,里面提供了用来练习用的数据和模型。

2 数据导入
数据导入有两种方式:
第一种是在Repositories菜单中点击import,可以读取CSV等五种格式数据,导入后以data形式存在库中,可随时拖拽到主流程图中调用,将会显示为Retrieve。

第二种是以算子(Operators)形式导入,从算子中的import类中可以选择十几种导入算子拖拽到主流程图中,然后在设置窗口确定资料来源。

星期五, 十月 14, 2011

精确Logistic回归的R语言实现

Logistic回归(logistic regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。

精确Logistic回归(Exact logistic regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。

互联网上的公开数据源

Sherlock Holmes有句名言:"Data! Data! Data! I can't make bricks without clay."同样,只有分析工具而没有数据,就如同手中握着锤子却找不到钉子。下面的公开数据源是引自该博文


Economics

Finance

星期三, 十月 12, 2011

推荐两本R语言新书

第一本:Getting Started with RStudio



Rstudio是最受欢迎的R语言GUI,这一点可以从kdnuggets.com的投票中显示出来。它的功能不会太简陋也不会太繁杂,而是将最需要的功能加以整合,显示在四个窗口内。Rstudio的主页上有不少相关的帮助资料,但随着软件的进化,详细的使用手册仍然欠缺。

星期六, 十月 08, 2011

Google Book中的民主与科学

不知道有多少人会象我这样后知后觉,直到最近才从科学网上知道了Google的一个好玩的东西,那就是Ngram Viewer。这是Google利用手里的数百万本数字化书籍制作了一个书籍词频统计器。之前曾作为Google Labs一员发布。用户可以对比多达5个词语在每年出版的图书里出现的次数多寡,支持英语、法语、德语、俄语、西班牙语和中文。

更棒的是所有数据都以创作共用形式授权免费下载和使用。而就在Google要关闭Google Labs的时候,很多项目都被迫下马了,但是幸运的是Ngram却是当之无愧的胜出者。Ngram图书浏览器成为了Google图书的一个成熟的部分。据开发人员爆料,Google图书包含了可追溯至1400年的约百万册图书,这大约占了所有发行过的书籍的10%。

星期六, 十月 01, 2011

RapidMiner数据挖掘入门之一:概要

1 简介
RapidMiner原名Yale,它是用于数据挖掘、机器学习、商业预测分析的开源计算环境。根据KDnuggets在2011年的一次投票显示,从使用率来看该软件比之R语言还要略胜一筹。因为其具备GUI特性,所以很适合于数据挖掘的初学者入门。

RapidMiner提供的数据挖掘和机器学习程序包括:数据加载和转换(ETL),数据预处理和可视化,建模,评估和部署。数据挖掘的流程是以XML文件加以描述,并通过一个图形用户界面显示出来。RapidMiner是由Java编程语言编写的,其中还集成了WEKA的学习器和评估方法,并可以与R语言进行协同工作。

星期二, 九月 27, 2011

利用XML包获取网站数据

很多时候我们需要从某个网站上获取原始数据,本例试图利用XML包来获取google top1000的表格数据。

首先读入必要的工具包
library(XML)
library(RColorBrewer)
利用readHTMLTable函数获取top1000的表格数据,并存入到raw变量中。
u = "http://www.google.com/adplanner/static/top1000/"
tables = readHTMLTable(u)
raw = tables[[2]]
colnames(raw)=c('Rank','Site','Category','Users','Reach','Views','Advertising?')

星期日, 九月 25, 2011

caret包应用之四:模型预测与检验

模型建立好后,我们可以利用predict函数进行预测,例如预测检测样本的前五个
predict(gbmFit1, newdata = testx)[1:5]
为了比较不同的模型,还可用装袋决策树建立第二个模型,命名为gbmFit2
gbmFit2= train(trainx, trainy,method = "treebag",trControl = fitControl)
models = list(gbmFit1, gbmFit2)
另一种得到预测结果的方法是使用extractPrediction函数,得到的部分结果如下显示

caret包应用之三:建模与参数优化

在进行建模时,需对模型的参数进行优化,在caret包中其主要函数命令是train。

首先得到经过特征选择后的样本数据,并划分为训练样本和检验样本
newdata4=newdata3[,Profile$optVariables]
inTrain = createDataPartition(mdrrClass, p = 3/4, list = FALSE)
trainx = newdata4[inTrain,]
testx = newdata4[-inTrain,]
trainy = mdrrClass[inTrain]
testy = mdrrClass[-inTrain]
然后定义模型训练参数,method确定多次交叉检验的抽样方法,number确定了划分的重数, repeats确定了反复次数。

caret包应用之二:特征选择

在进行数据挖掘时,我们并不需要将所有的自变量用来建模,而是从中选择若干最重要的变量,这称为特征选择(feature selection)。一种算法就是后向选择,即先将所有的变量都包括在模型中,然后计算其效能(如误差、预测精度)和变量重要排序,然后保留最重要的若干变量,再次计算效能,这样反复迭代,找出合适的自变量数目。这种算法的一个缺点在于可能会存在过度拟合,所以需要在此算法外再套上一个样本划分的循环。在caret包中的rfe命令可以完成这项任务。

caret包应用之一:数据预处理

在进行数据挖掘时,我们会用到R中的很多扩展包,各自有不同的函数和功能。如果能将它们综合起来应用就会很方便。caret包(Classification and Regression Training)就是为了解决分类和回归问题的数据训练而创建的一个综合工具包。下面的例子围绕数据挖掘的几个核心步骤来说明其应用。

本例涉及到的数据是一个医学实验数据,载入数据之后可以发现其样本数为528,自变量数为342,mdrrDescr为自变量数据框,mdrrClass为因变量。
library(caret)
data(mdrr)
本例的样本数据所涉及到的变量非常多,需要对变量进行初步降维。其中一种需要删除的变量是常数自变量,或者是方差极小的自变量,对应的命令是nearZeroVar,可以看到新数据集的自变量减少到了297个。

星期三, 九月 21, 2011

利用googleVis包实现环境数据可视化

本例的目的是按中国行政区划标注出每个省份所排放的生活废水,其结果与之前的一篇博文类似,但利用的工具是googleVis包,此工具包将Google Visualisation API与R进行连接,直接用R中的数据生成交互的可视化图形,而不用再将数据上传到google。 

首先,从公众环境研究中心得到各省的数据,然后在google网站找到各省对应的地理位置编码,在excel中制成表格,然后读入到data.frame中。并载入googleVis包

星期二, 九月 20, 2011

R语言中最强的神经网络包RSNNS

R语言中已经有许多用于神经网络的package。例如nnet、AMORE以及neuralnet,nnet提供了最常见的前馈反向传播神经网络算法。AMORE包则更进一步提供了更为丰富的控制参数,并可以增加多个隐藏层。neuralnet包的改进在于提供了弹性反向传播算法和更多的激活函数形式。但以上各包均围绕着BP网络,并未涉及到神经网络中的其它拓扑结构和网络模型。而新出炉的RSNNS包则在这方面有了极大的扩充。

Stuttgart Neural Network Simulator(SNNS)是德国斯图加特大学开发的优秀神经网络仿真软件,为国外的神经网络研究者所广泛采用。其手册内容极为丰富,同时支持友好的 Linux 平台。而RSNNS则是连接R和SNNS的工具,在R中即可直接调用SNNS的函数命令。

星期四, 九月 15, 2011

利用RQuantLib包计算期权价格

首先必须要提到的是QuantLib,它是用C++写的一个开源软件库,主要功能是为各类金融计算提供一个综合框架。而RQuantLib则是连接R和QuantLib的桥梁,目前的函数集主要包括了债券和金融衍生品的计算。

我们来计算一个欧式期权价格以了解QuantLib包的使用。期权价格可以看作是一个多元函数,其影响因素包括了标的资产价格(underlying)、执行价格(strike)、标的资产红利率(dividendYield)、无风险收益率(riskFreeRate)、标的资产波动率(volatility)、期权到期时间(maturity)以及期权类型。

星期日, 九月 11, 2011

利用optim最优化函数进行曲线拟合

R语言中对函数求极值有两种命令,较简单的是optimize函数,在确定搜索范围后可对一元函数求极值,例如:
f = function(x) 3*x^4 − 2*x^3 + 3*x^2 − 4*x + 5
optimize(f, lower=-20, upper=20)
$minimum
[1] 0.5972778
$objective
[1] 3.636756
在对多元函数求极值时,则需利用到更强大的optim函数,本例来自于《Introduction to Scientific Programming and Simulation Using R》,其中数据可从spuRs包中获得。本例的目标是对树木体积进行建模,自变量为树龄,函数形式为指数形式,其中包括了三个待定参数。

R语言中的微分运算

虽然R语言的主要功能是统计计算,但它也包含了基本的数值计算函数,可用来进行数值积分与微分。本例中计算对象的函数形式为f(x, y) = sin(x^2/2 − y^2/4) cos(2x − exp(y))

先在R中进行绘图,使我们了解此二元函数的三维图形
x = seq(-1,3, length.out=100)
y = seq(0,1, length.out=30)
g = expand.grid(x = x, y =y)
g$z = sin(g$x^2/2 - g$y^2/4)*cos(2*g$x - exp(g$y))
wireframe(z ~ x * y, data = g, scales = list(arrows = FALSE),drape = TRUE, colorkey = TRUE, screen = list(z = 30, x = -60))



然后用deriv命令进行求导运算,括号内的参数分别是求导函数、自变量和两个逻辑参数。其结果存为Df,它的类型为一个函数。

Df <- deriv(z ~ sin(x^2/2 - y^2/4)*cos(2*x - exp(y)),c('x', 'y'), func=T, hessian=F)

求下列五个点处的函数值和对应的梯度向量。这五个点分别为(-1,1),(0,1),(1,1),(2,1),(3,1)
Df(c(-1:3),1)
运算结果如下,第一行为函数值,之后的为梯度向量
[1] 0.001457906 0.225566580 0.186279732 0.280503646 0.886217096
attr(,"gradient")
              x          y
[1,] -0.5005089  0.6696472
[2,] -0.2032578  0.7179512
[3,]  1.0551597 -0.8073411
[4,] -1.9879397  2.5891741
[5,]  1.0751438  0.1189299
数值积分的命令是integrate,但只能对一元函数进行运算。
integrand <- function(x) {1/((x+1)*sqrt(x))}
integrate(integrand, lower = 0, upper = Inf)

星期五, 九月 02, 2011

Lattice包中最常用的四种绘图

1.密度曲线图
densityplot(~ Sepal.Length ,groups=Species, data = iris,plot.points=FALSE)

星期二, 八月 30, 2011

基于支持向量机的文本挖掘

文本挖掘中很重要的一项任务就是对文本进行分类,基本步骤就是收集训练文本和已知对应的分类,通过分类器来学习训练集,然后利用建立的模型对未知的文本进行分类检验。

#指定原始文本存放目录,然后生成文本集。本例中的两类文本存放在crude和acq两个文件夹中,格式均为xml,若格式为纯文本,则需指定reader = readPlain

crude = Corpus(DirSource("d:/crude"), readerControl = list(reader = readReut21578XML))

acq = Corpus(DirSource("d:/acq"), readerControl = list(reader = readReut21578XML))

#合并两个文本集,并将其转为纯文本格式
ws = c(acq, crude)
ws = tm_map(ws, as.PlainTextDocument)

星期六, 八月 27, 2011

利用R语言的tm包进行文本挖掘

tm包是R语言中为文本挖掘提供综合性处理的package,进行操作前载入tm包,vignette命令可以让你得到相关的文档说明

library(tm)
vignette("tm")

首先要读取文本,本次操作所用的文本是tm包自带的20个XML格式文本,存放在library\tm\texxts\crude文件夹中。用Corpus命令读取文本并生成语料库文件

R语言中如何读取公开数据库

世界上有很多公开数据库(open data)以供研究者使用。在R语言中也有不少程序包可以直接从这些数据源中读取数据。在之前的博文里,已经介绍quantmod和WDI。前者可以从雅虎和美联储读取数据,后者可以从世界银行读取数据。今天再介绍一个拥有数万个数据的网站,就是http://datamarket.com。这里可以看到网站介绍

首先我们在网站上注册一个免费帐号,然后在R中安装如下的package
install.packages("rdatamarket")
library(rdatamarket)

在网站上找到一个你感觉有趣的时序数据,例如这里的是美国失业数据,将其IP地址存入变量

星期四, 八月 25, 2011

利用apriori算法进行关联分析

关联分析(association analysis)又常称为购物篮分析,是指如果两个或多个事物之间存在一定的关联,那么其中一个事物就能通过其他事物进行预测.它的目的是为了挖掘隐藏在数据间的相互关系。

关联分析最常用在市场销售数据中,顾客的购物篮中如果包含啤酒的同时,还包含了尿布,这就揭示了这两种物品之间的关联。关联分析的挖掘任务可分解为两个步骤:一是发现频繁项集,二是从频繁项集中产生规则。

下面用R语言中的arules扩展包来实现apriori算法,来进行关联分析

利用轮廓系数判断K均值聚类的簇个数

K均值聚类(K-means clustering)计算简单,并且可以用于各种数据类型,但需要事先判断簇个数来作为输入参量,该参数的设置往往涉及到聚类效果。

轮廓系数可以用来解决这个问题,轮廓系数(silhouette coefficient)方法结合了凝聚度和分离度,可以以此来判断聚类的优良性,其值在-1到+1之间取值,值越大表示聚类效果越好。

依据这个原理,我们可以尝试用多个簇参量,反复计算在每个簇个数条件下的轮廓系数,当轮廓系数取最大时,其相应的簇个数是最好的。

星期三, 八月 24, 2011

关于R语言和数据挖掘的资料

1.Data_Mining_with_R__Learning_with_Case_Studies
这本书基本上每一章就是用R来做一个完整的案例,全书涵盖了分类、回归、聚类、异常分析多个方面。其焦点是围绕数据挖掘项目的各个步骤和注意事项,很象一本故事书,非常有味道。

利用rapidminer进行文本挖掘

在数据挖掘软件中有五大开源软件,其中weka在国内的使用率较高,而rapidminer却较少看到。就连学习资料也少之又少,只在youtube上能看到一些教学视频。以下的内容就是照葫芦画瓢弄出来的。

文本挖掘(text mining)有时也被称为文字探勘、文本数据挖掘等,大致相当于文字分析,一般指文本处理过程中产生高质量的信息。高质量的信息通常通过分类和预测来产生,如模式识别。

文本挖掘通常要将文本进行断字预处理,然后利用空间向量模型将文本转换为数值数据,让学习器进行学习。中文的文本挖掘天生就比较悲惨,因为中文不象英文那样天然断字。而且中文语料库很少有免费的,要自己去处理语料那真是工程量浩大。因此只有转而求其次,利用网上已有的英文免费文本库中的新闻稿件进行文本挖掘实验。算是做一个rapidminer的练习。

此次任务是对从两种新闻来源中抽取文本,分析其特征词汇,建立分类模型,然后根据模型来检测分类的效果。

星期五, 八月 19, 2011

转载:开源科研软件

转自 http://www.r-bloggers.com


Statistics and Computation

1.  R Project

Replaces: SAS, SPSS

R is a free and open source statistical computing environment that holds its own against some of the most established proprietary statistical environments.  R is available on all operating systems and is free for download.  R also has a community driven library of add-on packages that are also freely available and cover almost any statistical, mathematical, or optimization need.

Also a great reference manual for those switching from SAS to R is SAS and R: Data Management, Statistical Analysis, and Graphics

星期日, 七月 31, 2011

R语言、Rattle以及ggobi协同进行数据可视工作

数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息。但是,这并不就意味着,数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味,或者是为了看上去绚丽多彩而显得极端复杂。为了有效地传达思想概念,美学形式与功能需要齐头并进,通过直观地传达关键的方面与特征,从而实现对于相当稀疏而又复杂的数据集的深入洞察。然而,设计人员往往并不能很好地把握设计与功能之间的平衡,从而创造出华而不实的数据可视化形式,无法达到其主要目的,也就是传达与沟通信息。

R语言有众多的绘图工具包,例如ggplot2,lattice。而在动态绘图方面则可以利用rggobi与ggobi软件进行协同工作。对懒得敲命令的同学来说,还可以利用rattle工具包的图形界面进行数据挖掘和可视化工作。在R程序内运行如下命令即可安装rattle

聚类分析在R语言中的实现

聚类分析和判别分析有相似的作用,都是起到分类的作用。但是,判别分析是已知分类然后总结出判别规则,是一种有指导的学习;而聚类分析则是有了一批样本,不知道它们的分类,甚至连分成几类也不知道,希望用某种方法把观测进行合理的分类,使得同一类的观测比较接近,不同类的观测相差较多,这是无指导的学习。所以,聚类分析依赖于对观测间的接近程度(距离)或相似程度的理解,定义不同的距离量度和相似性量度就可以产生不同的聚类结果。

静态和动态三维散点图的绘制

静态三维散点图需使用scatterplot3d扩展包

library(scatterplot3d)
scatterplot3d(iris$Petal.Width,iris$Sepal.Length,iris$Sepal.Width,pch=16,color=as.numeric(iris$Species))

星期六, 七月 30, 2011

BP神经网络和支持向量机在R语言中的实现

BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。

下面用R语言中的nnet程序包进行分类算例和回归算例,第一个例子是对河流的化学属性对其中的藻类进行回归预测,第二个例子是著名的鸢尾花算例。

星期四, 七月 28, 2011

在R语言中对回归树模型、装袋算法与随机森林之间的简单比较

回归树模型在之前的博客文章中已有介绍。而装袋算法与随机森林相对而言会生成多个树模型,再进行组合预测,其效果远大于单个树模型。装袋算法(bagging)采取自助法的思路,从样本中随机抽样,形成多个训练样本,生成多个树模型。然后以多数投票的方式来预测结果。随机森林则(randomForest)更进一步,不仅对样本进行抽样,还对变量进行抽样。下面来横向对比一下各算法。

首先读入必要的程序包
library(DMwR)
library(rpart)
library(ipred)
library(randomForest)

前二种算法可以计算缺失数据,但随机森林不行,所以还需将数据进行清洗整理

星期二, 七月 19, 2011

在R语言中实现google-motion-charts

本例希望比较20国集团过去若干年的发展轨迹,用谷歌提供的动态视图API在R中进行绘图。我们从世界银行数据库中选取三个变量,分别反映GDP,CO2排放和期望寿命在2001到2007年之间变化。

首先安装必要的程序包,然后用WDI命令从世界银行数据库中加载数据。
install.packages("googleVis")
library(googleVis)
library(WDI)
DF <- WDI(country=c("CN","RU","BR","ZA","IN",'DE','AU','CA','FR','IT','JP','MX','GB','US','ID','AR','KR','SA','TR'), indicator=c("NY.GDP.MKTP.CD", 'SP.DYN.LE00.IN', 'EN.ATM.CO2E.KT'), start=2000, end=2010
M <- gvisMotionChart(DF, idvar="country", timevar="year")

星期一, 七月 18, 2011

R语言中进行分位数回归

分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位、十分位、百分位等)来得到被解释变量的条件分布的相应的分位数方程。与传统的OLS只得到均值方程相比,它可以更详细地描述变量的统计分布。

但是在实际的经济生活中,传统的线性回归模型的假设常常不被满足,例如数据出现尖峰或厚尾的分布、存在显著的异方差等情况,这时的最小二乘法估计将不再具有上述优良性且稳健性非常差。最小二乘回归假定自变量X只能影响因变量的条件分布的位置,但不能影响其分布的刻度或形状的任何其他方面。

为了弥补普通最小二乘法在回归分析中的缺陷,Koenker和Bassett于1978年提出了分位数回归(Quantile Regression)的思想。它依据因变量的条件分位数对自变量X进行回归,这样得到了所有分位数下的回归模型。因此分位数回归相比普通最小二乘回归只能描述自变量X对于因变量y局部变化的影响而言,更能精确地描述自变量X对于因变量y的变化范围以及条件分布形状的影响。分位数回归能够捕捉分布的尾部特征,当自变量对不同部分的因变量的分布产生不同的影响时.例如出现左偏或右偏的情况时。它能更加全面的刻画分布的特征,从而得到全面的分析,而且其分位数回归系数估计比OLS回归系数估计更稳健。

星期三, 七月 13, 2011

在R语言中进行面板数据分析

面板数据(Panel Data)是截面数据与时间序列数据综合起来的一种数据类型。它有时间序列和截面两个维度,当这类数据按两个维度排列时,是排在一个平面上,与只有一个维度的数据排在一条线上有着明显的不同,整个表格像是一个面板,所以把panel data译作“面板数据”。

面板数据模型的选择通常有三种形式:

第一种是混合估计模型(Pooled Regression Model)。如果从时间上看,不同个体之间不存在显著性差异;从截面上看,不同截面之间也不存在显著性差异,那么就可以直接把面板数据混合在一起用普通最小二乘法(OLS)估计参数。

R语言中实现可行广义最小二乘(FGLS)回归

线性回归中经常会遇到异方差的问题。如果干扰项的方差与自变量之间存在某种关系,那么在这种前提下,一种补救方法就是利用加权最小二乘(WLS)。

首先利用OSL对模型进行回归,得到模型残差,以残差的平方来代替干扰项的方差。
然后,将残差的平方的对数做因变量,将自变量的对数做自变量,进行第二次回归,得到的系数即为自变量的幂h。最后,构造权重(1/x^(h/2)),手动操作时,需要在原模型两边分别除以权重,构造新的方程进行回归。但在R语言中进行回归时,可以直接利用weight参数,将weight=1/x^h 即可。

星期四, 七月 07, 2011

使用R语言处理结构方程模型

在回归问题中,我们有时候需要同时估计多个相互依赖的方程,这种就称为联立方程组。联立方程组在减化为一个方程后称为约简型方程。在这种情况下不能使用普通最小二乘来估计方程系数,因为有的自变量与干扰项存在相关,由此会造成估计量的有偏和不一致。这种自变量称为问题变量。

解决这个问题的方法是采用工具变量方法,即找到一个变量,其特征是它与问题变量相关,而与干扰项无关。用工具变量法得到的自变量系数是一致的。与工具变量法等价的是两阶段最小二乘法,首先用最小二乘从模型的约简型方程中构造出所有问题变量的拟合值,之后,用上一步得出的拟合值来代替问题变量,再用最小二乘对结构方程直接进行回归,就可得到一致估计量。在R语言中为联立方程建模的工具包是systemfit。

下面的算例来自Michael P.Murry的现代计量经济学一书下册。研究人员想对鳕鱼市场的供给与需求建立联立方程模型。供给方程形式为:

星期三, 六月 29, 2011

R语言中的多维标度分析

多维标度(Multidimensional scaling,缩写MDS,又译“多维尺度”)也称作“相似度结构分析”(Similarity structure analysis),属于多重变量分析的方法之一,是社会学、数量心理学、市场营销等统计实证分析的常用方法。

下面的算例以一个多维数据为样本,其中指标变量有17个,样本个数为27个。

星期二, 六月 28, 2011

在R语言中使用自助法和置换检验比较两总体

通常可以使用T检验来比较两个总体均值是否相同,但其前提是总体分布为正态,或者是大样本。在小样本情况下可以使用自助法来判断统计量及其置信区间。

下面的算例来自于《A Handbook of Statistical Analyses Using R》,数据中两组样本分别来自两组学生对某个物体尺寸的估计,一组使用公制,另一组使用英制,问题是这两组的估计值是否有明显差别。

1 自助法
自助法对单一的样本以有放回方式进行再抽样,得到自助分布,根据自助分布来推断样本统计量特征。

星期四, 六月 09, 2011

分类-回归树模型(CART)在R语言中的实现

CART模型,即Classification And Regression Trees。它和一般回归分析类似,是用来对变量进行解释和预测的工具,也是数据挖掘中的一种常用算法。如果因变量是连续数据,相对应的分析称为回归树,如果因变量是分类数据,则相应的分析称为分类树。

决策树是一种倒立的树结构,它由内部节点、叶子节点和边组成。其中最上面的一个节点叫根节点。 构造一棵决策树需要一个训练集,一些例子组成,每个例子用一些属性(或特征)和一个类别标记来描述。构造决策树的目的是找出属性和类别间的关系,一旦这种关系找出,就能用它来预测将来未知类别的记录的类别。这种具有预测功能的系统叫决策树分类器。其算法的优点在于:1)可以生成可以理解的规则。2)计算量相对来说不是很大。3)可以处理多种数据类型。4)决策树可以清晰的显示哪些变量较重要。

下面以一个例子来讲解如何在R语言中建立树模型。为了预测身体的肥胖程度,可以从身体的其它指标得到线索,例如:腰围、臀围、肘宽、膝宽、年龄。

星期三, 五月 04, 2011

用R语言来进行线性规划

线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法.研究线性约束条件下线性目标函数的极值问题的数学理论和方法,英文缩写LP。它是运筹学的一个重要分支,广泛应用于军事作战、经济分析、经营管理和工程技术等方面。为合理地利用有限的人力、物力、财力等资源作出的最优决策,提供科学的依据。

下面用R语言的lpSolve扩展包来解决一个简单的线性规划问题

星期五, 四月 29, 2011

R语言中进行logistic回归

logistic回归又主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是是否胃癌,即“是”或“否”,为两分类变量,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。通过logistic回归分析,就可以大致了解到底哪些因素是胃癌的危险因素。

logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。

星期三, 四月 27, 2011

在R语言中进行地理信息绘图

数据可视化是将科学计算中产生的大量非直观的、抽象的或者不可见的数据,借助计算机图形学和图像处理等技术,以图形图像信息的形式,直观、形象地表达出来,并进行交互处理。地图是空间信息可视化的最主要和最常用的形式。

R语言中也有相关的扩展包可以使用,例如maps,sp等。下面的例子是仿照《R Graph Cookbook》一书中的例子,利用R中的sp空间分析包得到的。代码如下:

星期日, 四月 24, 2011

R语言中如何调用世界银行数据来比较金砖五国的GDP

将数据进行可视化是探索分析的首要步骤。R语言中有两大高级绘图扩展包,即是lattice与ggplot2。它们各自都有很强的绘图能力。不过只有工具是不够的,巧妇难为无米之炊,你还得有数据。World Bank Data是世界银行组织构建的一个开放数据库,其中包括了世界各国关于经济、环境、人口等信息。数据获取的一种方法是从其网站上下载数据再导入R软件,另一种是利用WDI扩展包,直接读取想要的数据。

下面我们用WDI包的WDI函数,将中国、俄罗斯、南非、印度、巴西这五国的GDP数据载入内存,选取的时间为1990-2009年,在选择国家时需使用ISO-2标准的国家代码,数据指标是世界银行的特定编码,你可以通过WDIsearch("gdp")命令来得到所有关于GDP的编码。

星期日, 四月 17, 2011

R语言教材小结(2012.08)

一、去哪里找R语言相关的资料
1.官方网站 http://cran.csdb.cn/index.html (官方文献集中地)
2.统计之都论坛
3.人大经济论坛-R子论坛 (免费资料也不少)
4.http://library.nu/ 这是网上电子书最多的地方,其中有一个R语言专门书柜。该站已经被迫关闭
5.本博客的资料收集
6.笔者在verycd上发的一个书单
7.国外著名的R语言群博 http://www.r-bloggers.com/
8.实在不行就google了

二、R语言教程推荐
(一)中文部分:
  • 《R for beginners》和《R导论》都有中文版,用其快速入门是相当不错的。西安交大出过一本R语言初学指南也还不错的。
  • 《简明参考卡片》,是居家旅行必备的东西。在R官方站可以下载得到
  • 《统计学与R笔记》,网络同好做的一个总结资料,相当的完整,不过不合适用来学习而应该作为参考查阅。
  • 《统计建模与R软件》(推荐),薛毅老师的书相当精彩,中级统计和多元都有涉及,不仅对R的各种函数命令讲解清楚,而且用基本编程方法来解决统计问题,非常有利于学习。
  • 《统计模拟及其R实现》,主要讲R在模拟方面的应用,例子一般,看电子版即可。
  • 《多元统计分析及R语言建模》,王斌会老师的书,是多元方面的R语言实现,略为简单,现在出了第二版,如何可以的话还是去读英文资料吧。
  • 《环境与生态统计-R语言的应用》,美国杜克大学钱松老师的书,统计思想讲的很透彻,内容包括了初级中级高级三个层次内容,多重模型尤其出彩。

(二)英文部分
  • 《An Introduction to R: Software for Statistical Modelling & Computing》R官方站上的免费教程,钱松老师推荐为是最好的入门讲义。
  • 《Introductory Statistics with R》,springer出版的佳作,入门推荐,整体简洁清晰,讲解常规方法比较细致一些,除经典统计内容外还涉及到了生存分析,logistic回归和非线性拟合的内容。
  • 《R in Action》入门最佳),由Quick-R站长所著,分为三个层次讲解的中级统计教程,排版精致,讲到很多较新的扩展包。统计之都团队正组织翻译出版。
  • 《The_Art_of_R_Programming》,该书只讲纯粹的R编程语法,不涉及任何统计知识,在一定程度上减轻了学习R的难度。中文版正在翻译中。
  • 《Linear Models with R》,关于经典线性模型的教材,讲解有一定深度,需要有一定的概率统计基础。《Extending the Linear Model with R 》线性模型的扩展,和上一本书是同一作者,公式较多,对广义线性模型、加性模型、非线性模型等讲解最为详细。
  • 《Applied Econometrics with R》,是Use R!系列中的一本,为计量经济学中之应用。
  • 《Exploratory multivariate analsis by Example Using R》,多元方面的书,较为简洁,例子不错。
  • 《A Handbook of Statistical Analyses Using R》(推荐),非常经典的中级统计(条件推断、荟萃分析和面板数据分析尤其出色)主要通过案例讲解,基本没有公式。《Modern Applied Statistics With S 》(推荐)另一本经典,虽然标题是讲S,但也有R的示范,这两本可谓是R教材中的倚天屠龙。
  • 《Introductory time series with R》,Use R!系列的另一本,用它来入门时间序列很不错,如果要深入一些可以看《time series analysis: with applications in R》,这本书华章出了中文版。
  • 《A first course in statistical programming with R》,关于科学计算方面的R语言教材,入门水平。如果要更进一步可以去看《Introduction to Scientific Programming and Simulation Using R》(推荐),非常棒的代码和案例。
  • 《R cookbook》,菜谱式参考书,主题清楚方便查找。另一本相关的是《R graph cookbook》,绘图方面的必备参考书,以R语言基本绘图命令为主,还涉及到headmap以及地理绘图。
  • 《Using R for Data Management, Statistical Analysis, and Graphics 》统计函数手册,容易查阅。
  • 《Data Mining with R Learning with_Case Studies》(推荐) 用例子来讲解数据挖掘,有点难度的。如果能将这几个案例全部照着做一遍应该会极有收获。还有一本关于数据挖掘的是《Data Mining with Rattle and R》,对于数据挖掘的流程讲解很好,偏向于使用R的一个扩展包rattle。《Machine Learning for Hackers》(推荐)是较近出版的机器学习教程,代码示例全面,想象力丰富,极好的学习资料。
  • 《R in Nutshell》(推荐),果壳系列图书之一,讲解全面,索引非常有用。我将它全文打印出来放在桌头参考。 统计之都团队正组织翻译出版。
  • 《The R Book》,公认的好书,极为全面,章节编排有序,由浅入深,包含内容很丰富。但此书排版不大好,另外出版时间较早,一些新的函数包没有涉及。
  • 《Data Analysis and Graphics Using R: An_Example_Based_Approach》(推荐),综合性的统计分析教程,没有很多公式,用各种案例讲解统计模型,覆盖面和the R book不相伯仲,出版时间较近,有一定难度。
  • 《Lattice Multivariate Data Visualization with R》和《ggplot2 Elegant Graphics for Data Analysis》(推荐)两本都是关于R高级绘图的教材,一个着重于lattice包,另一个着重于ggplot2包,前者学习入门较快,后者略有难度但潜力无穷,我的最爱啊。
  • 《Statistics and Data Analysis for Financial Engineering》,金融专业的必读书,覆盖面广,用简洁清晰的方式讲解了数量金融涉及到的统计知识,并有R代码示例。
R语言学习的心得:不仅要从资料中进行学习和归纳,还要去使用它,天天用就会日渐精深。另外一个,不只要学会表面的一两个命令,还要掌握其背后的理论公式及其实现过程和方法。

没有时间钻研大部头的同学可以参见本博客的系列入门文章,想下载这些书目电子版的点这里

星期四, 四月 14, 2011

用R语言来解微分方程模型

20世纪40年代,Lotka(1925)和Volterra(1926)奠定了种间竞争关系的理论基础,他们提出的种间竞争方程对现代生态学理论的发展有着重大影响。Lotka-Volterra模型由一个微分方程组来描述。下面我们就用R中的deSolve包来解这个方程组,代码如下:

#首先加载包
library(deSolve)

在R语言中进行简单的交易系统回测

从简单的概念上讲,交易系统是系统交易思维的物化。系统交易思维是一种理念,它体现为在行情判断分析中对价格运动的总体性的观察和时间上的连续性观察,表现为在决策特征中对交易对象、交易资本和交易投资者的这三大要素的全面体现。

本文仅从进出场的规则入手,将均线交易方法运用到沪市综指上进行回测以检验效果。下述代码仅供参考。

#首先加载两个必要的包
library(quantmod)
library(PerformanceAnalytics)

层次分析法在R语言中的实现

层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.Saaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。

层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。不妨用假期旅游为例:假如有3个旅游胜地A、B、C供你选择,你会根据诸如景色、费用和居住、饮食、旅途条件等一些准则去反复比较这3个候选地点.首先,你会确定这些准则在你的心目中各占多大比重,如果你经济宽绰、醉心旅游,自然分别看重景色条件,而平素俭朴或手头拮据的人则会优先考虑费用,中老年旅游者还会对居住、饮食等条件寄以较大关注。其次,你会就每一个准则将3个地点进行对比,譬如A景色最好,B次之;B费用最低,C次之;C居住等条件较好等等。最后,你要将这两个层次的比较判断进行综合,在A、B、C中确定哪个作为最佳地点。

星期五, 三月 04, 2011

R语言的网上资源

总结一下网上可以得到的R语言资源

http://www.ats.ucla.edu/stat/r/ ( University of California的R语言资源收集)
http://www.statmethods.net/index.html (R语言博客一枚)
http://en.wikibooks.org/wiki/R_Programming/ (wiki资料库一枚)
http://jeromyanglim.blogspot.com/2010/05/videos-on-data-analysis-with-r.html (网上的视频教学收集)
http://www.r-project.org/ (R 的官方网站)
http://cran.r-project.org/manuals.html (R 官方文档集合)
http://www.bioconductor.org/ (R 在生物学里面的应用, 主要是芯片数据)
http://www.biosino.org/R/R-doc/ (R的一些中文文档)
http://cran.r-project.org/doc/Rnews/ (R 的官方杂志. 里面有一些具体问题的 R 例子)
http://wiki.r-project.org/rwiki/doku.php (R 的官方Wiki. 目前还不够完善)
http://addictedtor.free.fr/graphiques/ (一个不错R绘图的例子网站)
http://zoonek2.free.fr/UNIX/48_R/all.html (statistics with R, 在统计学方面应用最全的一个文档)
http://www.math.csi.cuny.edu/Statistics/R/simpleR/index.html (simpleR 的官方网站)
http://statcomp.ats.ucla.edu/R/ (UCLA 的 R 资源列表)
http://www.r-bloggers.com (资料相当丰富的R语言博客)
http://sites.google.com/site/rprojectnotes/ R学习笔记