GMSB文章六:微生物SCFA关联分析

欢迎大家关注全网生信学习者系列:

  • WX公zhong号:生信学习者
  • Xiao hong书:生信学习者
  • 知hu:生信学习者
  • CDSN:生信学习者2

介绍

微生物短链脂肪酸(SCFAs)是由肠道微生物发酵膳食纤维、抗性淀粉、低聚糖等碳水化合物产生的一类有机脂肪酸,主要包括乙酸、丙酸和丁酸。SCFAs在肠道健康、免疫调节、能量代谢等方面发挥重要作用,并且与多种疾病状态有关。

通过约束线性混合效应模型(CLME)研究SCFA与排序暴露分组之间的单调递增关系,这种方法通常用于分析具有层次结构的数据,能够处理数据中的非独立性和非正态分布问题。在研究SCFA与某些因素(如饮食、疾病状态等)的关系时,CLME可以用来评估这些因素对SCFA水平的影响,并检测它们之间是否存在单调递增或递减的关系。

加载R包

library(readr)
library(tidyverse) 
library(CLME)
library(magrittr)
library(qwraps2)
library(ggprism)
library(ggsci)
library(ggpubr)
library(rstatix)
library(jtools)
library(kableExtra)

导入数据

大家通过以下链接下载数据:

  • 百度网盘链接:https://pan.baidu.com/s/1fz5tWy4mpJ7nd6C260abtg
  • 提取码: 请关注WX公zhong号_生信学习者_后台发送 复现gmsb 获取提取码
df_merge <- read_csv("./data/GMSB-data/df_merge.csv", show_col_types = FALSE)head(df_merge[, 1:6])
sampleidsubjidvisitvisit_numstatusage
F-1DUMMY1v110nc58
F-2DUMMY2v110nc60
F-3DUMMY3v110nc58
F-4DUMMY4v110nc72
F-5DUMMY5v110nc57
F-6DUMMY6v110nc59

数据预处理

对不同visit进行分组中,提取它们的SCFA短链脂肪酸

df_v1 <- df_merge %>%dplyr::filter(visit == "v1",group1 != "missing")
df_v2 <- df_merge %>%dplyr::filter(visit == "v2",group1 != "missing")df_v1$group1 <- recode(df_v1$group1,`g1` = "G1", `g2` = "G2",`g3` = "G3", `g4` = "G4")
df_v1$group2 <- recode(df_v1$group2,`g1` = "G1", `g2` = "G2",`g3` = "G3", `g4` = "G4", `g5` = "G5")df_v1 <- df_v1 %>%dplyr::transmute(subjid, status, leu3p, leu2p, recept_anal, abx_use, group1, group2, acetate_v1 = acetate, propionate_v1 = propionate, butyrate_v1 = butyrate, valerate_v1 = valerate)
df_v2 <- df_v2 %>%dplyr::transmute(subjid, acetate_v2 = acetate, propionate_v2 = propionate, butyrate_v2 = butyrate, valerate_v2 = valerate) df_v1 <- df_v1 %>%dplyr::left_join(df_v2, by = "subjid")df_v1$group1 <- factor(df_v1$group1, levels = c("G1", "G2", "G3", "G4"), ordered = TRUE)
df_v1$group2 <- factor(df_v1$group2, levels = c("G1", "G2", "G3", "G4", "G5"), ordered = TRUE)head(df_v1[, 1:6])
subjidstatusleu3pleu2precept_analabx_use
DUMMY1nc40.535.95yes
DUMMY2nc53.927.76yes
DUMMY3nc30.942.53no
DUMMY4nc50.319.37no
DUMMY5nc42.838.84no
DUMMY6nc36.946.74yes

visit1

visit1群体的SCFA的数据分布情况

df_v1 %>% dplyr::select(acetate_v1, propionate_v1, butyrate_v1, valerate_v1) %>%pastecs::stat.desc() %>% kable() %>% kable_styling()

在这里插入图片描述

结果:不同的SCFA的数据描述结果,比如acetate_v1最大和最小值都要高于其他的。

visit2

visit2群体的SCFA的数据分布情况

df_v1 %>% dplyr::select(acetate_v2, propionate_v2, butyrate_v2, valerate_v2) %>%pastecs::stat.desc() %>% kable() %>% kable_styling()

在这里插入图片描述

