data的转化

  其实书中的顺序这部分内容应该与数据的概况一起学习,但是由于数据转化比较重要而且较难懂,我决定单拎出来学习。很巧的是周运来大神也是如此,(此部分可以和小白的知识点放在一起)。哈哈
 《数量生态学》:

在分析前,经常需要对数据进行转化,主要的目的如下:
(1)使不同物理单位的变量具有可比性(可以利用归一化(ranging),z-scores标准化,即先中心化再除以标准差,让变量无量纲化,然后方差就可以相加,例如第5章的主成分分析就需要应用这种标准化。)
(2)使变量更符合正态分布(至少对称分布),具有方差稳定(例如平方根转化、4次方根转化和对数转化)
(3)使非线性关系变成线性关系(例如通过对数转化将指数关系转化为线性关系)。
(4)在多元统计分析之前改变变量或对象的权重,赋予所有变量相等的方差。例如赋予所有对象向量相同的长度(或范式(norm))
(5)将分类(categorical)变量转换为二元(0-1)变量或对照码。

vegan包内函数decostand()可以提供多种生态学数据常用的标准化。在decostand()可以提供多种生态学数据常用的标准化。
decostand()函数中,标准化(standardization)是相对于简单转化(transformation)(例如平方根转化、对数转化和有-无数据转化)而言,简单转化只是对数值进行独立的处理,而标准化是数值之间的处理。因此,标准化是在整个样方(例如计算每个样方内物种的相对多度)、整个物种(多度除以该物种总多度或该物种最大的多度)或同时在样方和物种水平的处理(例如卡方转化),取决于分析的需要。

现在decostand()也有直接对数化的参数:log_b(y)+1,这里b是对数的底。但这个对数化只能在y>0的时候使用,零值不进行运输,对数的底通过参数logbase来设置。这个转化由Anderson等提出,与log(y+1)不同。增加底的值对大值的缩减的权重更大。

此处以箱线图比较转化和标准化的结果。

下面介绍vegan包的几种转化方式。

# 数据转化和标准化
##################
#访问decostand()帮助文件
?decostand
# 简单转化
# **********************
# 显示原始数据某一部分(多度数据)
spe[1:5, 2:4]
# 将多度数据转化为有-无(1-0)数据
spe.pa <- decostand(spe, method="pa")
spe.pa[1:5, 2:4]
#物种水平:两个方法;
#有-无数据或多度数据
# *******************
# 通过每个数值除以该物种最大值标准化多度
# 注意: 这里参数MARGIN=2 (默认值)
spe.scal <- decostand(spe, "max")
spe.scal[1:5,2:4]
# 计算每列最大值
apply(spe.scal, 2, max)
#这些标准化过程是否正确运行?最好利用绘图函数或总结函数密切追踪.。

这种追踪是很必要,有时候我们懒得起名字,直接把处理前的名字赋予处理后的数据,这样我们再想重复上一步的操作就很困难。对于计算量最大的数据更是如此,好不容易计算出来一个数据集,重来的话又要计算好久。

#通过每个数值除以该物种总和标准化多度(每个物种的相对多度)
#注意: 这里需要设定参数MARGIN=2
spe.relsp <- decostand(spe, "total", MARGIN=2)
spe.relsp[1:5,2:4]
#计算标准化后数据每列总和
apply(spe.relsp, 2, sum)
# 样方水平:3种方法;有-无数据或多度数据
# ***************************************
#通过每个数值除以该样方总和标准化多度 (每个样方相对多度或相对频度)
#注意: 这里参数MARGIN=1 (默认值)
spe.rel <- decostand(spe, "total")  # 默认MARGIN = 1
spe.rel[1:5,2:4]
#计算标准化后数据每列总和以检验标准化的过程是否正确
apply(spe.rel, 1, sum)
#赋予每个行向量长度(范数)为1(即平方和为1).
spe.norm <- decostand(spe, "normalize")
spe.norm[1:5,2:4]
# 验证每个行向量的范数
norm <- function(x) sqrt(x%*%x)
apply(spe.norm, 1, norm)
#这个转化也称为"弦转化":如果用欧氏距离函数去计算弦转化后的数据,#将获得弦距离矩阵(见第3章)。在PCA和RDA(见第5、6章)及k-means
#聚类(见第4章)分析前通常需要对数据进行弦转化。
# 计算相对频度(样方层面),然后取平方根
spe.hel <- decostand(spe, "hellinger")
spe.hel[1:5,2:4]
# 计算标准化后数据每行向量的范数
apply(spe.hel,1,norm)
#这个转化也称为Hellinger转化。如果用欧氏距离函数去计算Hellinger转
#化后的数据,将获得Hellinger距离矩阵(见第3章)。在PCA和RDA(见
#第5、6章)及k-means聚类(见第4章)分析前通常需要对数据进行Hellinger
#转化。注意,Hellinger转化等同于数据先平方根转化后再进行弦转化。
# 物种和样方同时标准化
# ****************************
# 卡方转化
spe.chi <- decostand(spe, "chi.square")
spe.chi[1:5,2:4]
# 请查看没有物种的样方8转化后将会怎样?
spe.chi[7:9,]
#如果用欧氏距离函数去计算卡方转化后的数据,将获得卡方距离矩阵(见
#第3章)
# Wisconsin标准化:多度数据首先除以该物种最大值后再除以该样方总和
spe.wis <- wisconsin(spe)
spe.wis[1:5,2:4]
# 常见种(石泥鳅 stone loach)转化后的多度箱线图
# *******************************************
par(mfrow=c(2,2))
boxplot(spe$LOC, sqrt(spe$LOC), log1p(spe$LOC),
        las=1, main="简单转化",
        names=c("原始数据", "sqrt", "log"), col="bisque")
