微生物来源分析

目录

  • 微生物来源分析

    • 写在前面
    • 准备
    • 微生物来源分析
  • rm(list = ls())
  • gc()
    • 导入主函数
  • 导入分组文件和OTU表格
  • Load OTU table
    • 下面区分目标样品和来源样品。
  • Extract the source environments and source/sink indices
  • 对两组样品进行抽平
  • Estimate source proportions for each sink
    • 就正常样品而言,我们都会测定重复,这里基于多个样品的sourceracker分析
    • 导入主函数
  • 导入分组文件和OTU表格
  • Load OTU table
    • 出图,简单出一张饼图供大家参考
  • layouts = as.character(unique(metadata$SampleType))
    • 基于多个重复,我们合并饼图展示
    • 历史目录
      • R语言分析技术
      • 扩增子专题
      • 基于phyloseq的微生物群落分析
      • 代谢组专题
      • 当科研遇见python
      • 科学知识图谱
      • 杂谈

微生物来源分析

写在前面

最近由于老板有分析项目,我实在是进展缓慢,一直苦恼并艰难的探索和进展,所以很长时间没有和大家见面了,今天我为大家带来的source tracker分析,使用前一段时间刚出来的工具FEAST。

刘老师对这片文章进行了详细的解读:
Nature Methods:快速准确的微生物来源追溯工具FEAST。跟着刘老师的步伐,今天我对这个工具进行一个尝试。为什么作者不将这个工具封装到R包呢这样不就更容易了吗?可能好多小伙伴都没有从github上克隆过项目。

准备

不仅仅是这一次,我在之后全部的分析都会将整个群落封装到phylsoeq,只是为了更好的更加灵活的对微生物群落数据进行分析,当然大家如果初次见面,可能需要安装依赖极多的phyloseq包。需要熟悉phylsoeq封装的结构和调用方法。

为了让大家更容易操作,我把数据保存为csv,方便尚未解除phylsoeq的小伙伴进行无压力测试。

微生物来源分析

FEAST提供两种方式来做微生物来源分析。

  1. 基于单个目标的来源。单个样品的来分析。
    2.基于多个目标和多个来源。多个样品进行来源分析。

首先我们来演示基于单个目标样品和来源样品的来源分析

```{r cars1212}

rm(list = ls())

gc()

path = "./phyloseq_7_source_FEAST"
dir.create(path)

导入主函数

source("./FEAST-master/FEAST_src//src.R")

ps = readRDS("./a3_DADA2_table/ps_OTU_.ps")

导入分组文件和OTU表格

metadata <- as.data.frame(sample_data(ps))
head(metadata)

write.csv(metadata,"metadata.csv",quote = F)

Load OTU table

vegan_otu <- function(physeq){
OTU <- otu_table(physeq)
if(taxa_are_rows(OTU)){
OTU <- t(OTU)
}
return(as(OTU,"matrix"))
}
otus <- as.data.frame(t(vegan_otu(ps)))
write.csv(otus,"otus.csv",quote = F)
otus <- t(as.matrix(otus))

下面区分目标样品和来源样品。

envs <- metadata$SampleType

metadata<- arrange(metadata, SampleType)
metadata$id = rep(1:6,4)
Ids <- na.omit(unique(metadata$id))
it = 1

train.ix <- which(metadata$SampleType%in%c("B","C","D")& metadata$id == Ids[it])
test.ix <- which(metadata$SampleType==‘A‘ & metadata$id == Ids[it])

Extract the source environments and source/sink indices

num_sources <- length(train.ix) #number of sources
COVERAGE = min(rowSums(otus[c(train.ix, test.ix),])) #Can be adjusted by the user

对两组样品进行抽平

sources <- as.matrix(rarefy(otus[train.ix,], COVERAGE))
sinks <- as.matrix(rarefy(t(as.matrix(otus[test.ix,])), COVERAGE))

dim(sinks)
print(paste("Number of OTUs in the sink sample = ",length(which(sinks > 0))))
print(paste("Seq depth in the sources and sink samples = ",COVERAGE))
print(paste("The sink is:", envs[test.ix]))

Estimate source proportions for each sink

EM_iterations = 1000 # number of EM iterations. default value

FEAST_output<-FEAST(source=sources, sinks = t(sinks), env = envs[train.ix], em_itr = EM_iterations, COVERAGE = COVERAGE)
Proportions_est <- FEAST_output$data_prop[,1]
names(Proportions_est) <- c(as.character(envs[train.ix]), "unknown")

print("Source mixing proportions")
Proportions_est
round(Proportions_est,3)

```