结果:不同的SCFA的数据描述结果,比如acetate_v1最大和最小值都要高于其他的。

SCFA ~ groups: box plots

线性回归校正abx_use因素比较不同分组的差异

plot_box <- function(group_lab, group_var, key_var, title, y.position, step.increase) {df_fig <- df_v1 %>%transmute(group = get(group_var), value = get(key_var), abx_use)df_fig$group <- factor(df_fig$group, ordered = FALSE)lm_fit <- lm(value ~ group + abx_use, data = df_fig)df_p <- data.frame(group1 = group_lab[1],group2 = group_lab[-1],p = summary(lm_fit)$coef[grepl("group", names(coef(lm_fit))), "Pr(>|t|)"]) %>%mutate(p = round(p, 2))bxp <- ggboxplot(df_fig, x = "group", y = "value", color = "group",add = "jitter", xlab = FALSE, ylab = FALSE, title = title) +stat_pvalue_manual(df_p, y.position = y.position, step.increase = step.increase, label = "p") +scale_color_npg(name = "Group") +theme(axis.text.x = element_blank(),axis.ticks.x = element_blank(),strip.background = element_rect(fill = "white"),legend.position = "bottom",plot.title = element_text(hjust = 0.5))return(bxp)
}

Primary group

Primary group: 按照频率分组

  • G1: # receptive anal intercourse = 0

  • G2: # receptive anal intercourse = 1

  • G3: # receptive anal intercourse = 2 - 5

  • G4: # receptive anal intercourse = 6 +

bxp_list <- list()
var_list <- c("acetate_v1", "butyrate_v1", "propionate_v1", "valerate_v1")
title_list <- c("Acetate", "Butyrate", "Propionate", "Valerate")
y_pos_list <- c(6, 0.25, 0.35, 0.07)
step_list <- c(0.1, 0.1, 0.1, 0.1)for (i in seq_along(var_list)) {bxp <- plot_box(group_lab = c("G1", "G2", "G3", "G4"),group_var = "group1",key_var = var_list[i], title = title_list[i],y.position = y_pos_list[i], step.increase = step_list[i])bxp_list[[i]] <- bxp
}ggarrange(bxp_list[[1]], bxp_list[[2]], bxp_list[[3]], bxp_list[[4]],common.legend = TRUE)

在这里插入图片描述

结果:上述短链脂肪酸在分组间均不存在显著差异。

Secondary group

Secondary group: 按照频率分组2

  • G1: # receptive anal intercourse = 0

  • G2: # receptive anal intercourse = 1

  • G3: # receptive anal intercourse = 2 - 3

  • G4: # receptive anal intercourse = 4 - 8

  • G5: # receptive anal intercourse = 9 +

bxp_list <- list()
var_list <- c("acetate_v1", "butyrate_v1", "propionate_v1", "valerate_v1")
title_list <- c("Acetate", "Butyrate", "Propionate", "Valerate")
y_pos_list <- c(6, 0.25, 0.35, 0.07)
step_list <- c(0.1, 0.1, 0.1, 0.1)for (i in seq_along(var_list)) {bxp <- plot_box(group_lab = c("G1", "G2", "G3", "G4", "G5"),group_var = "group2",key_var = var_list[i], title = title_list[i],y.position = y_pos_list[i], step.increase = step_list[i])bxp_list[[i]] <- bxp
}ggarrange(bxp_list[[1]], bxp_list[[2]], bxp_list[[3]], bxp_list[[4]],common.legend = TRUE)

在这里插入图片描述

结果:短链脂肪酸在分组间的分布。

  • Acetate在G1和G5间显著差异;

  • Valerate在G1和G5间显著差异

SCFA ~ groups: increasing trend

约束线性混合效应模型(CLME, Constrained Linear Mixed Effects Models):用于评估性暴露组和血浆炎症细胞因子水平之间的单调递增趋势,同时校正细菌抗生素使用情况。

  • plot_clme用于绘制趋势图