boxplot(spe.scal$LOC, spe.relsp$LOC,
        las=1, main="物种标准化",
        names=c("max", "total"), col="lightgreen")
boxplot(spe.hel$LOC, spe.rel$LOC, spe.norm$LOC,
        las=1, main="样方标准化",
        names=c("Hellinger", "total", "norm"), col="lightblue")
boxplot(spe.chi$LOC, spe.wis$LOC,
        las=1, main="双标准化",
        names=c("Chi-square", "Wisconsin"), col="orange")
#比较多度数据转化或标准化前后的数据分布范围和分布情况。

若要展示物种多度数据转化前后的变化,也可以绘制物种沿河流的多度分布图:
比较不同转化对数据分布的影响,理解物种水平的两种方法,样方水平的三种方法以及物种和样方水平的两种转化方法。

我们来看看物种数据转化前后的沿河流变化情况。


#绘制物种从河流上游到下游分布图
# ******************************
par(mfrow=c(2,2))
plot(env$das, spe$TRU, type="l", col=4, main="Raw data",
     xlab="Distance from the source [km]", ylab="Raw abundance code")
lines(env$das, spe$OMB, col=3)
lines(env$das, spe$BAR, col="orange")
lines(env$das, spe$BCO, col=2)
lines(env$das, spe$LOC, col=1, lty="dotted")
plot(env$das, spe.scal$TRU, type="l", col=4, main="Species profiles (max)",
     xlab="Distance from the source [km]", ylab="Standardized abundance")
lines(env$das, spe.scal$OMB, col=3)
lines(env$das, spe.scal$BAR, col="orange")
lines(env$das, spe.scal$BCO, col=2)
lines(env$das, spe.scal$LOC, col=1, lty="dotted")

plot(env$das, spe.hel$TRU, type="l", col=4,
     main="Site profiles (Hellinger)",
     xlab="Distance from the source [km]", ylab="Standardized abundance")
lines(env$das, spe.hel$OMB, col=3)
lines(env$das, spe.hel$BAR, col="orange")
lines(env$das, spe.hel$BCO, col=2)
lines(env$das, spe.hel$LOC, col=1, lty="dotted")

plot(env$das, spe.chi$TRU, type="l", col=4,
     main="Double profiles (Chi-square)",
     xlab="Distance from the source [km]", ylab="Standardized abundance")
lines(env$das, spe.chi$OMB, col=3)
lines(env$das, spe.chi$BAR, col="orange")
lines(env$das, spe.chi$BCO, col=2)
lines(env$das, spe.chi$LOC, col=1, lty="dotted")
legend("topright", c("Brown trout", "Grayling", "Barbel", "Common bream",
                     "Stone loach"), col=c(4,3,"orange",2,1), lty=c(rep(1,4),3))
#比较这些图,并解释它们的不同。

