扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇“R语言数据标准化方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“R语言数据标准化方法怎么使用”文章吧。
成都创新互联公司服务项目包括惠安网站建设、惠安网站制作、惠安网页制作以及惠安网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,惠安网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到惠安省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
什么是数据标准化?
在微生物组学数据分析之前,我们常常需要根据数据量纲的不同以及分析方法的需要对数据进行各种预处理,也即数据标准化。数据标准化的目的是使数据的总体符合某种要求,例如使数据总体符合正态分布以方便参数检验、使数据范围相同以方便比较分析、使数据分布均匀以方便作图展示等。我们必须知道不同标准化方法的内涵,从而在实际研究中可以选择正确的数据标准化方法。
首先我们介绍一下数据转换。简单数据转换也即对整体数据进行简单运算,数据转换的目的主要有三个,一是改变数据结构,例如非线性通过平方根、对数转换为线性;二是改变数据范围,便于比较和作图分析,例如数据变化特别大的可以进行对数转换来缩小属性范围;三是改变数据分布,使得样本偏离标准分布太远的更加接近标准分布(例如正态分布)。常见的数据转换有以下几种:
对数转换:将数据(样本观察值)取自然对数(或者其他数为底的对数),可以使用log()函数来实现(log1p()可以将数据加1后取自然对数)。若是数据中有0或负值,可以全部数据加上一个数转换为正数。一般来说自然对数转换可以使0~1范围内的数据范围变大,可以使>1范围内数据范围变紧凑。
平方根转换:将数据全部取平方根,可以使用sqrt(x)或者x^0.5来实现。类似的还有立方根转换、四次方根转换,偶数次方根要求数据非负。如果数据结构为二次关系,平方根转换后平方根转换可以使数据范围变小。
decostand(x, method, MARGIN, range.global, logbase = 2, na.rm=FALSE, ...)
其中x为向量或矩阵,method为标准化方法,MARGIN=1按行处理,MARGIN=2按列处理,不同标准化方法介绍如下:
①method="pa",将数据转换为有-无(1-0)类型,若分析不加权的情况群结构下可以使用;
②method="max",最大值标准化,将数据除以该行或者列的最大值(defaultMARGIN=2)。若数据非负,最大值标准化后数据全部位于0到1之间。
③method="total",总和标准化,将数据除以该行或者列的总和,也即求相对丰度(default MARGIN=1),总和标准化后数据全部位于0到1之间。
④method="range",Min-max标准化,将数据减去该行或者列的最小值,并比上最大值与最小值之差(defaultMARGIN=2),Min-max标准化后的数据全部位于0到1之间。
⑤method="normalize",模标准化,将数据除以每行或者每列的平方和的平方根(default MARGIN=1),模标准化后每行、列的平方和为1(向量的模为1),也即在笛卡尔坐标系中到原点的欧氏距离为1,样品分布在一个圆弧上,彼此之间的距离为弦长,因此也称为弦转化。在基于欧氏距离的PCA、RDA中分析群落数据可以将每个样方弦转化可以弥补欧氏距离的缺陷。弦转化后的数据使用欧氏距离函数计算将得到弦距离矩阵。
⑥method="hellinger",hellinger转化,就是总和标准化数据的平方根(default MARGIN=1),hellinger转化后的数据使用欧氏距离函数计算将得到hellinger距离矩阵。
⑦method="chi.square",卡方转化,在默认(defaultMARGIN=1)的情况下是数据除以行的和再除以列的和的平方根,卡方转化后的数据使用欧氏距离函数计算将得到卡方距离矩阵。
⑧Wisconsin转化,这个是使用伴随的函数wisconsin(),将数据除以该列最大值再除以该行总和,是最大值标准化和总和标准化的结合。
一般情况下,上面方法中默认MARGIN=1是默认对样品进行处理,默认MARGIN=2是默认对物种或者环境变量进行处理。
#假设虚拟数据:2个物种在5个样方的分布spe1=c(0.1,0.2,0.3,0.4,0.5)spe2=c(0.6,0.7,0.8,0.9,1)ab=cbind(spe1,spe2)rownames(ab)=LETTERS[1:5]#各种标准化ab1=decostand(ab, MARGIN=1, "total")ab2=decostand(ab, MARGIN=1, "normalize")ab3=decostand(ab, MARGIN=1, "hellinger")ab4=decostand(ab, MARGIN=1, "chi.square")ab5=wisconsin(ab)#作图观察不同标准化方法距离差异par(mfrow=c(2,3))plot(ab[,1], ab[,2], xlim=0:1, ylim=0:1, main="Raw data")text(ab[,1], ab[,2]-0.05, labels=rownames(ab), cex=1.2)plot(ab1[,1], ab1[,2], xlim=0:1, ylim=0:1, main="Total")text(ab1[,1], ab1[,2]-0.05, labels=rownames(ab), cex=1.2)plot(ab2[,1], ab2[,2], xlim=0:1, ylim=0:1, main="Normalize")text(ab2[,1], ab2[,2]-0.05, labels=rownames(ab), cex=1.2)plot(ab3[,1], ab3[,2], xlim=0:1, ylim=0:1, main="Hellinger")text(ab3[,1], ab3[,2]-0.05, labels=rownames(ab), cex=1.2)plot(ab4[,1], ab4[,2], xlim=0:1, ylim=0:1, main="Chi.square")text(ab4[,1], ab4[,2]-0.05, labels=rownames(ab), cex=1.2)plot(ab5[,1], ab5[,2], xlim=0:1, ylim=0:1, main="Wisconsin")text(ab5[,1], ab5[,2]-0.05, labels=rownames(ab), cex=1.2)
结果如下所示:
在没有处理的情况下,群落之间的欧氏距离相等,然而在生态学方面我们不这么看,因为B中物种1的数量是A的两倍,其群落差异显然比D、E更大,五种处理方法标准化数据后的结果都比较好的证实了上面的猜想,尤其是最后两种。然而在微生物生态中,我们倾向于认为微生物群落是一个整体,不同样品之间物种的相对丰度是有可比较的实际意义的,因此最常用的就是总和标准化(当然在不涉及丰度比较的聚类和排序分析中各种标准化方法都可以尝试,在传统群落研究里,虽然经常使用中心化等方法,但是需要使用盖度等对不同物种进行加权,因此直接进行总和标准化从某种意义上是使用相对丰度进行加权)。
以上就是关于“R语言数据标准化方法怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流