plot_clme <- function(clme_obj, group, y_min, y_max, p_gap, ann_pos, trend = "increase", ...) {overall_p <- clme_obj$p.valueind_p <- clme_obj$p.value.indest_mean <- clme_obj$theta[group]est_se <- sqrt(diag(clme_obj$cov.theta))[group]df_fig <- data.frame(x = group, y = est_mean, err = est_se)if (est_mean[2] < est_mean[length(est_mean)]) {start_p_pos <- est_mean[2] + p_gapend_p_pos <- max(est_mean) + p_gap} else if (est_mean[2] > est_mean[length(est_mean)]) {start_p_pos <- max(est_mean) + p_gapend_p_pos <- min(est_mean) + p_gap} else {if (trend == "increase") {start_p_pos <- est_mean[2] + p_gapend_p_pos <- max(est_mean) + 2 * p_gap} else {start_p_pos <- max(est_mean) + 2 * p_gapend_p_pos <- min(est_mean) + p_gap}}df_p <- data.frame(group1 = group[seq_len(length(group) - 1)],group2 = group[-1],x = group[-1],label = paste0("p = ", round(ind_p, 3)),y.position = seq.int(from = start_p_pos, to = end_p_pos, length.out = length(group) - 1))df_ann <- data.frame(x = group[1], y = ann_pos,fill = "white",label = paste0("Trend p-value = ", round(overall_p, 3)))fig <- df_fig %>%ggplot(aes(x = x, y = y)) +geom_bar(stat = "identity", color = "black", aes(fill = x)) + geom_errorbar(aes(ymin = y - 1.96 * err, ymax = y + 1.96 * err), width = .2, position = position_dodge(.9)) +add_pvalue(df_p,xmin = "group1",xmax = "group2",label = "label",y.position = "y.position",remove.bracket = FALSE, ...) +geom_label(data = df_ann, aes(x = x, y = y, label = label), size = 4, vjust = -0.5, hjust = 0, color = "black") +ylim(y_min, y_max) +theme_bw()return(fig)
}
  1. P-value is obtained by linear regression adjusting for antibiotics usage.

  2. P-values were not adjusted for multiple comparisons.

限制参数

cons <- list(order = "simple", decreasing = FALSE, node = 1)

Primary grouping: Acetate

短链脂肪酸AcetatePrimary grouping的相关关系