在我看来,这些图转化后,趋势更明显了,可能起到了修匀的效果。
在某些情况下(通常是植被研究),使用多度的等级来代表特别的属性:个体数量(多度等级)、盖度(优势程度)或两者兼而有之。这些等级数据既是顺序数据,同时也是随意的数据,这样的数据不容易进行简单的转换。在这种情况下,必须根据手头的原始数据来将等级数据还原为多度数据,对于离散等级数据可以通过labdsv包的函数vegtrans来进行数据转化。
例如,假设我们要将鱼类多度等级数据(在我们的spe数据从0到5的等级数据)转为平均个体数,我们可以通过提供两个向量来实现,一个是当前等级数,一个是转换等级(converted scale)。注意:这个转化对于具有物种特异性多度鱼类数据集来说没有 意义。

#使用任意的等级数据来对物种数据进行原始转化
current<-c(0,1,2,3,4,5)
converted<-c(0,1,5,10,20,50)
spe.conv<-vegtrans(spe,current,converted)
此处注意:vegtrans已经变成了abundtrans 参数名称taxa也改为了comm

——————————————————————————————————————————————————
以下来自《群落生态分析》
在主要分析之前和将数据导入R之后,首先探索数据是必须的,检查缺失值或异常值,检查物种和环境数据的范围和类型,必要时进行转换或标准化,检查环境变量之间可能存在的相关性。

缺失值
这并不像听起来那么简单。缺失数据是矩阵中没有值的元素,在R种通常替换为NA。请注意:0和NA是不同的:如果是缺失数据(如物种未被记录并且获得零覆盖或丰度),将缺失值替换为0是有意义的,但如果没有记录(如,如果我因为pH仪坏了,而没有测量某些样品的pH;我不应该将这些值替换成0,因为这并不意味着该数据的pH如此之低)。具有缺失值的样本将从分析中删除(通常会默默地不报告任何警告消息),如果有许多缺失值分散在不同的变量中,则分析将基于相当少的样本。减少这种影响的一种方法是从分析中删除那些缺失值比例高的变量。

异常值
异常值是给定变量中与其他值明显不同的那些值。离群值可能会在分析中产生相当大的影响,因此值得提前处理。成为异常值的值应该有许多“不同”通常基于主观阈值。通常,我们不应该在分析完成后将一些样本作为异常值删除,因为删除会改善我们的结果;删除它们必须有更充分的理由。(1)测量或抽样产生的误差;这就需要确保此类值不是错误类型(无论是在字段中还是在将数据重新输入电子表格时)。(2)样本本身确实描述了与数据集的其余部分完全不同的条件;如果此类特定样本很少,删除它们可能是合理的,因为没有足够的重复来描述这种差异或现象。例如,在河谷数据集,在石灰基岩上采集了一些植被样地,尽管大多数样地来自酸性基岩;由于数据集中有97个样本,并且只有三个在石灰石上,如果我们对土壤pH如何影响丰富度或物种组成感兴趣,从数据集中删除他们可能是合理的。

有很多方法可以检测异常值。一个简单的探索性数据分析(EDA)可以以图形方式显示它,例如使用箱线图或直方图。在箱线图中,异常值定义为高于上四分位(Q3)或低于下四分位(Q1)的四分位间距的1.5倍;四分位数范围是上下四分位数之间的范围:IQR=Q3-Q1(如下图)。


boxplot_definition_outliers.jpg

Figure 1: Definition of outliers in the box plot. An outliner is shown by circle below the non-outlier range of values

以伏尔塔瓦河谷数据集中的pH值为例,图2说明了使用箱线图和直方图来识别异常值。箱线图表明有4个异常值pH值过高。直方图证实,三个高于6的pH与其他pH之前确实存在间隙。仔细检查发现,三个样品(32,33和34,以红色突出显示)来自同一样带,该样带是在石灰基岩石中,这就是为什么他们具有相当高的土壤pH值。当我对数据进行采样时,我知道有石灰石,我希望我的数据集中有高pH的样本;那时我不认为这将是所有97个地块中唯一的三个位于石灰岩上的地块。因此,这些值不是错误,但它们是异常值,因为他们描述了一种不同现象(石灰基岩上的林木),该现象在数据集中没有足够的重复。我可能会删除他们或返回现场并尝试收集更多石灰石样品。由箱线图指示为异常值的第四个值(以绿色突出显示)是在不同区域进行的样本,可能也在一些小的石灰岩斑块上;但由于我不确定,因此我不会将其作为异常值删除(根据直方图,此值适合整体分布,尽管如果直方图中断设置更精细,这会改变)。

vltava_ph_values_outliers_boxplot_histogram.png

数据转换

