微生物多样性qiime2分析流程(11) 数据可视化分析(中) 之PCA,PCOA,NMDS分析

轻轻松松的完成数据分析,高高兴兴的发论文,一个完美的PCA分析流程呈现给各位,喜欢请关注,点赞;后面的内容更精彩!!!

pacman::p_load(tidyverse,ggrepel,FactoMineR,magrittr)

da <- function(da) {
  (da / (da %>% colSums() %>% as.numeric() %>% rep(each = nrow(da)) %>%
    matrix(ncol = ncol(da), nrow = nrow(da)))) %>% t() %>% return()
}

da <- "data.xls" %>% 
read.delim(header = T, check.names = F, row.names = 1, sep = "\t") %>% da()
groups <- "group2.txt" %>% read.delim(header = T, sep = "\t")

pca <- da %>% 
PCA(scale.unit = F, graph = F)
pca %$% write.csv(ind$coord, file = "pca.xls")
group <- NULL

for (i in seq_along(groups$Sample)) {
  group[i] <- groups$Group[rownames(pca$ind$coord)[i] %>% 
                             grep(groups$Sample)]
}

if (ncol(groups) == 2) {
  pcadata <- data.frame(rownames(pca$ind$coord),
                        pca$ind$coord[, 1],pca$ind$coord[, 2], group) %>%
    set_colnames(c("sample", "PC1", "PC2", "group"))
}

ggplot(pcadata, aes(PC1,PC2)) +
  geom_point(aes(fill = group, color = group), size = 4) +
  geom_vline(aes(xintercept = 0), linetype = "dotted") +
  geom_hline(aes(yintercept = 0), linetype = "dotted") +
  labs(title = "PCA Plot",
       x = (floor(pca$eig[1,2] * 100) / 100) %>% 
         paste0("PC1 ( ", ., "%", " )"),
       y = (floor(pca$eig[2,2] * 100) / 100) %>% 
         paste0("PC2 ( ", ., "%", " )")) +
  theme(text = element_text(family = "Times", size = 12)) +
  theme(panel.background = element_rect(fill = 'white', colour = 'black'),
        axis.title.x = element_text(colour="black",size = 14),
        axis.title.y = element_text(colour="black",size = 14),
        axis.text = element_text(colour="black", size = 12),
        legend.title = element_text(colour="black",size = 12,
                                    face = "bold"),
        legend.key = element_blank(),
        plot.title = element_text(size = 12, colour = "black",
                                  hjust = 0.5,face = "bold")) +
  theme(legend.position = c(0.9, 0.9)) +
  theme(legend.title = element_blank())
PCA.png

PCOA分析

rm(list=ls())
pacman::p_load(tidyverse,ggrepel,vegan,ape)
data <- read.csv("data.xls", header = T,check.names = F,
                 sep="\t",row.names = 1) %>% t()
data[is.na(data)] <- 0

pcoa <- vegdist(data,method = "bray") %>% pcoa(correction = "none", rn = NULL)

groups <- read.table("group2.txt",sep = "\t",header = T) %>% as.list()
PC1 = pcoa$vectors[,1]
PC2 = pcoa$vectors[,2]

pcoadata <- data.frame(rownames(pcoa$vectors),PC1,PC2,groups$Group)
colnames(pcoadata) <-c("sample","PC1","PC2","group")

ggplot(pcoadata, aes(PC1, PC2)) +
  geom_point(aes(colour=group,fill=group),size=4)+
  labs(title="PCoA",
       x=(floor(pcoa$values$Relative_eig[1]*100)) %>% 
         paste0("PC1 ( ", ., "%", " )"),
       y=(floor(pcoa$values$Relative_eig[2]*100)) %>% 
         paste0("PC2 ( ", ., "%", " )")) +
  theme(text=element_text(size=10))+
  geom_vline(aes(xintercept = 0),linetype="dotted")+
  geom_hline(aes(yintercept = 0),linetype="dotted")+
  theme(panel.background = element_rect(fill='white', colour='black'),
        axis.title.x=element_text(colour='black', size=12),
        axis.title.y=element_text(colour='black', size=12),
        axis.text=element_text(colour='black',size=12),
        legend.title=element_blank(),
        legend.key.height=unit(0.6,"cm"))

可以通过以下代码添加置信区间与标签

  stat_ellipse(aes(fill = group),geom = "polygon",
               level = 0.95,alpha = 0.3)+
  geom_label_repel(aes(PC1,PC2,label = sample),
                   fill = "white",color = "black",
                   box.padding = unit(0.6,"lines"),segment.colour = "grey50",
                   label.padding = unit(0.2,"lines"))
pcoa.jpeg

NMDS分析

Stress小于0.2时,表示NMDS分析具有一定的可靠性;
小于0.05则认为结果很好;
小于0.01认为结果极好。
pacman::p_load(tidyverse,vegan)

nmds <- read.delim("data.xls",header=T,row.names=1,
                   check.names = F,sep="\t") %>% 
  t() %>% metaMDS(distance="bray")
#capture.output(nmds,file = "Stress.txt")
scores <- scores(nmds, choices = c(1,2))
write.table(scores,file="NMDS_scores.txt")
scores <-  read.table("NMDS_scores.txt",header=T)

groups <- read.table("group2.txt", header=T,sep = "\t")
plotdata <- data.frame(rownames(scores),scores$NMDS1,
                       scores$NMDS2,groups$Group)
colnames(plotdata)=c("sample","MDS1","MDS2","group")
plotdata$sample <- factor(plotdata$sample)
plotdata$MDS1 <- as.numeric(as.vector(plotdata$MDS1))
plotdata$MDS2 <- as.numeric(as.vector(plotdata$MDS2))

ggplot(plotdata, aes(MDS1, MDS2)) +
  geom_point(aes(colour=group,fill=group),size=3)+
  labs(title="NMDS Plot") + xlab(paste("MDS1")) +
  ylab(paste("MDS2"))+
  theme(text=element_text(size=14))+
  geom_vline(aes(xintercept = 0),linetype="dotted")+
  geom_hline(aes(yintercept = 0),linetype="dotted")+
  geom_text(aes(x=max(MDS1),y=max(MDS2)),hjust=3,vjust=0.5,
            size=5,label=paste("Stress = ",round(nmds$stress,3),sep = ""),
            colour="black")+
  theme(panel.background = element_rect(fill='white', colour='black'),
        panel.grid=element_blank(), 
        axis.title = element_text(color='black',size=14),
        axis.ticks.length = unit(0.4,"lines"), 
        axis.ticks = element_line(color='black'),
        axis.line = element_line(colour = "black"), 
        axis.title.x=element_text(colour='black', size=14),
        axis.title.y=element_text(colour='black', size=14),
        axis.text=element_text(colour='black',size=14),
        legend.title=element_blank(),
        legend.text=element_text(family="Times", size=14),
        legend.key=element_blank())+
  theme(plot.title = element_text(size=14,colour = "black",face = "plain"))
NMDS.png

示例文件:
链接: https://pan.baidu.com/s/1UatWUnVUGoIvxzWAKKwA9w 提取码: x485

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

推荐阅读更多精彩内容