fit1 <- clme(acetate_v1 ~ group1 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit1 <- summary(fit1)fig_ace_primary <- plot_clme(summ_fit1, group = c("G1", "G2", "G3", "G4"), y_min = 0, y_max = 4, p_gap = 0.7, ann_pos = 3.5) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Acetate")fig_ace_primary

在这里插入图片描述

结果:acetate在不同组有显著差异的单调递增的趋势(G3和G4组存在显著差异)。

Primary grouping: Butyrate

短链脂肪酸ButyratePrimary grouping的相关关系

fit2 <- clme(butyrate_v1 ~ group1 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit2 <- summary(fit2)fig_but_primary <- plot_clme(summ_fit2, group = c("G1", "G2", "G3", "G4"), y_min = 0, y_max = 0.18, p_gap = 0.04, ann_pos = 0.16) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Butyrate")fig_but_primary

在这里插入图片描述

Primary grouping: Propionate

短链脂肪酸PropionatePrimary grouping的相关关系

fit3 <- clme(propionate_v1 ~ group1 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit3 <- summary(fit3)fig_pro_primary <- plot_clme(summ_fit3, group = c("G1", "G2", "G3", "G4"),y_min = 0, y_max = 0.25, p_gap = 0.05, ann_pos = 0.22) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Propionate")fig_pro_primary

在这里插入图片描述

Primary grouping: Valerate

短链脂肪酸ValeratePrimary grouping的相关关系

fit4 <- clme(valerate_v1 ~ group1 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit4 <- summary(fit4)fig_val_primary <- plot_clme(summ_fit4, group = c("G1", "G2", "G3", "G4"),y_min = 0, y_max = 0.053, p_gap = 0.009, ann_pos = 0.048) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Valerate")fig_val_primary

在这里插入图片描述

Secondary grouping: Acetate

短链脂肪酸AcetateSecondary grouping的相关关系

fit1 <- clme(acetate_v1 ~ group2 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit1 <- summary(fit1)fig_ace_secondary <- plot_clme(summ_fit1, group = c("G1", "G2", "G3", "G4", "G5"), y_min = 0, y_max = 4, p_gap = 0.7, ann_pos = 3.5) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Acetate")fig_ace_secondary

在这里插入图片描述

Secondary grouping: Butyrate

短链脂肪酸ButyrateSecondary grouping的相关关系

fit2 <- clme(butyrate_v1 ~ group2 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit2 <- summary(fit2)fig_but_secondary <- plot_clme(summ_fit2, group = c("G1", "G2", "G3", "G4", "G5"), y_min = 0, y_max = 0.18, p_gap = 0.04, ann_pos = 0.16) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Butyrate")fig_but_secondary

在这里插入图片描述

Secondary grouping: Propionate

短链脂肪酸PropionateSecondary grouping的相关关系

fit3 <- clme(propionate_v1 ~ group2 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit3 <- summary(fit3)fig_pro_secondary <- plot_clme(summ_fit3, group = c("G1", "G2", "G3", "G4", "G5"),y_min = 0, y_max = 0.25, p_gap = 0.05, ann_pos = 0.22) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Propionate")fig_pro_secondary

在这里插入图片描述

Secondary grouping: Valerate

短链脂肪酸ValerateSecondary grouping的相关关系

fit4 <- clme(valerate_v1 ~ group2 + abx_use, data = df_v1, constraints = cons, seed = 123)
summ_fit4 <- summary(fit4)fig_val_secondary <- plot_clme(summ_fit4, group = c("G1", "G2", "G3", "G4", "G5"),y_min = 0, y_max = 0.053, p_gap = 0.009, ann_pos = 0.048) +scale_fill_npg(name = NULL) +labs(x = NULL, y = "Valerate")fig_val_secondary

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI写作助力:如何用AI降重工具快速提升论文原创性?

高查重率是许多毕业生的困扰。通常&#xff0c;高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法&#xff0c;如修改文本和增添原创内容&#xff0c;虽必要但耗时且成效不一。 鉴于此&#xff0c;应用AI工具进行AIGC降重成为了一个高效的解决方案。这些工具…

抖音集成:通过MessageBox引领数字化营销新潮流

抖音集成&#xff1a;通过MessageBox引领数字化营销新潮流 在数字化营销的大潮中&#xff0c;企业需要不断探索新的方式来优化其营销策略&#xff0c;以抓住更多的市场机会。抖音作为一款全球知名的短视频社交平台&#xff0c;凭借其庞大的用户群体和高度互动的特性&#xff0…

v1.0.4优雅草超级站长工具开发进度更新·增加vip兑换功能·增加每个页面批量查询和清空功能

https://doc.youyacao.com/9/2157 v1.0.4优雅草超级站长工具开发进度更新增加vip兑换功能增加每个页面批量查询和清空功能 演示地址-可测试 https://test2.youyacao.com 介绍 本产品是一款针对站长使用的工具&#xff0c;针对网站域名的多维信息查询工具&#xff0c;本产品…

OpenAI推迟ChatGPT高级语音模式发布!谷歌将推出明星网红AI聊天机器人|AI日报

文章推荐 时序预测双飞轮&#xff0c;全面超越Transformer&#xff0c;纯MLP模型实现性能效能齐飞 OpenAI将终止对我国提供API服务&#xff0c;国内大模型将迎来“六小强”格局&#xff01;&#xff5c;AI日报 推迟ChatGPT高级语音模式发布&#xff01;OpenAI将计划在秋季向…

elasticsearch重置密码

0 案例背景 Elasticsearch三台集群环境&#xff0c;对外端口为6200&#xff0c;忘记elasticsearch密码&#xff0c;进行重置操作 注&#xff1a;若无特殊说明&#xff0c;三台服务器均需进行处理操作 1 停止es /rpa/bin/elasticsearch.sh stop 检查状态 ps -ef|grep elast…

视频监控管理平台LntonCVS智能视频监控平台系统详细介绍

安防视频监控平台LntonCVS以其卓越的灵活性和便捷的部署特性在众多同类产品中脱颖而出。它不仅支持多种主流标准协议&#xff0c;如国标GB28181、RTSP/Onvif、RTMP等&#xff0c;还兼容了海康Ehome、海大宇等厂家的私有协议和SDK接入&#xff0c;为用户提供了更加丰富的选择。 …

Android 简单的so层逆向

前言 最近搞了一下安卓。简单学习记录一下。 目标程序&#xff1a; xiao shui mian 也就是某个参数的逆向 准备环境 安卓机scrcpyadbfrida解包软件&#xff08;不列举了&#xff09; 这种环境安装这里就不多说了。教程也很多。 参数逆向分析 先抓包看看参数 这里我使用…

【仿真建模-anylogic】ViewArea解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-27 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 应用场景 view area又叫视图区域&#xff0c;其作用是在presentation中标记一块区域&#xff0c;便于动画演示过程中快速切换可视区…

海豚调度调优 | 如何解决任务被禁用出现的Bug

&#x1f4a1; 本系列文章是 DolphinScheduler 由浅入深的教程&#xff0c;涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。 祝开卷有益。 本系列教程基于 DolphinScheduler 2.0.5 做的优化。&#xff…

PTA—C语言期末复习(选择题)

1. 按照标识符的要求&#xff0c;&#xff08;A&#xff09;不能组成标识符。 A.连接符 B.下划线 C.大小写字母 D.数字字符 在大多数编程语言中&#xff0c;标识符通常由字母&#xff08;包括大写和小写&#xff09;、数字和下划线组成&#xff0c;但不能以数字开头&#xff0c…

JDBC以及事务

1、JDBC是什么&#xff1f; JDBC是Java DataBase Connectivity&#xff08;Java语言链接数据库&#xff09; 2、JDBC的本质 JDBC是一套接口&#xff0c;有调用者&#xff08;java工程师&#xff09;和实现者&#xff08;SUN公司&#xff09;&#xff08;实现类被称为驱动&…

Linux OpenGrok搭建

文章目录 一、目的二、环境三、相关概念3.1 OpenGrok3.2 CTags3.3 Tomcat 四、OpenGrok搭建4.1 安装jdk4.2 安装ctags依赖4.3 安装universal-ctags4.3.1 下载universal-ctags4.3.2 编译&&安装universal-ctags 4.4 安装Tomcat4.4.1 下载&&解压Tomcat4.4.2 启动T…

继续捡钱,每天几百块!

每日操作计划&#xff1a; 标普信息科技(161128)&#xff0c;溢价8.5%&#xff0c;限购100&#xff0c;一拖七&#xff0c;单户每天700*8.5%59元 印度基金LOF(164824)&#xff0c;溢价2.6%&#xff0c;限购100&#xff0c;一拖七&#xff0c;单户每天700*2.6%18元 美元债LOF(…

为什么要本地化您的多媒体内容?

当我们访问网站、应用程序和社交媒体时&#xff0c;体验不再局限于陈旧的文本和静态图像。现代处理能力和连接速度提高了快速加载视频、音频和动画的可能性。 这一切都提供了更具沉浸感和互动性的用户体验。多媒体是数字营销中最有效的内容之一&#xff0c;因为它对用户更具吸…

使用API有效率地管理Dynadot域名,为文件夹中的域名设置域名转发

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

全彩屏负氧离子监测站

TH-FZ5在追求绿色生态、健康出行的今天&#xff0c;景区不仅仅是人们休闲游玩的好去处&#xff0c;更是人们体验大自然、感受清新空气的重要场所。为了进一步提升游客的游览体验&#xff0c;许多景区纷纷引入了全彩屏负氧离子监测站&#xff0c;这一创新举措不仅为景区增添了科…

云通SIPX,您的码号资源智能调度专家!

在数字化转型的浪潮中&#xff0c;号码资源作为企业与客户沟通的重要桥梁&#xff0c;其管理效率直接关系到企业运营的成败。随着运营商对号码资源管理的规范化和精细化&#xff0c;企业对高效、智能的号码资源管理需求日益增长&#xff0c;以实现对外呼叫的降本增效。 一、什么…

学生成绩管理系统带8000字文档学生选课管理系统java项目javaweb项目ssm项目jsp项目java课程设计java毕业设计

文章目录 学生选课成绩管理系统一、项目演示二、项目介绍三、8500字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带8500字文档&#xff08;9.9&#xffe5;带走&#xff09; 学生选课成绩管理系统 一、项目演示 选课成绩管理系统 二、项目介绍 语言: Java …

直播带货大模型,开启自动卖货的时代

Streamer-Sales是一个为直播带货主播量身定制的智能工具。 它能够智能分析商品特性&#xff0c;自动创作出引人入胜的解说词&#xff0c;从而有效增强商品的吸引力和提升销售业绩。它还具备多种交互功能&#xff0c;比如将主播的语音实时转换为文字&#xff0c;便于与观众进行…

移动端 UI 风格,书写华丽篇章

移动端 UI 风格&#xff0c;书写华丽篇章