查看原文
其他

学习资源分享专题-数据分析与R语言

冰糖 生信菜鸟团 2020-02-03

数据分析概念导入R基础及数据可视化统计推断、相关及回归分类聚类主成分分析因子分析

本周会有很多干货推荐,而今天的主题是”数据分析与R语言“课程,这个课程有课件和视频,可于公众号聊天窗口回复”数据分析与R语言“免费获取。

本文会对本课程的系列课件做一个简单的框架,并对其中基础的R入门知识做一个简单的概况总结。

系列课件共有12个,本文会将课件的内容重新整合。

数据分析概念导入

内容见于课件1前半部分

数据分析就是使用统计方法,有目的地对收集到的数据进行分析处理,并且解读分析结果。

数据分析有一个多层模型,代表着数据分析的全部流程:

Data sources->Data warehouses->Data exploration->Data mining->Data presentations->Marking decisions

Data sources就是源数据,也就是位于文章、信息提供者、功能数据库上的数据。

Data warehouse:数据仓储,经过初步整理存储的结构化信息。

Data exploration、Data Mining及Data presentations分别是数据探索、挖掘及可视化,也就是真正在R完成的工作。

Marking decisions:根据数据得出最终的判断。

R基础及数据可视化

内容见于课件1后半部分及课件2

R语言是一种尤其擅长统计分析和可视化的一种编程语言,免费开源,功能强大,且有大量的功能“包”可以直接使用。

R的基本数据结构

R的基本数据结构有向量、因子、数组、矩阵、数据框及列表。

  • 向量

    创建:使用函数c()创建,如x1<-c(1,2,3,4,5),即可创建一个向量。

    重要的创建向量的函数seq(), rep()及letters():

    seq函数可以产生一个等差数列(默认公差1),例如seq(1,5)代表1,2,3,4,5。还可以指定等差数列的公差或长度,如seq(1,100,by=2)代表1-100之间,公差为2的等差数列1,3,5...,99,而seq(1:100,length=1000),则会生成一个1-100之间含有1000个元素的等差数列。

    rep函数可以产生特定长度的相同元素的向量,例如rep(1,5)代表1,1,1,1,1,共有5个元素,每个元素均是1。

    letters是一个内建的字母列表向量,例如如果需要字母表中前十个字母,只需要letters[1:10]即可。

    基本统计函数:mean(),sum(),min(),max(),var(),sd(),prod(),如图:

    找索引函数which():寻找满足特定条件的元素的位置。

    倒序和排序函数:rev(), sort()

    寻求帮助:在R中对任何函数不清楚,都可以把它传给help函数,如help("c")、help("seq")、help("rep")即可打开帮助文档(双引号可不加)。

  • 矩阵

    创建:使用matrix()函数创建,如matrix(c(1:12),nrow=3,ncol=4),即可创建一个3行4列的矩阵,其内的元素为按列依次排列的1,2,3...12。

    矩阵转置及加减运算:t()及‘+’与‘-’运算符。

    矩阵相乘及对角矩阵函数diag():两个矩阵的乘法使用%*%运算符,diag()有三个功能,传入一个矩阵则取出它的对角线元素;传入一个向量,则生成一个以这个向量为对角线的矩阵;传入一个数字,则生成一个以此数字为大小的单位矩阵。

    矩阵求逆solve()函数及矩阵特征值及特征矩阵eigen():更详细可以传入help()函数。

  • 数据框

    数据框是一种非常有用的数据公格式,它可以包含多种数据类型,矩阵只能有一种数据类型。

    创建:使用data.frame()创建,传入多个向量即可创建一个数据框,如data.frame(seq(16),rep(1,16)),即可创建一个数据框,它的第一列是1-16的自然数,第二列是16个1。

    从文件或剪切板读入数据创建数数据框:read.table()函数,如read.table("abc.txt")读取文档数据,read.table("clipboard",header=T)读取剪切板数据。

循环语句

R中的循环语句可以使用for循环或while循环:

for循环:for (i in 1:60) {xVector[i] = i*2+1},执行后,刚才创建的xVector向量就会变为3,5,7,9...121,共60个元素。

while循环:i<-1; zVector<-1; zVector[1]=3; while (zVector[i]<121) {i=i+1; zVector[i]=2*i+1},会创建同for循环同样的向量。

可视化

先创建一个模拟学生成绩的数据框,包含学生的ID及3科成绩,如图。

  • 求每位同学的平均分,每科成绩平均分,每位同学的总分,找出总分最高的同学的ID,如图。

    apply()函数可以对一个数据框的行或列使用一个函数,共有3个参数,第一个参数是数据框,本例中只取第2-4列(第一列为学生ID),第二个参数是行或列的标识,1对每行数据使用函数,2对每列数据使用函数,第三个参数代表要使用的函数。

  • 直方图、散点图、列联表及柱状图、饼图、箱线图、QQ图、折线图、密度图,结果如图。

统计推断、相关及回归

内容见于课件3、4、5、6

统计推断

正态检验:判断一组数据是否是满足正态性可以使用shapiro.test();

单样本及双样本t检验:t.test();

检验样本间的相关性的卡方检验chisq.test(),如图所示。

可以看到,由于科目x1是服从均匀分布,科目x2是服从正态分布的,因此x1的正态性检验shapiro.test的p值极显著,而科目x2的p值不显著。

