宏基因组 - (2)基于基因相对丰度计算α/β多样性

-1.仅作笔记使用

我所用到的所有脚本可以+Q索要

请实名,名字+学校+方向



0. 首先需要获取基因的相对丰度表,这里可以略参考 宏基因组-(1)基因预测与基因相对丰度

图1. 大概是这样 ,个人比较喜欢csv格式,第一行是样品品,第一列是基因名。其实和OTU表差不多


1. R的读取以及处理

因为该文件有600M,所以用基础函数有点吃不消,当然也可以用python

以下是R的代码

library(data.table)

data <- fread("./genemark.GeneAbun.csv",stringsAsFactors = F,encoding = "UTF-8")        #genemark.GeneAbun.csv即基因相对丰度表

tdata = t(data)              #行列转置

a <- as.data.frame(tdata)      #转为数据框

colnames(a) <- a[1,]      #把第一行作为列名,令人奇怪的是,第一列已经自动作为行名了,所以后续不管了

a = a[-1,]    #第一行作为行名,但是第一行还是和行名一模一样,所以去除第一行

a = as.data.frame(lapply(a,as.numeric))  #把里面的 数字从字符串转为数值型(numeric)

到这,文件就处理完毕了,可以用以后续的计算


2.分组信息的处理

group=c(“B”,"B","B","B","B","B","C","C","C","C","C","C")    #12个样品,两大组,这里的顺序要和数据里面的顺序排得上,可以看到图1中是前6个样品是B大组,后6个是C大组

sample_id = rownames(a)  #行列已经转置了,把第一列列名作为个体名,这里的顺序依然要和图1中

data_group = data.frame(sample_id, group)  #构建一个分组信息文件


3.α多样性 - shannon指数

library(vegan)

library(reshape)

geneshannon = diversity(a, "shannon")


data_ggplot=data.frame(geneshannon)

data_ggplot=data.frame(data_ggplot, data_group["group"])

group_C=data_ggplot$geneshannon[data_ggplot$group=='C']

group_B=data_ggplot$geneshannon[data_ggplot$group=='B']  #利用分组信息


#检验是否满足正态性

shapiro.test(group_C)      shapiro.test(group_B)

若p值小于0.05,可以认为不满足正态性。。我做出来p都很高


#检验是否方差齐

bartlett.test(sppshannon~group,data=data_ggplot)

若p值小于0.05,可以认为方差不齐


#满足正态,方差不齐,两样本独立且两组样本数相同,故使用  校正t检验  -- t.test(x, y, var.equal = F)

with(data_ggplot, t.test(formula=sppshannon~group,var.equal = F))


library(ggplot2)      library(ggsignif)

alpha_boxplot=ggplot(data_ggplot,aes(x=group,y=geneshannon,fill=group))+

  geom_boxplot()+                                                                                        #箱线图

  labs(title="Alpha diversity", x="Group", y="Shannon index")+                  # 坐标轴标题啥的

  scale_fill_manual(values = c("#70C1B3","#397AA0"))+                            #挑了两个喜欢的颜色

  theme(plot.title=element_text(hjust=0.5), legend.title=element_blank())+  #去除背景网格

  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())+      #去除背景网格

  geom_signif(comparisons = list(c("B","C")), test = t.test,                      #添加显著性标识,ggsignif实现,甚至都不用单独做检验

              test.args = list(var.equal = F))

B组明显比C组高


4. Simpson指数

genesimpson = diversity(a, "simpson")    #后面的处理和shannon指数一模一样,略


5. Richness指数

这个很好理解,就是单纯的数量,最后每个样品比对上了多少个基因(不是多少种基因)

这里用相对丰度表(长度标准化)肯定做不了,因为求和加起来都是1

所以用数量表就行了,这里略,毕竟相对丰度表都算出来了

之前算物种richness用的数据,处理后的,大概就是这样,还是和OTU表基本一样,下面贴的是做物种richness的代码

observed_species = rowSums(tspecies_num_raw)      #计算Richness,其实就是简单的对行求和

rich_ggplot=data.frame(observed_species)                #计算Richness,其实就是简单的对行求和,转为数据框格式

rich_ggplot=data.frame(rich_ggplot, rich_group["group"])    #加入分组信息

rich_Chalk=rich_ggplot$observed_species[rich_ggplot$group=='Chalk']

rich_Basalt=rich_ggplot$observed_species[rich_ggplot$group=='Basalt']

也不用照抄,只要算出来这些指数以后,怎么画图方便怎么来


6.β多样性 - BrayCurtis距离

#获取距离矩阵

bray = vegdist(a,method = "bray")

bray <- as.matrix(bray)

write.table(bray,"bray-crutis.txt",sep = "\t")                                            #这两行是把第一列第一行作为列名行名

dis_mat = read.table("bray-crutis.txt",header = T,row.names = 1)          #其实用colnames.rownames更好


#基于距离矩阵,做主坐标分析

#pcoa ref https://www.bilibili.com/read/cv10516480

dis_mat = read.table("bray-crutis.txt",header = T,row.names = 1)

pcoa = cmdscale(dis_mat,k=3,eig = T)      #这里的K=3就是只算3个PcoA,最多只有11个,我猜原因是我有12个样本

poi = pcoa$points

eigval = pcoa$eig

pcoa_eig = (pcoa$eig)[]/sum(pcoa$eig)    #每个PCoA的权重值,这里对应下文ggplot中的lab

poi = as.data.frame(poi)

#将poi导出到excel略作处理再导回来,主要是添加一列Group分组和把第一列加了个sample

write.csv(poi,"poi1.csv")

poi2 = read.csv("poi1.csv")

将poi导出,还没有做处理,长这样


加了一列分组的Group,第一列手动加了个sample做列名,v1即主坐标1,v2主坐标2...


pcoa_plot = ggplot(data = poi2,aes(x=V1,y=V2))+

  geom_point(aes(color=group,shape=group),size=3)+

  scale_colour_manual(values = c("#70C1B3","#397AA0"))+

  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())+

  geom_hline(aes(yintercept=0), colour="#BEBEBE", linetype="dashed")+

  geom_vline(aes(xintercept=0), colour="#BEBEBE", linetype="dashed")+

  labs(x="PCoA1 ",

      y="PCoA2")

权重值,从大到小即PCoA1,PCoA2......
画出来就是这样的


7.

摘自一篇文献的物种注释部分

图中用的降维算法是NMDS,和PCoA差不多,只是原理不一样

现在还没有实现的是红线标注的图,即比较组间差异和组内差异,图中的意思是组内的差异小于组间的差异,更一步说明了这两组的物种组成不一样

2021.12.17更新:https://mp.weixin.qq.com/s/sXlN4m7L72rvvKXGp2WAXA  红色标注部分参考这个链接,照抄就能做出来,此处略



8.

物种多样性的计算同理

OTU/ASV表同理

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

推荐阅读更多精彩内容