就正常样品而言,我们都会测定重复,这里基于多个样品的sourceracker分析

基于多个目标和来源的微生物来源分析:
different_sources_flags设置目标样品和来源样品的对应关系。是否不同目标对应不同来源样品,还是不同目标对应相同来源样品

```{r more step}

导入主函数

source("./FEAST-master/FEAST_src//src.R")

ps = readRDS("./a3_DADA2_table/ps_OTU_.ps")

导入分组文件和OTU表格

metadata <- as.data.frame(sample_data(ps))
head(metadata)

Load OTU table

vegan_otu <- function(physeq){
OTU <- otu_table(physeq)
if(taxa_are_rows(OTU)){
OTU <- t(OTU)
}
return(as(OTU,"matrix"))
}
otus <- as.data.frame(t(vegan_otu(ps)))
otus <- t(as.matrix(otus))

head(metadata)

metadata<- arrange(metadata, SampleType)
metadata$id = rep(1:6,4)
EM_iterations = 1000 #default value
different_sources_flag = 1

envs <- metadata$SampleType
Ids <- na.omit(unique(metadata$id))
Proportions_est <- list()
it = 1

for(it in 1:length(Ids)){

# Extract the source environments and source/sink indices
if(different_sources_flag == 1){

train.ix <- which(metadata$SampleType%in%c("B","C","D")& metadata$id == Ids[it])
test.ix <- which(metadata$SampleType=='A'  & metadata$id == Ids[it])

}

else{

train.ix <- which(metadata$SampleType%in%c("B","C","D"))
test.ix <- which(metadata$SampleType=='A' & metadata$id == Ids[it])

}

num_sources <- length(train.ix)
COVERAGE = min(rowSums(otus[c(train.ix, test.ix),])) #Can be adjusted by the user

# Define sources and sinks

sources <- as.matrix(rarefy(otus[train.ix,], COVERAGE))
sinks <- as.matrix(rarefy(t(as.matrix(otus[test.ix,])), COVERAGE))

print(paste("Number of OTUs in the sink sample = ",length(which(sinks > 0))))
print(paste("Seq depth in the sources and sink samples = ",COVERAGE))
print(paste("The sink is:", envs[test.ix]))

# Estimate source proportions for each sink

FEAST_output<-FEAST(source=sources, sinks = t(sinks), env = envs[train.ix], em_itr = EM_iterations, COVERAGE = COVERAGE)
Proportions_est[[it]] <- FEAST_output$data_prop[,1]

names(Proportions_est[[it]]) <- c(as.character(envs[train.ix]), "unknown")

if(length(Proportions_est[[it]]) < num_sources +1){

tmp = Proportions_est[[it]]
Proportions_est[[it]][num_sources] = NA
Proportions_est[[it]][num_sources+1] = tmp[num_sources]

}

print("Source mixing proportions")
print(Proportions_est[[it]])

}

print(Proportions_est)

went = as.data.frame(Proportions_est)
colnames(went) = paste("repeat_",unique(metadata$id),sep = "")
head(went)

filename = paste(path,"/FEAST.csv",sep = "")
write.csv(went,filename,quote = F)

```

出图,简单出一张饼图供大家参考

```{r ming}

library(RColorBrewer)
library(dplyr)
library(graphics)

head(went)

plotname = paste(path,"/FEAST.pdf",sep = "")
pdf(file = plotname,width = 12,height = 12)
par(mfrow=c((length(unique(metadata$SampleType))%/%2 +2 ),2), mar=c(1,1,1,1))

layouts = as.character(unique(metadata$SampleType))

for (i in 1:length(colnames(went))) {

labs <- paste0(row.names(went)," \n(", round(went[,i]/sum(went[,i])*100,2), "%)")

pie(went[,i],labels=labs, init.angle=90,col = brewer.pal(nrow(went), "Reds"),
border="black",main =colnames(went)[i] )
}

dev.off()

```

