星期日, 七月 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的现代计量经济学一书下册。研究人员想对鳕鱼市场的供给与需求建立联立方程模型。供给方程形式为: