数量生态学笔记||物种数据转化

其实在上节课数量生态学笔记||数据探索中我们已经简单接触了数据的转化,我们为了使不同刚量的数据能在一起比较使用了标准化。在数据分析的过程中,经常要根据分析的需要对数据进行转化,以符合模型的内在需要。

要知道我们采集来的一手数据有时会带有我们的采集痕迹有时这种痕迹可能会掩盖问题的实质。我们常常出于以下几方面的考虑需要对数据进行转化,转化的方法也有很多,这里我们仅举几个例子。

  • 使不同物理单位的数据具有可比性,比如我们的环境因子数据。常采用归一化,z-scores标准化。
  • 使变量更符合正态分布和具有稳定方差。常用平方根转化,对数转化等
  • 改变对象变量的权重,例如赋予所有对象向量相同的长度或者范数。
  • 将分类变量转化为二元变量(1-0)或者对照码。

对于我们的物种数据,通常具有相同的刚量,通常是正值和零,对这样的数据几种简单的转化函数,可以降低极大值的影响:

  • sqrt()平方根
  • sqrt(sqrt())4次方根
  • log1p()多度+ 1 的自然对数(保证0值转化后仍为0)
  • 某些特殊的情况需要把正值化为1 也就是有-无(1-0)

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

推荐阅读更多精彩内容