前言
R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX,Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R还有以下特点:
1.R是自由软件。这意味着它是完全免费,开放源代码的。可以在它的网站及其镜像中下载任何有关的安装程序、源代码、程序包及其源代码、文档资料。标准的安装文件身自身就带有许多模块和内嵌统计函数,安装好后可以直接实现许多常用的统计功能。
2.R是一种可编程的语言。作为一个开放的统计编程环境,语法通俗易懂,很容易学会和掌握语言的语法。而且学会之后,我们可以编制自己的函数来扩展现有的语言。这也就是为什么它的更新速度比一般统计软件,如,SPSS,SAS等快得多。大多数最新的统计方法和技术都可以在R中直接得到。 [1]
3. 所有R的函数和数据集是保存在程序包里面的。只有当一个包被载入时,它的内容才可以被访问。一些常用、基本的程序包已经被收入了标准安装文件中,随着新的统计分析方法的出现,标准安装文件中所包含的程序包也随着版本的更新而不断变化。在另外版安装文件中,已经包含的程序包有:base一R的基础模块、mle一极大似然估计模块、ts一时间序列分析模块、mva一多元统计分析模块、survival一生存分析模块等等.
4.R具有很强的互动性。除了图形输出是在另外的窗口处,它的输入输出窗口都是在同一个窗口进行的,输入语法中如果出现错误会马上在窗口口中得到提示,对以前输入过的命令有记忆功能,可以随时再现、编辑修改以满足用户的需要。输出的图形可以直接保存为JPG,BMP,PNG等图片格式,还可以直接保存为PDF文件。另外,和其他编程语言和数据库之间有很好的接口。
5.如果加入R的帮助邮件列表一,每天都可能会收到几十份关于R的邮件资讯。可以和全球一流的统计计算方面的专家讨论各种问题,可以说是全世界最大、最前沿的统计学家思维的聚集地.
数据处理
数据(Data)是对事实、概念或指令的一种表达形式,可由人工或自动化装置进行处理。数据经过解释并赋予一定的意义之后,便成为信息。数据处理(data processing)是对数据的采集、存储、检索、加工、变换和传输。数据处理的基本目的是从大量的、可能是杂乱无章的、难以理解的数据中抽取并推导出对于某些特定的人们来说是有价值、有意义的数据。数据处理是系统工程和自动控制的基本环节。数据处理贯穿于社会生产和社会生活的各个领域。数据处理技术的发展及其应用的广度和深度,极大地影响了人类社会发展的进程。
数据挖掘
数据挖掘是人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,作出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,作出正确的决策。知识发现过程由以下三个阶段组成:①数据准备;②数据挖掘;③结果表达和解释。数据挖掘可以与用户或知识库交互。
数据挖掘是通过分析每个数据,从大量数据中寻找其规律的技术,主要有数据准备、规律寻找和规律表示三个步骤。数据准备是从相关的数据源中选取所需的数据并整合成用于数据挖掘的数据集;规律寻找是用某种方法将数据集所含的规律找出来;规律表示是尽可能以用户可理解的方式(如可视化)将找出的规律表示出来。数据挖掘的任务有关联分析、聚类分析、分类分析、异常分析、特异群组分析和演变分析等。
在获得数据集后首先观察数据,数据中总共61个数据,但在部分样本的部分属性存在空值,需要对这些值进行分析和处理,能否直接去除,是否会影响对于该数据集分析结果。
导入VIM 和 mice包
library(VIM)
library(mice)
data(sleep,package = “VIM”)
md.pattern(sleep)
获得了包含缺失值的一个矩阵
表中1和0显示了缺失值模式,第一列表示各缺失值模式的实例个数,最后一列表示各模式中有缺失值的变量的个数。此处可以看到,有42个实例没有缺失值,仅2个实例缺失了Span。数据集包含了总共 38个缺失值。最后一行给出了每个变量中缺失值的数目。
aggr(sleep,prop=False,number=TRUE)
Marginplot(sleep[c(“Sleep”,”Dream”)],pch=c(20),col=c(“darkgray”,”red”,”blue”))
在图中,可以观察到数据的整体分布比较散,且存在数据间跨度较大的问题,在本次分析中,选择直接去除空值对研究结果不造成影响
sleep<-na.exclude(sleep)
获得干净的sleep数据集
本次选用的数据集为哺乳动物睡眠数据sleep,其中包含43个有效数据,每个数据共10个属性,说明如下:
第一列:BodyWgt 体重
第二列:BrainWgt 脑重
第三列:NonD 不睡觉时间
第四列:Dream 做梦时间
第五列:Sleep 睡眠时长
第六列:Span 寿命
第七列:Gest 妊娠期
第八列:Pred 物种被捕食的程度
第九列:Exp 睡眠时暴露的程度
第十列:Danger 面临的总危险程度
在本次实验中,所选用的实验环境为RStudio,首先我们使用Sleep来查看sleep中所含有的数据集,可以观察到,该数据集中有许多对象的数值为NA,此时我们需要对这些数据进行处理,以免空白值会对研究结果产生影响。在本次研究中,第一步已对空白值进行了处理。
在对sleep数据集进行数据处理与清洗后,将开始使用数据集进行决策树的构建。在将处理后的数据分成训练集和测试集,其中70%作为数据的训练集吗,剩余30%作为测试集,代码如下:
n<-0.3*nrow(sleep)
test.index<-sample(0:nrow(sleep),n)
sleep.train<-sleep[-test.index,]
sleep.test<-sleep[test.index,]
dim(sleep)
使用dim(sleep)查看此时sleep数据集包含的维度大小
从中可以看到有42条有效数据,10个属性值
同时已经将这些有效数据分成了大约7:3的训练集和测试集
在之后导入C50包对这些数据进行决策树的构建
install.packages("C50")
library(C50)
sleep.tree<-C5.0(as.factor(Pred)~.,data=sleep.train)
sleep.tree
summary(sleep.tree)
plot(sleep.tree)
在sleep.train中选取Pred(被捕食程度)作为研究对象,进行模型构建
对sleep.tree进行分类上的总结与输出
可以观察到,在训练集的31个数据中,只存在3个数据有错误,分类的正确率达到了90.3%。
在决策树中可以分析出:
在不同物种所对应的10种属性中,对Pred进行分类,从Danger属性开始,当物种的危险总程度高于2时,以系数为4作为新的分界节点,在本数据集种,即危险总程度为5,有4条数据,该类物种被捕食的程度是极高的。当危险总程度小于等于4时,通过对物种的不做梦时长进行了划分,在不做梦时长小于等于6.3h时,大约3h左右时,占据100%(4条数据)。在不做梦时长大于6.3时,又对物种的脑重进行划分,大于50.4时该物种被捕食程度为80%,小于等于50.4时又可分为三类,被捕食程度分别为60%、80%、100%,其中三者的占比分别为20%、20%、60%。
当物种的危险总程度小于等于2且大于1时,物种被捕食程度为40%、60%,占比分别为90%、10%。当危险总程度小于等于1时,又对Span(寿命)属性进行分类,当物种寿命高于7.6年时,该类物种被捕食的程度仅为20%,当物种寿命小于等于7.6年时,物种被捕食程度为40%。从决策树种可以看出,对于一类物种被捕食的程度,影响最大的是危险总程度,在根据危险程度,不睡眠程度对物种之间进行分类,来找寻对该类物种被捕食的影响程度。
1.选取数据
在对数据集sleep进行聚类分析时,不需要使用过多的属性,在之前的决策树中我们可以选取几个较为重要的属性进行分析,在本次中我们选取
Dream,Sleep,Span,Gest,Pred,Exp,Danger
这几个属性进行聚类分析
数据集命名为sleep2
sleep2<-sleep[,4:10]
sleep.kmeans<-kmeans(sleep2,20) //选取20个数据进行分析
sleep.kmeans
plot(sleep2$Danger,sleep2$NonD,col=sleep.kmeans$cluster,pch="*")
points(sleep.kmeans$centers,pch="X",cex=1.5,col=4)
可以看出,通过对Danger程度和NonD程度的分析后,大多数聚类在NonD:4左右,而危险程度分布的还是比较散的。
在K-Mediods分析中,将使用pam、clara、pamk三种分析方式对数据集进行聚类分析
1.pam聚类
在K-Mediods分析中,要使用到cluster库,将其导入
install.packages("cluster")
library(cluster)
观察数据时,只选用后三项
Pred 物种被捕食程度
Exp 睡眠时暴露程度
Danger 面临的危险总程度
sleep3<-sleep[,8:10]
sleep3.pam<-pam(sleep3,20)
table(sleep$Danger,sleep3.pam$clustering)
plot(sleep3.pam)
在经过聚类pam处理后,发现大致分成了五类,但由于物种的多样性,以及样本的差异过大,选择减小数据类型以及数量再进行分析。
sleep4<-sleep[,8:9]
sleep4.clara<-clara(sleep4,3)
table(sleep$Danger,sleep4.clara$clustering)
layout(matrix(c(1,2),1,2))
plot(sleep4.clara)
layout(matrix(1))
在进行选取后,对Danger进行的聚类分析已较为集中,数据可视化后也更加清晰
sleep4.pamk<-pamk(sleep4)
table(sleep4.pamk$pamobject$clustering,sleep4.pamk$Danger)
layout(matrix(c(1,2),1,2))
plot(sleep4.pamk$pamobject)a
layout(matrix(1))
在选用层次聚类分析时,将每一个数据样本作为一类,规定某种度量作为样本之间距离以及类距离之间的度量,将距离最短的两个合并为一个类,重复2-3,即不断合并最近的两个类,每次减少一个类,直到所有的样本合并为一个类。
idx<-sample(1:dim(sleep)[1],40)
sleep3<-sleep[idx,-5]
sleep3<-sleep3[,1:3]
sleep3
hc<-hclust(dist(sleep3),method = "ave")
plot(hc,hang=-1,labels=sleep$Danger[idx])
rect.hclust(hc,k=3)
groups<-cutree(hc,k=3)
在本次研究中,是对数据集哺乳动物睡眠数据sleep进行的研究,首先是对数据进行处理,对于空值的处理能否舍弃,以及对研究结果是否产生影响。其次是处理完数据后的模型建立,数据挖掘中使用到的决策树,是一种很好的分类工具,可以将复杂多样化的数据根据样本的属性,来进行分类研究,可以直观的看出哪一种属性对于哺乳动物的生存率影响最大。在分析完属性后,又继续进行聚类分析,通过不同的聚类算法,来对数据集的情况进行聚类处理和分析。
参考文献
[1] 李仁钟等编著,零基础学 R 语言数据分析,清华大学出版社,2018.10
[2] Ronald K.Pearson, Exploratory Data Analysis Using R,CRC Press
[3] Tilman M. Davies , R语言之书:编程与统计
[4] Winston Chang,R数据可视化手册