t检验中,科目x1的均值在90.44,单样本“均值=80”的检验p值显著,拒绝均值相等假设。双样本t检验中,如图,双样本t检验显著,因此拒绝均值相等假设(x1均值期望是90,x2均值期望80,所以肯定是拒绝零假设)。

卡方检验有两种方法,可以直接调用chisq.test(),也可以将列联表table()结果传入summary()。卡方检验是用于判断两个变量的相关性,在本例中是代表一个学生在科目上x1和x2的成绩是否有相关性,如是否同时都是高分数、低分数,或当x1高分时x2低分等。

相关

  • 求相关系数cor(),如cor(student$x1)

  • 相关系数的假设检验cor.test(),如cor.test(student$x1)

  • 求协方差矩阵cov(),如cov(student[c(“x1","x2","x3")])

回归

回归有多种:一元线性回归、多元线性回归、广义线性模型及非线性回归等。

以下只以一元线性回归为例,

使用lm()线性拟合,如要拟合studnet数据框中x1,x2的线性关系,以x2预测x1,则可以使用stuLm <- lm(x1~x2,student),拟合后使用summary(stuLm)观察结果,anova(stuLm)可以观察拟合的方差分析。

从拟合结果来看,拟合公式为x2=0.09 * x1 + 83.27

不过呢,方差分析结果表明,这个模型总体不显著,因此没有实际意义,其中x2的系数也不显著。

  • 多元线性回归

多元线性回归也是使用lm函数,只是预测变量增多了,如使用x2和x3来联合预测x1:stuLm <- lm(x1~x2+x3,student) 。

  • 广义线性模型

广义线性模型是为了解决预测变量或响应变量是非连续变量的问题,如是与否、对与错等变量是无法直接使用线性回归拟合。这时需要将相应的非连续变量转化一个连续的变量,一般是由一个关联函数来转换的。

  • 非线性模型

非线性回归常见的包括多项式回归、对数法、指数法和幂函数法等。

网格方法

网格方法是一种有别于传统的线性或非线性回归的方法,它不考虑特定的线性或非线性模型也可以很好的处理非连续的离散数据。

网格方法具有一般性,即无论数据是怎样分布的,也不限于特定的关联函数类型,此判断方法都是有效。

分类

内容见于课件7、8、课件9前半部分

什么是分类?

分类简单来说,就是根据文本的特征或属性,划分到已有的类别中。也就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。

比如天气预报,可以测定大量的云层厚度、形状、风力大小、季节、经纬度数据与此时此地的天气情况,根据分类算法,最终找到这些因素与天气的关系,那么根据这个对应关系就可以带入相关信息去预测不同地方不同时间的天气情况(因素是瞎编的,体会意思就好)。

分类算法有很多,如:

  • 线性判别法

  • 聚类判别法

  • 贝叶斯分类器

  • 决策树

  • 支持向量机

  • 人工神经网络

聚类

内容见于课件9后半部分及课件10

什么是聚类,它与分类有什么区别?

聚类不同于分类,它只给出一堆数据,不会有大量的数据供分类算法去拟合出一个分类程式,只能依靠数据各自的距离特征,将相近的数据点聚成一起,最后聚成不同的群体。

所以聚类就是你压根不知道数据会分为几类,通过聚类分析将数据聚成多个群体,或者按照用户要求聚合成几个群体,聚类不需要对数据进行训练和学习。

因此聚类很要求距离参数,有多种距离方法求解:

  • 绝对值距离

  • 欧氏距离

  • 闵可夫斯基距离

  • 切比雪夫距离

  • 马氏距离

  • Lance和Williams距离

  • 离散变量的距离

主成分分析

内容见于课件11

主成分分析不同于回归或分类,它是一种降维方法,简单来说,就是它会对拟合中的多个预测变量进行重新的整合,最后提取出不同的主成分,主成分之间显出最大的个别差异 。每个主成分是多个原始变量进行线性组合之后的结果。

通过析取主成分显出最大的个别差异,也用来削减回归分析和聚类分析中变量的数目。如果能用不超过3-5个成分就能解释变异的80%,就算是成功的主成分分析。

以分类中的天气预报为例,分类算法会使用云层厚度、形状、风力大小、季节、经纬度数据去预测天气情况,而使用主成分分析,那么这5个变量可能就会被整合成2个主成分,通过这两个主成分来对数据分析,降维方法尤其在预测变量过多时,如几十个变量的情况下很有帮助(这里的天气预报只用5个变量预测,并不算多,可以不使用主成分分析)。

因子分析

内容见于课件12

什么是因子分析,它与主成分分析有什么区别?

因子分析是降维的一种方法,是主成分分析的推广和发展。它是通过对变量间相关关系的探测,将原始变量分组,即将相关性高的变量分为一组,用共性因子来代替该变量。

因子分析组合的是相关性较强的原始变量,目的是找到在背后起作用的少量关键因子。因此不同于主成分分析往往很难用业务场景的角度解释主成分,因子分析的结果往往更容易用业务知识去加以解释。


还有更多文章,请移步公众号阅读

如果你生信基本技能已经入门,需要提高自己,请关注上面的生信技能树,看我们是如何完善生信技能,成为一个生信全栈工程师。

如果你是初学者,请关注下面的生信菜鸟团,了解生信基础名词,概念,扎实的打好基础,争取早日入门。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存