数据分析:“散点图:菌群与代谢物的相关性”

散点图:菌群与代谢物的相关性

散点图能较好地展示两坐标的相关趋势,再通过线性回归可计算两指标的相关关系,最终结合散点图以及相关关系结果共同在图上展示其结果。

导入所需R包

library(dplyr)
library(tibble)
library(ggplot2)
library(patchwork)

grp <- c("Case", "Control")
grp.col <- c("#283891", "#ED1C24")

读取数据

phen <- read.csv("phenotype.csv")
metabolite <- read.csv("metabolite.csv") %>% column_to_rownames("X")
phylum <- read.csv("phylum.csv") %>% column_to_rownames("phylum")

函数

cor_plot_fun <- function(meta="Putrescine", 
                         taxo="p__Bacteroidetes"){
 
  mdat <- phen %>% inner_join(metabolite %>% 
                               rownames_to_column("SampleID"), 
                             by="SampleID") %>%
          tidyr::gather(key="metabolism", value="MetaScore", 
                        -c("SampleID", "Group")) %>%
          inner_join(phylum %>% t() %>% data.frame() %>% 
                       select(taxo) %>%
                       setNames("TaxScore") %>% 
                       rownames_to_column("SampleID"), 
                     by="SampleID")
  
  xlab <- paste(meta, "activity score")
  ylab <- paste(taxo, "Abundance")
  mdat_cln <- mdat %>% filter(metabolism%in%meta) %>%
              mutate(Group=factor(Group, levels = grp))

  dat_lab <- c()
  fr <- levels(mdat_cln$Group)
  for(i in 1:length(fr)){
    mdat_cln_fr <- mdat_cln %>% filter(Group%in%fr[i])
    fit <- lm(formula = TaxScore ~ MetaScore, data = mdat_cln_fr)
    lm.lst <- list(a = as.numeric(format(coef(fit)[1], digits = 4)),
              b = as.numeric(format(coef(fit)[2], digits = 4)),
              r2 = format(summary(fit)$r.squared, digits = 4),
              p = format(summary(fit)$coefficients[2,4], digits = 4))
    eq <- substitute(italic(y) == a + b %.% italic(x)~","~italic(R)^2~"="~r2~","~italic(P)~"="~p, lm.lst)
    lab <- substitute(~italic(R)^2~"="~r2~","~italic(P)~"="~p, lm.lst)
    
    MScore <- with(mdat_cln_fr, (max(MetaScore)-min(MetaScore))/2+min(MetaScore))
    TScore <- with(mdat_cln_fr, max(TaxScore)-(max(TaxScore)-min(TaxScore))/8)
    
    temp <- data.frame(MetaScore=MScore,
                       TaxScore=TScore,
                       Group=fr[i],
                       label=as.character(as.expression(lab)))
    dat_lab <- rbind(dat_lab, temp)
  }
  
    
  pl <- ggplot(mdat_cln, aes(x=MetaScore, y=TaxScore))+ 
    geom_point()+
    stat_smooth(method='lm', formula = y~x, color="red")+
    geom_text(data=dat_lab, aes(x=MetaScore, y=TaxScore, label = label),
                size = 4, parse = TRUE) +
    labs(x=xlab, y=ylab)+
    facet_wrap(~Group, scales = "free")+  
    theme_bw()+
    theme(axis.title = element_text(face = 'bold',color = 'black',size = 10),
          axis.text.y = element_text(color = 'black',size = 8),
          axis.text.x = element_text(color = 'black',size = 8),
          strip.text = element_text(size = 10, face = "bold"))
  
  return(pl)  
}

运行函数

  • p__Bacteroidetes 和三类代谢物的相关关系
Putrescine_plot <- cor_plot_fun(meta = "Putrescine", taxo="p__Bacteroidetes")
Eicosenoic__plot <- cor_plot_fun(meta = "Eicosenoic_acid", taxo="p__Bacteroidetes")
Glyceric_plot <- cor_plot_fun(meta = "Glyceric_acid", taxo="p__Bacteroidetes")

(Putrescine_plot / Eicosenoic__plot / Glyceric_plot) +
  plot_layout(ncol = 1)

结果显示,p__Bacteroidetes与三类代谢物均不存在显著相关关系。

sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    
system code page: 936

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] patchwork_1.0.1 ggplot2_3.3.2   tibble_3.0.3    dplyr_1.0.0    

loaded via a namespace (and not attached):
 [1] rstudioapi_0.11  knitr_1.29       magrittr_1.5     tidyselect_1.1.0 munsell_0.5.0   
 [6] colorspace_1.4-1 R6_2.4.1         rlang_0.4.7      tools_4.0.2      grid_4.0.2      
[11] gtable_0.3.0     xfun_0.18        withr_2.2.0      htmltools_0.5.0  ellipsis_0.3.1  
[16] yaml_2.2.1       digest_0.6.25    lifecycle_0.2.0  crayon_1.3.4     purrr_0.3.4     
[21] vctrs_0.3.2      glue_1.4.1       evaluate_0.14    rmarkdown_2.4    compiler_4.0.2  
[26] pillar_1.4.6     generics_0.0.2   scales_1.1.1     pkgconfig_2.0.3 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容