基于多个重复,我们合并饼图展示

我们作为生物可能测定9个以上重复了,如果展示九个饼图,那就显得太夸张了,求均值,展示均值饼图

```{r cars123}
head(went)

asx = as.data.frame(rowMeans(went))

asx = as.matrix(asx)
asx_norm = t(t(asx)/colSums(asx)) #* 100 # normalization to total 100
head(asx_norm)

plotname = paste(path,"/FEAST_mean.pdf",sep = "")
pdf(file = plotname,width = 6,height = 6)
labs <- paste0(row.names(asx_norm)," \n(", round(asx_norm[,1]/sum(asx_norm[,1])*100,2), "%)")

pie(asx_norm[,1],labels=labs, init.angle=90,col = brewer.pal(nrow(went), "Reds"),
border="black",main = "mean of source tracker")
dev.off()

```

欢迎加入微生信生物讨论群,扫描下方二维码添加小编微信,小编带你入伙啦,大牛如云,让交流变得简单。

历史目录

R语言分析技术

  1. 《扩增子16s核心OTU挑选-基于otu_table的UpSet和韦恩图》
  2. 《分类堆叠柱状图顺序排列及其添加合适条块标签》
  3. 《R语言绘制带有显著性字母标记的柱状图》
  4. 《使用R实现批量方差分析(aov)和多重比较(LSD)》
  5. Rstudio切换挂载R版本及本地安装一些包
  6. 玩转R包
  7. 用ggplot画你们心中的女神
  8. ggplot版钢铁侠
  9. 想用ggplot做一张致谢ppt,但是碰到了520,画风就变了

扩增子专题

  1. 《16s分析之Qiime数据整理+基础多样性分析》
  2. 《16s分析之差异展示(热图)》
  3. 迅速提高序列拼接效率,得到后续分析友好型输入,依托qiime
  4. https://mp.weixin.qq.com/s/6zuB9JKYvDtlomtAlxSmGw》
  5. 16s分析之网络分析一(MENA)
  6. 16s分析之进化树+差异分析(一)
  7. 16s分析之进化树+差异分析(二)
  8. Qiime2学习笔记之Qiime2网站示例学习笔记
  9. PCA原理解读
  10. PCA实战
  11. 16s分析之LEfSe分析
  12. 16s分析之FishTaco分析
  13. PICRUSt功能预测又被爆出新的问题啦!

基于phyloseq的微生物群落分析

  1. 开年工作第一天phyloseq介绍
  2. phyloseq入门
  3. R语言微生物群落数据分析:从原始数据到结果(No1)
  4. R语言微生物群落数据分析:从原始数据到结果(No2))
  5. phyloseq进化树可视化
  6. 基于phyloseq的排序分析

代谢组专题

  1. 非靶向代谢组学数据分析连载(第零篇引子)
  2. 非靶向代谢组学分析连载(第一篇:缺失数据处理、归一化、标准化)

当科研遇见python

1.当科研遇见python

科学知识图谱

1.citespace 的基本术语与下载安装

杂谈

  1. 我的生物信息之路
  2. graphlan进一步学习笔记之进化树
  3. 如约 为大家带来了graphlan的物种分类树

原文地址:https://www.cnblogs.com/wentaomicro/p/11378682.html

时间: 2024-10-16 15:54:27

微生物来源分析的相关文章

电子地图(gis应用)开发数据来源分析

电子地图(gis应用)开发数据哪里来 要想实现电子地图应用,除了要有开发的电子地图GIS平台还需要支撑地图信息展示的数据和地图的底图,那么现在我们市面上有很多的公司都在使用电子地图和相关的一些应用.这类的应用数据到底是如何采集的和获取呢.这边从我们开发了这么多项目和对行业的了解来给大家作答,同时也希望有这方面开发需求的客户来点咨询我们将会耐心的协助您解决问题.上海为卓信息科技有限公司经过十年的研究和发展,致力于3s行业的电子地图开发应用,专业解决企业地图开发需求.下面我们就来分析一下地图数据的具

SDL2来源分析3:渲染(SDL_Renderer)