数据转换改变两个各个值之间的相对差异,从而改变了它们的分布。我们可能想要转换数据,因为(某些)统计分析和测试需要近似正态分布的残差并且具有均匀方差(方差齐性),即方差和均值之间没有关系,或者因为线性关系可能比非线性关系更容易解释。在转换数据时,我们需要确保转换实际上不会使值的分布变得更糟,并且实际上不会产生异常值。在评论结果时,我们应该使用未转换的变量值。而且,如果显示在图表中,我们应该使用带有未转换值的刻度标记标签,或者明确指定显示的值是经过转换的。

转换类型:
线性:通过添加常数或乘以常数(不改变统计检验的结果,例如将测量的温度以℃转换为℉)
非线性:对数转换、平方根转换(统计检验的结果与未转换变量的检验不同)

是否需要转换数据的一个很好的指标是使用直方图投影值并检查分布是否对称、右偏或左偏。生态数据通常是右偏的,因为他们在开始时被零限制。


types_of_distribution.png

对数变换
对数变换适用于具有对数正态分布的强右偏数据(具有均值和方差之间的关系):


image.png

logarithmic transformation
Log transformation is suitable for strongly right-skewed data with log-normal distribution (with the relationship between mean and variance):

Square-root transformtaion
Suitable for slightly right-skewed data

Power transformation
suitable for left-skewed data

Arcsin transformation (anqular transformation)
suitable for percentage values (and ratios in general)

Reciprocal transformtaion
Suitable for ratios (e.g. height/weight body ratio, number of children in population per number of females)

trans.pig.png

This pig in the middle is "normal pig", with parameters as it should be. All other pigs can be transformed into the normal pig by the transformation in the upper and left figure margin. So, for example, if the distribution of your data look like the pig in the lower-right corner, you may need to apply the log transformation on both x and y variables to obtain normal pig.
因此,例如,如果您的数据分布看起来像右下角的pig,那么您可能需要对x和y变量应用log转换来获得正常的pig。

数据标准化
标准化使用从数据本身计算的统计量来更改数据,例如平均值、范围、值的总和(它取决于数据)。应用标准化的最常见原因是消除单个变量或样本的相对权重(重要性)的差异。
定心:
标准化变量的均值为零:
y'=y-mean(y)
严格意义上的标准化(也称为“z分数”)
标准化变量的均值等于0,标准差等于1:


image.png

用于同步以不同单位和使用不同尺度测量的变量。
测距
改变变量的范围,例如变为[0,1]:


image.png

特例:物种组成矩阵的转换和标准化
虽然环境或性状矩阵中的变量通常具有非常不同的类型(定性、定量、序数)并以非常不同的单位进行测量,但物种组成矩阵是同质的,所有变量(物种)都以相同的单位(频率、丰富,覆盖、存在-缺席)。
检查使用那些单位和什么范围的值来量化样本中物种的出现并相应地转换数据总是好的。例如,如果这些值是植物覆盖的百分比估计值,则可能需要对数或sqrt转换,因为这些覆盖通常具有非常右偏的分布。然而,如果植物覆盖率的估计是在Braun-Blanquet尺度上完成的。然后将这些值转换为序数比例,这些1-9序数值与百分比相比cover已经包含隐式对数变换,不需要进一步变换。在某些情况下,将数据转换为存在-不存在可能是有用的,例如,如果物种丰度的估计不准确或使用不同尺度或估计方法从不同来源合并数据。
物种组成数据也经常按物种(例)或样本(行)进行标准化。物种标准化使物种具有相同的重要性(即总体丰度较低的物种与总体丰度较高的物种具有相同的重要性)。它可能并不总是有意义的,并且它将变得与其他样本非常不同。样品标准化在分析侧重于物种的相对比例而非绝对丰度的情况下有用,例如,因为记录的丰度取决于采样努力,而这种努力因样本而异,或者受到生物移动性影响。


image.png

Hellinger 标准化在这里值得特别关注,因为它是一种预先转换物种组成数据以用于线性排序方法的方法,从而产生基于转换的排序分析。Hellinger标准化公式为:

image.png

其中yij是样本i物种的丰度,yi+是样本中所有物种的丰度之和(行总和)。从公式中可以清楚地看出,它消除了样品之间绝对丰度的差异。它计算每个站点的相对物种丰度(物种概况),这些相对值是平方根的,这减少了高丰度物种的影响。欧几里得距离应用于海灵格标准化数据转化为海灵格距离,具有适合社区数据分析的性质。


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容