《R语言入门要点.pdf》由会员分享,可在线阅读,更多相关《R语言入门要点.pdf(12页珍藏版)》请在三一文库上搜索。
1、Im a DMer & MLer & NLPer & IRer 博文有原创,有转载。均为分享学习之用。P.S. 部分转载可能未注明出处。若有冒昧,请与 我联系 :(ILoveDataMining A T gmail DOT com) R 语言基础入门 R 语言基础入门之一:引言 1 什么是 R 语言 R 语言是一个开源的数据分析环境,起初是由数位统计学家建立起来,以更好的进行统计计 算和绘图, 这篇 wiki 中包含了一些基本情况的介绍。由于 R 可以通过安装扩展包 (Packages) 而得到增强, 所以其功能已经远远不限于统计分析,如果感兴趣的话可以到官方网站了解关 于其功能的更多信息。
2、至于 R 语言名称的由来则是根据两位主要作者的首字母(Robert Gentleman and Ross Ihaka) , 但过于简短的关键词也造成在搜索引擎中很不容易找到相关的资料。不过这个专门的搜索网 站可以帮到你。 2 为什么要学习R 语言 可能你想说,“我已经学会了spss/sas/stata. ,为什么还要去学习R 呢?” 如下几方面可能会 吸引到你: R 是免费开源软件:现在很多学术期刊都对分析软件有版权要求,而免费的分析工具可以使 你在这方面不会有什么担心。另一方面, 如果学术界出现一种新的数据分析方法,那么要过 很长一段时间才会出现在商业软件中。但开源软件的好处就在于,很快就会
3、有人将这种方法 编写成扩展包,或者你自己就可以做这件工作。 命令行工作方式:许多人喜欢类似SPSS菜单式的操作, 这对于初学者来说很方便入门,但对 于数据分析来说,命令行操作会更加的灵活,更容易进行编程和自动化处理。而且命令行操 作会更容易耍酷,不是嘛, 一般人看到你在狂敲一推代码后得到一个分析结果,对你投来的 目光是会不一样的。 小巧而精悍 :R 语言的安装包更小,大约不到40M,相比其它几个大家伙它算是非常小巧精 悍了。目前R 语言非常受到专业人士欢迎,根据对数据挖掘大赛胜出者的调查可以发现, 他们用的工具基本上都是R 语言。此外,从最近几次R 语言大会上可以了解到,咨询业、 金融业、医药
4、业都在大量的使用R 语言,包括google/facebook 的大公司都在用它。因此, 学习 R 语言对你的职业发展一定是有帮助的。 3 R 语言的下载和GUI 界面 R 语言安装包可以在官方网站下载,windows 版可直接点击这个连接 在 ubuntu 下面安装R 则更容易,在终端里头运行如下命令即可 sudo apt-get update sudo apt-get install r-base 此外,学习R 语言时强烈推荐安装Rstudio 做为 R 的图形界面,关于Rstudio 之前的博文有 过简单介绍,点这里可能转到它的官方网站。 4 R 语言的学习方法 学习 R 并不是一件非常轻
5、松的事情,初学者需要记住的就是: 亲手键入代码并理解其意义 在笔记里记下一些重点或心得(个人推荐Evernote) 坚持练习,对手边的数据进行应用分析 理解背景知识,细节很重要。 5 哪里可以得到参考资料 1.官方网站http:/ (官方文献集中地) 2.统计之都论坛 3.人大经济论坛R 子论坛(免费资料也不少) 4.http:/library.nu/ 这是网上电子书最多的地方,其中有一个R 语言专门书柜(也就是一个 shelves) 5.关于 R 语言的教材小结 6.笔者在 verycd 上发的一个书单 7.一个国外著名的R 语言群博http:/www.r- 8.展示 R 语言的各类绘图ht
6、tp:/addictedtor.free.fr/graphiques/ 本人博客里也有一些关于R 语言的资料: (需 FQ) 如果有一些简单的入门问题,也可以在推特上follow me twitter: xccds 6 本系列博文的目的 本系列入门的目的是为初学者提供最简洁清晰的资料,以迅速入门。 所针对的读者人群是那 些正在大学里学习初级统计学的同学。本系列计划包括内容有:基本命令,数据操作; 描述 统计和绘图;重要的R 语言函数计算;统计推断和估计;非参数统计方法;方差分析;线 性回归和一般线性模型。 R 语言基础入门之二:数据导入和描述统计 1 数据导入 对初学者来讲, 面对一片空白的命
7、令行窗口,第一道真正的难关也许就是数据的导入。数据 导入有很多途径,例如从网页抓取、公共数据源获得、文本文件导入。为了快速入门,建议 初学者采取R 语言协同Excel 电子表格的方法。也就是先用较为熟悉的Excel 读取和整理你 要处理的数据,然后“粘贴”到R 中。 例如我们先从这个地址下载iris.csv 演示数据,在Excel 中打开,框选所有的样本然后“复 制” 。在 R 语言中输入如下命令: data=read.table(clipboard,T) 这的里 read.table 是 R 读取外部数据的常用命令,T 表示第一行是表头信息,整个数据存在 名为 data的变量中。另一种更方便
8、的导入方法是利用Rstudio 的功能,在workspace 菜单选 择“ import dataset”也是一样的。 2 Dataframe 操作 在数据导入R 语言后,会以数据框(dataframe)的形式储存。 dataframe 是一种 R 的数据格式, 可以将它想象成类似统计表格,每一行都代表一个样本点,而每一列则代表了样本的不同属 性或特征。初学者需要掌握的基本操作方法就是dataframe 的编辑、抽取和运算。 尽管建议初学者在Excel 中就把数据处理好,但有时候还是需要在R 中对数据进行编辑,下 面的命令可以让你有机会修改数据并存入到新的变量newdata 中: newdat
9、a=edit(data) 另一种情况就是我们可能只关注数据的一部分,例如从原数据中抽取第20 到 30 号样本的 Sepal.Width 变量数据, 因为 Sepal.Width 变量是第2 个变量, 所以此时键入下面的命令即可: newdata=data20:30,2 如果需要抽取所有数据的Sepal.Width 变量,那么下面两个命令是等价的: newdata=data,2 newdata=data$Sepal.Width 第三种情况是需要对数据进行一些运算,例如需要将所有样本的Sepal.Width 变量都放大10 倍,我们先将原数据进行一个复制,再用$符号来提取运算对象即可: newd
10、ata=data newdata$Sepal.Width=newdata$Sepal.Width*10 3 描述统计 描述统计是一种从大量数据中压缩提取信息的工具,最常用的就是summary 命令,运行 summary(data)得到结果如下:对于数值变量计算了五个分位点和均值,对于分类变量则计 算了频数。 也可以单独计算Sepal.Width 变量的平均值和标准差 mean(data$Sepal.Width) sd(data$Sepal.Width) 计算分类数据Species变量的频数表和条形图 table(data$Species) barplot(table(data$Species)
11、 对于一元数值数据,绘制直方图和箱线图观察其分布是常用的方法: hist(data$Sepal.Width) boxplot(data$Sepal.Width) 对于二元数值数据,则可以通过散点图来观察规律 plot(data$Sepal.Width,Sepal.Length) 如果需要保存绘图结果,建议使用Rstudio 中的 plot 菜单命令,选择save plot as image R 语言基础入门之三:常用统计函数运算 在 R 语言中经常会用到函数,例如上节中讲到的求样本统计量就需要均值函数(mean)和标准 差函数 (sd)。对于二元数值数据还用到协方差(cov),对于二元分类数据
12、则可以用交叉联列表 函数 (table)。下文讲述在初级统计学中最常用到的三类函数。 一、数据汇总函数 我们还是以R 中自带的iris 数据为例,输入 head(iris)你可以获得数据的前6 个样本及对应的 5 个变量。 取出最后两列数据作为讲解的对象:Species表示花的种类, Petal.Width 表示花瓣 宽度 data=iris,c(4,5) 下一步我们想计算不同种类花瓣的平均宽度,可以使用tapply 函数, 在计算前先用attach 命 令将 data这个数据框解包以方便直接操作其变量,而不需再用$符号。 attach(data) tapply(X=Petal.Width,I
13、NDEX=Species,FUN=mean) 结果如下 setosa versicolor virginica 0.246 1.326 2.026 和 tapply 类似的还有sapply 函数,在进一步讲解前初学者还需搞清楚两种数据表现方式, 即 stack(堆叠数据)和unstack(非堆叠数据) ,上面的data 就是一个堆叠数据,每一行表 示一个样本。而非堆叠数据可以根据unstack 函数转换而来 data.unstack=unstack(data) head(data.unstack) 你应该明白这二者之间的区别了,如果要对非堆叠数据计算不同种类花瓣的平均宽度,可以 利用如下函数。
14、 sapply(data.unstack,FUN=mean) 结果是一样的,也就是说tapply 对应于 stack 数据,而sapply 对应于 unstack 数据 二、概率计算函数 如果给定一种概率分布,通常会有四类计算问题: 计算其概率密度density ( d) 计算其概率分布probability (p) 计算其百分位数quantile (q) 随机数模拟random ( r) 记住上面四类计算对应的英文首字母,再对照下表就很容易计算各种概率问题了。 举例来讲,我们求标准正态分布曲线下小于1 的面积p(x1),正态分布是norm,而分布函 数是 p,那么使用pnorm(1)就得出了
15、结果0.84;若计算扔10 次硬币实验中有3 次正面向上 的概率,类似的dbinom(x=3,size=10,prob=0.5) 得出 0.11 三、抽样函数 我们想从1 到 10 中随机抽取5 个数字,那么这样来做:首先产生一个序列,然后用sample 函数进行无放回抽取。 x=1:10 sample(x,size=5) 有放回抽取则是 sample(x,size=5,replace=T) sample 函数在建模中经常用来对样本数据进行随机的划分,一部分作为训练数据,另一部 分作为检验数据。 R 语言基础入门之四:常用的统计推断 通常一个研究项目能够获得的数据是有限的,以有限的样本特征来推
16、断总体特征就称为统计 推断。 推断又可细分为区间估计和假设检验,二者虽有区别,但却是一枚硬币的两面,之间 有着紧密的关联。 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%置信度下的区间上界 也可以直接利用R
17、 语言内置函数t.test t.test(x,conf.level=0.95) 从如下结果可得95%置信区间为( 9.56,12.36) One Sample t-test data: x t = 15.7301, df = 49, p-value 2.2e-16 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: 9.563346 12.364729 sample estimates: mean of x 10.96404 2 对总体均值进行假设检验 还是以上面的X 数据作为对
18、象,来检验总体均值是否为10 t.test(x,mu=10,alternative=two.sided) #这里的原假设是总体均值(mu)为 10,使用双侧检 验,得到 P 值为 0.17,可见 P 值不够小,不能够拒绝原假设。 T 检验是极为常用的检验方法,除了单样本推断之外,t.test 命令还可以实现两样本推断和配 对样本推断。如果要对总体比率或总体方差进行推断,可以使用prop.test 和 var.test。 3 正态分布检验 T 检验的前提条件是总体服从正态分布,因此我们有必要先检验正态性。而且在评价回归模 型时,对残差也需要检验正态性。检验正态性的函数是shapiro.test
19、shapiro.test(x) 结果所下: Shapiro-Wilk normality test data: x W = 0.9863, p-value = 0.8265 该检验的原假设是服从正态分布,由P值为 0.82 可判断不能拒绝总体服从正态的假设 4 非参数检验 如果总体不服从正态分布,那么T 检验就不再适用,此时我们可以利用非参数方法推断中 位数。 wilcoxon.test 函数可实现符号秩检验。 wilcox.test(x,conf.int=T) #指定 conf.int 让函数返回中位数的置信区间 wilcox.test(x,mu=1 )#指定 mu 让函数返回中位数为10
20、的检验结果 5 独立性检验(联列表检验) 卡方分布有一个重要应用就是根据样本数据来检验两个分类变量的独立性,我们以CO2 数 据为例来说明chisq.test 函数的使用,help(CO2)可以了解更多信息。 data(CO2) #读入内置的数据包,其中Type 和 Treatmen 是其中两个分类变量。 chisq.test(table(CO2$Type,CO2$Treatment) #使用卡方检验函数来检验这两个因子之间是 否独立 结果显示P 值为0.82,因此可以认为两因子之间独立。在样本较小的情况下,还可以使用 fisher 精确检验,对应的函数是fisher.test。 R 语言基础
21、入门之五:简单线性回归 线性回归可能是数据分析中最为常用的工具了,如果你认为手上的数据存在着线性定量关 系,不妨先画个散点图观察一下,然后用线性回归加以分析。下面简单介绍一下如何在R 中进行线性回归。 1 回归建模 我们利用R 语言中内置的trees 数据,其中包含了Volume(体积)、Girth(树围)、 Height (树高)这三个变量,我们希望以体积为因变量,树围为自变量进行线性回归。 plot(VolumeGirth,data=trees,pch=16,col=red) model=lm(VolumeGirth,data=trees) abline(model,lty=2) summ
22、ary(model) 首先绘制了两变量的散点图,然后用 lm 函数建立线性回归模型,并将回归直线加在原图上, 最后用 summary 将模型结果进行了展示,从变量P 值和 F 统计量可得回归模型是显著的。 但截距项不应该为负数,所以也可以用下面方法将截距强制为0。 model2=lm(VolumeGirth-1,data=trees) 2 模型诊断 在模型建立后会利用各种方式来检验模型的正确性,对残差进行分析是常见的方法,下面我 们来生成四种用于模型诊断的图形。 par(mfrow=c(2,2) plot(model) par(mfrow=c(1,1) 这里左上图是残差对拟合值作图,整体呈现出
23、一种先下降后下升的模式,显示残差中可能还 存在未提炼出来的影响因素。右上图残差QQ 图,用以观察残差是否符合正态分布。左下图 是标准化残差对拟合值,用于判断模型残差是否等方差。右下图是标准化残差对杠杆值,虚 线表示的cooks 距离等高线。我们发现31 号样本有较大的影响。 3 变量变换 因为 31 号样本有着高影响力,为了降低其影响,一种方法就是将变量进行开方变换来改善 回归结果,从残差标准误到残差图,各项观察都说明变换是有效的。 plot(sqrt(Volume)Girth,data=trees,pch=16,col=red) model2=lm(sqrt(Volume)Girth,dat
24、a=trees) abline(model2,lty=2) summary(model2) 4 模型预测 下面根据上述模型计算预测值以及置信区间,predict 函数可以获得模型的预测值,加入参数 可以得到预测区间 plot(sqrt(Volume)Girth,data=trees,pch=16,col=red) model2=lm(sqrt(Volume)Girth,data=trees) data.pre=data.frame(predict(model2,interval=prediction) lines(data.pre$lwrtrees$Girth,col=blue,lty=2)
25、lines(data.pre$uprtrees$Girth,col=blue,lty=2) 我们还可以将树围和树高都加入到模型中去,进行多元回归。 如果要考虑的变量很多,可以 用 step 函数进行变量筛选,它是以AIC 作为评价指标来判断一个变量是否应该加入模型, 建议使用这种自动判断函数时要谨慎。对于嵌套模型, 还可以使用anova 建立方差分析表来 比较模型。对于变量变换的形式,则可以使用MASS 扩展包中的boxcox 函数来进行COX 变换。 R 语言基础入门之六(完): Logistic 回归 让我们用 logistic 回归来结束本系列的内容吧,本文用例来自于John Maind
26、onald 所著的 Data Analysis and Graphics Using R 一书,其中所用的数据集是anesthetic,数据集来自于一组医 学数据,其中变量conc 表示麻醉剂的用量,move 则表示手术病人是否有所移动,而我们用 nomove 做为因变量,因为研究的重点在于conc 的增加是否会使nomove 的概率增加。 首先载入数据集并读取部分文件,为了观察两个变量之间关系,我们可以利cdplot 函数来绘 制条件密度图 . library(DAAG) head(anesthetic) cdplot(factor(nomove)conc,data=anesthetic,m
27、ain= 条件密度图,ylab= 病人移动,xlab=麻醉剂 量) 从图中可见,随着麻醉剂量加大,手术病人倾向于静止。下面利用logistic 回归进行建模, 得到 intercept 和 conc 的系数为 -6.47 和 5.57,由此可见麻醉剂量超过1.16(6.47/5.57)时,病 人静止概率超过50%。 anes1=glm(nomoveconc,family=binomial(link=logit),data=anesthetic) summary(anes1) 上面的方法是使用原始的0-1 数据进行建模 ,即每一行数据均表示一个个体,另一种是使用 汇总数据进行建模,先将原始数据按
28、下面步骤进行汇总 anestot=aggregate(anesthetic,c(move,nomove),by=list(conc=anesthetic$conc),FUN=sum) anestot$conc=as.numeric(as.character(anestot$conc) anestot$total=apply(anestot,c(move,nomove),1,sum) anestot$prop=anestot$nomove/anestot$total 得到汇总数据anestot 如下所示 conc move nomove total prop 1 0.8 6 1 7 0.1428
29、571 2 1.0 4 1 5 0.2000000 3 1.2 2 4 6 0.6666667 4 1.4 2 4 6 0.6666667 5 1.6 0 4 4 1.0000000 6 2.5 0 2 2 1.0000000 对于汇总数据, 有两种方法可以得到同样的结果,一种是将两种结果的向量合并做为因变量, 如 anes2模型。另一种是将比率做为因变量,总量做为权重进行建模,如anes3模型。这两 种建模结果是一样的。 anes2=glm(cbind(nomove,move)conc,family=binomial(link=logit),data=anestot) anes3=glm(p
30、ropconc,family=binomial(link=logit),weights=total,data=anestot) 根据 logistic 模型,我们可以使用predict 函数来预测结果,下面根据上述模型来绘图 x=seq(from=0,to=3,length.out=30) y=predict(anes1,data.frame(conc=x),type=response) plot(propconc,pch=16,col=red,data=anestot,xlim=c(0.5,3),main=Logistic回归曲线图 ,ylab= 病 人静止概率 ,xlab=麻醉剂量 ) l
31、ines(yx,lty=2,col=blue) 分类 : Programming(R,SAS,MATLAB) 好文要顶关注我收藏该文 wentingtu 关注- 1 粉丝- 275 +加关注 2 0 (请您对文章做出评价) ? 上一篇: RapidMiner 数据挖掘入门 ? 下一篇: R 语言多元分析系列 posted on 2012-03-03 01:48 wentingtu 阅读 (34770) 评论 (0) 编辑收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请登录或 注册,访问网站首页。 【推荐】 50 万行 VC+ 源码 : 大型组态工控、电力仿真CAD 与 GIS 源
32、码库 【推荐】免费集成极光推送SDK ,让 APP 实现高安全、高并发的推送功能 【专享】阿里云9 折优惠码: bky758 最新 IT 新闻 : 摄影师拍摄到“鲸鱼的葬礼” 微软 Windows 业务主管:目标是苹果不是 PC 制造商 科学家解读什么是白洞?向外喷射物质和能量 传日本政府基金产业革新机构将注资挽救夏普 Lumia 已非微软主攻方向全力明年推Surface Phone ? 更多新闻 . 最新知识库文章: HTTPS 背后的加密算法 下一代云计算模式:Docker 正掀起个性化商业革命 野生程序员的故事 状态机的两种写法 状态机思路在程序设计中的应用 ? 更多知识库文章. 导航
33、博客园 首页 订阅订阅 管理 统计信息 随笔- 186 文章- 0 评论- 50 Trackbacks - 0 NEWS 昵称: wentingtu 园龄: 4 年 1 个月 粉丝: 274 关注: 1 +加关注 搜索 随笔分类 A-memo Big-Data Mining (Hadoop)(7) Book Reading Notes Business Intelligence(2) Code of My toolkit Computational Advertising(7) Data Analysis(5) Data Mining(33) Dataset, Dictionary, Corp
34、usLink(1) English(2) Experiments Financial HKU DB seminar Idea Depository Jobs Preparation Learning to Rank(1) Life(4) Love, Friendship and more Machine Learning(33) Marketing Mobile Internet(1) News/Event Detection Optimization Original(1) Paper/Slides Reading Notes(4) Programming(Python,Java)(14)
35、Programming(R,SAS,MATLAB)(41) Project Recommendation System(30) Semantic web Social network(1) StuDY(15) Text Mining & NLP(15) Working Diary 随笔档案 2015 年 6 月 (1) 2014 年 12 月 (2) 2014 年 6 月 (2) 2014 年 5 月 (1) 2014 年 3 月 (2) 2014 年 1 月 (1) 2013 年 7 月 (1) 2013 年 6 月 (1) 2013 年 5 月 (1) 2013 年 2 月 (1) 201
36、3 年 1 月 (5) 2012 年 12 月 (3) 2012 年 11 月 (2) 2012 年 9 月 (2) 2012 年 7 月 (1) 2012 年 6 月 (11) 2012 年 5 月 (21) 2012 年 4 月 (19) 2012 年 3 月 (33) 2012 年 2 月 (7) 2012 年 1 月 (5) 2011 年 12 月 (61) 2011 年 10 月 (1) 2011 年 9 月 (2) ABOUT ME Homepage Micro-Blog (Sina) BLOG A Link Collection STUDY Course 朝花夕拾 最新评论 1.
37、 Re:BP 神经网络模型与学习算法 gystld 请问你有正版的PEW 软件吗。急需,谢谢!. -叶孤傲 2. Re:机器学习算法复习-随机森林 求大神指导! -sfqy 3. Re:BP 神经网络模型与学习算法 神经网络源码 : -cofftech 4. Re:决策树模型组合之(在线)随机森林与GBDT 不错,可是微盘分享的资源不在了呢? -DebugMyself 5. Re:Learning to Rank 入门小结+ 漫谈 部分图片不显示 -Rice1202 6. Re:BP 神经网络模型与学习算法 推荐一款最易用中文excel 神经网络软件包,有BP、RBF、PNN、 GRNN 、E
38、lman、SOM 、 LVQ 七种神经网络功能。一键操作,易用易懂。. -gystld 7. Re:BP 神经网络模型与学习算法 是漏掉了还是你写错了步骤顺序,我没看懂 -大爷就是我 8. Re:BP 神经网络模型与学习算法 第五步呢, -大爷就是我 9. Re:简单的社交网络分析(基于R) 你好,貌似没看到有附件呢,你看方便把你读取数据的代码分享下吗,多谢啦 -huijiaowan 10. Re:大数据分析之基于模型的复杂数据多维聚类分析 学习数据分析的多维数据分析理论,最好是结合一款支持数据多维分析功能的数据分析工具 进行实战, 这样效率会更高,会更容易理解, 工具的话推荐自己用过的一款支
39、持多维数据分 析的商业智能软件FineBI,非常容易上 -fan0fan1 阅读排行榜 1. BP 神经网络模型与学习算法(43753) 2. R 语言基础入门 (34770) 3. 机器学习算法复习-随机森林 (23557) 4. python 数据挖掘领域工具包(12253) 5. R 语言多元分析系列(10151) 6. Learning to Rank 入门小结+ 漫谈 (9726) 7. R 与矩阵运算总结(9412) 8. R 语言编程入门 (6094) 9. 决策树模型组合之(在线)随机森林与GBDT(5930) 10. 推荐系统之协同过滤概述(转载 )(5881) 推荐排行榜 1. 非常好的协同过滤入门文章(6) 2. BP 神经网络模型与学习算法(5) 3. 推荐系统常用数据集(4) 4. ICML 2012 推荐系统部分文章小结及下载(3) 5. python 数据挖掘领域工具包(2) 6. Learning to Rank 入门小结+ 漫谈 (2) 7. R 语言基础入门 (2) 8. 总结一下网上可以得到的R 语言资源 (2) 9. 转:数据挖掘领域顶级会议期刊及其分析(2) 10. 简单的社交网络分析(基于R)(2) Powered by: 博客园 Copyright ? wentingtu
链接地址:https://www.31doc.com/p-5198043.html