===================================================== SDL源代码分析系列文章上市: SDL2源码分析1:初始化(SDL_Init()) SDL2源码分析2:窗体(SDL_Window) SDL2源码分析3:渲染器(SDL_Renderer) SDL2源码分析4:纹理(SDL_Texture) SDL2源码分析5:更新纹理(SDL_UpdateTexture()) SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy()) SDL2

JUnit4.8.2来源分析-2 org.junit.runner.Request

JUnit4.8.2源代码,最为yqj2065兴趣是org.junit.runner.Request,现在是几点意味着它? ①封装JUnit的输入 JUnit4作为信息处理单元,它的输入是单元測试类--布满各种JUnit4的RUNTIME标注的类,但因为使用反射机制,JUnit4的输入严格地说是一个或多个(组)单元測试类的Class对象.早期版本号的JUnit主要处理一个測试或測试构成的树,在增添了对过滤/ filtering和排序/ sorting支持后,JUnit4增加了这个概念.毕竟依照1

C语言链表的来源分析

C语言中的链表是重点,也是难点,而且意义非凡.对链表的的抽象和恐惧是源于对它的来龙去脉的不明白.所以很有必要对它的发展渊源做透彻分析. 链表的单位是节点,而节点源于复合数据类型:结构体: 节点和结构体的区别就是看是否有指针域,目的就是想找到下一个节点: 结构体形如: struct Ghost { char name[30]; int age; int height; char addr[30]; }; 节点形如: struct Ghost { char name[30]; int age; in

Jafka来源分析——Processor

Jafka Acceptor接受client而建立后的连接请求,Acceptor会将Socket连接交给Processor进行处理.Processor通过下面的处理步骤进行client请求的处理: 1. 读取client请求. 2. 依据client请求类型的不同,调用对应的处理函数进行处理. Processor读取client请求是一个比較有意思的事情,须要考虑两个方面的事情:第一,请求规则(Processor须要依照一定的规则进行请求的解析).第二,怎样确定一次请求的读取已经结束(由于是非堵

流量来源分析 0801 0810 0820 流量数据重跑

重跑这3天的数据执行过程和遇到的问题: ①执行 sh siteKeyDataNew.sh 3 20140801 ; 错误提示: awk: cmd. line:39: fatal: cannot open file `../data_today/row_data_20140801*' for reading (No such file or directory)awk: cmd. line:35: fatal: cannot open file `../data_today/row_data_20

Jafka来源分析——文章

Kafka它是一个分布式消息中间件,我们可以大致分为三个部分:Producer.Broker和Consumer.当中,Producer负责产生消息并负责将消息发送给Kafka:Broker能够简单的理解为Kafka集群中的每一台机器,其负责完毕消息队列的主要功能(接收消息.消息的持久化存储.为Consumer提供消息.消息清理.....).Consumer从Broker获取消息并进行兴许的操作.每一个broker会有一个ID标识,该标识由人工在配置文件里配置. Kafka中的消息隶属于topic

JUnit4.8.2来源分析-6.1 排序和过滤

Runner.sort.Request.sortWith和Sorter.apply yqj2065很快,他们搞死. Sorter.apply().Request.sortWith()和Sortable.sort()三者做一件事情?为什么呢? java.util.Comparator接口是一个策略类,定义了int compare(T o1, T o2)方法.org.junit.runner.manipulation.Sorter implements Comparator<Description>

魔鬼作坊VIP教程第七款_大杀特杀分析来源与CALL吸血鬼课程

教程目录: G-1.大杀特杀完结来源分析-找人物信息基址偏移.G-2.斩杀人物信息基址游戏退出会变化问题.G-3.通过人物信息的一个偏移轻松挖掘出其他相关信息偏移.G-4.超强小技巧快速分析人物所需升级经验偏移. G-5.魔鬼式钩子注入快速斩杀游戏超级权限.G-6.斩杀权限后读取人物信息各种有价值数据.G-7.一招讨伐极强CALL术快速暴杀快捷键技能CALL.G-8.编疯了!几个命令轻松编写调用快捷键技能CALL.G-9.内联疯了!嵌入式编写调用快捷键技能CALL.G-10.饥渴难耐的CE爆出突