游乐游手机版
首页/AI教程/文章详情

scRNA-hdWGCNA共表达网络分析3:模块特征差异与相关性分析

时间:2026-06-04 16:52
对已构建的共表达网络和识别的基因模块,进行差异模块分析(DME)和模块-性状相关性分析,以确定特定条件下显著变化的模块及其与实验设计生物学变量的关联,从而落实模块的生物学意义。

1 简介

前两篇文章已经带大家走完了hdWGCNA的核心分析流程:从共表达网络构建、基因模块识别,到富集分析与大型球体网络图的可视化。网络搭建好了,模块也认出来了,但分析做到这一步,大家更想知道的,恐怕还是——到底哪些模块在特定的条件下发生了显著变化?它们跟实验设计的生物学变量又有什么关系?

这篇文章就来回答这两个问题。我们会分别进行差异模块分析(DME)和模块-性状相关性分析,把模块的生物学意义真正落到实处。

先加载数据,准备工作:

library(hdWGCNA)
library(WGCNA)
library(Seurat) 
library(tidyverse) 
library(igraph)
library(cowplot)
library(patchwork)
library(dplyr)
library(ggplot2)
library(stringr)

setwd('/Users/ks_ts/Documents/公众号文章/hdWGCNA复现/')
seurat_obj <- readRDS('./Agrp_hdWGCNA_obj.rds')

2 差异模块分析:Differential module eigengene (DME) analysis

前期的分析已经让我们知道了数据里有哪些基因模块,也初步了解了它们的功能。但接下来更核心的问题是:这些模块的表达模式,在不同条件之间有没有差异?以演示数据为例,实验设计涉及性别(Sex)和营养状态(Nutr_State)两个变量。那么,有没有某些模块在雌性禁食组 vs 雄性禁食组中表现出了特异性上调或下调?这正是DME分析要回答的。

hdWGCNA提供了FindDMEs函数来完成组间差异模块分析,它的语法跟Seurat里的FindMarkers非常相似,上手很快。

group1 <- seurat_obj@meta.data %>% 
  subset(sexXnutr == 'F_Fast' & cell_type3 == 'Agrp') %>% rownames
group2 <- seurat_obj@meta.data %>% 
  subset(sexXnutr == 'M_Fast' & cell_type3 == 'Agrp') %>% rownames

# 结果是 group1 vs group2
DMEs <- FindDMEs(
  seurat_obj,
  barcodes1 = group1,
  barcodes2 = group2,
  harmonized = TRUE,  # 默认T,前面对ME做了harmony矫正
  test.use = 'wilcox',
  wgcna_name = 'ARH'
)
head(DMEs)

##               p_val  a vg_log2FC pct.1 pct.2   p_val_adj   module
## Agrp-M10 0.0003634394  0.98248499 0.855 0.676 0.005088152 Agrp-M10
## Agrp-M11 0.0004068578 -0.86945801 0.809 0.919 0.005696009 Agrp-M11
## Agrp-M6  0.0006566490 -0.35091115 0.800 0.635 0.009193085  Agrp-M6
## Agrp-M13 0.0016294910  0.70616560 0.818 0.608 0.022812875 Agrp-M13
## Agrp-M4  0.0020561082  0.01432549 0.955 0.865 0.028785515  Agrp-M4
## Agrp-M12 0.0031978977  1.30940087 0.891 0.784 0.044770567 Agrp-M12

结果出来了,用PlotDMEsLollipop画图展示。不过这里有一个小坑必须提醒:该函数要求DME结果中的模块名称必须与seurat_obj中的模块名称一致,否则图表渲染会出问题。而实际使用中发现一个常见现象——FindDMEs跑完后,模块名称里的_被自动换成了-。这其实是FindMarkers的“老毛病”了。

检查一下seurat_obj中的模块名:

mod_color_df <- GetModules(seurat_obj)
unique(mod_color_df$module)

## [1] grey     Agrp_M1  Agrp_M2  Agrp_M3  Agrp_M4  Agrp_M5  Agrp_M6  Agrp_M7 
## [9] Agrp_M8  Agrp_M9  Agrp_M10 Agrp_M11 Agrp_M12 Agrp_M13 Agrp_M14
## 15 Levels: grey Agrp_M1 Agrp_M2 Agrp_M3 Agrp_M4 Agrp_M5 Agrp_M6 ... Agrp_M14

再看DME结果中的模块名:

unique(DMEs$module)

## [1] "Agrp-M10" "Agrp-M11" "Agrp-M6"  "Agrp-M13" "Agrp-M4"  "Agrp-M12"
## [7] "Agrp-M5"  "Agrp-M3"  "Agrp-M9"  "Agrp-M1"  "Agrp-M2"  "Agrp-M8" 
## [13] "Agrp-M7"  "Agrp-M14"

果然,下划线变成了短横线。解决起来很简单,手动替换回去就可以:

DMEs$module <- gsub("-", "_", DMEs$module)
rownames(DMEs) <- DMEs$module

修好名称,接下来就可以愉快地可视化了。两种常见的展示方式,棒棒糖图适合快速查看模块的差异方向和显著程度:

PlotDMEsLollipop(seurat_obj, DMEs, wgcna_name = 'ARH', 
                 pvalue = "p_val_adj") +
  theme_classic() +
  labs(title = "F_Fast vs M_Fast") +
  theme(plot.title = element_text(hjust = 0.5))

\

另外,火山图在信息密度上更胜一筹,一目了然地展示了哪些模块显著上调和下调:

PlotDMEsVolcano(seurat_obj, DMEs, wgcna_name = "ARH') +
  labs(title = "F_Fast vs M_Fast") +
  theme(plot.title = element_text(hjust = 0.5))

\

3 模块性状相关性:Module Trait Correlation

DME分析回答的是“哪些模块在组间有差异”,而模块-性状相关性分析则是要把模块跟具体的生物学变量或技术变量直接挂钩。这一思路与经典WGCNA完全一致:通过计算模块特征基因(ME)与性状的相关性,可以快速锁定哪些模块与研究变量——比如性别、营养状态、测序深度等——存在强关联。

操作上,使用ModuleTraitCorrelation函数。需要注意的一点是,该函数会基于指定的细胞类群来计算相关性。这样做是有道理的——某些性状可能只在特定细胞类群的特定模块中表现出相关性,而在其他类群中则无关联。所以我们先提取Agrp细胞子集,再进行分析。

# 提取Agrp细胞子集
agrp_obj <- subset(seurat_obj, cell_type3 == "Agrp")

# 确保因子顺序正确
agrp_obj$Sex <- as.factor(agrp_obj$Sex)
agrp_obj$Sex <- factor(agrp_obj$Sex, levels = c("F", "M"))
agrp_obj$Nutr_State <- as.factor(agrp_obj$Nutr_State)
agrp_obj$Nutr_State <- factor(agrp_obj$Nutr_State, levels = c("Fast", "Fed"))

# 指定要分析的性状
cur_traits <- c('Sex', 'Nutr_State', 'nCount_RNA', 'nFeature_RNA')

agrp_obj <- ModuleTraitCorrelation(
  agrp_obj,
  traits = cur_traits,
  group.by = 'cell_type3',
  wgcna_name = 'ARH'
)

分析结果被存储在对象里,可以通过GetModuleTraitCorrelation提取。返回的结果是一个列表,包含三个数据框:相关性系数、p值和FDR校正后的p值。

Agrp_module_cor <- GetModuleTraitCorrelation(agrp_obj)
Agrp_module_cor

可视化非常直观,用热图展示每个模块与各性状的相关性强度和显著性(以星号标注FDR):

PlotModuleTraitCorrelation(
  agrp_obj,
  label = 'fdr',
  label_symbol = 'stars',
  text_size = 3,
  text_digits = 3,
  text_color = 'black',
  high_color = '#F97B72',
  mid_color = 'white',
  low_color = '#1798E5',
  plot_max = 0.2,
  combine = TRUE
)

从这个热图可以快速锁定哪些模块在性别或营养状态上有显著偏好,为后续的深入挖掘提供了非常清晰的切入点。

来源:https://cloud.tencent.com.cn/developer/article/2681977
上一篇Ollama v0.30.0发布:性能兼容性升级,GGUF与自定义模型支持及已知问题 下一篇AI生成PLC程序耗费10万Token毫无成果
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Windows Docker Desktop RabbitMQ生产级部署完整指南
AI教程 · 2026-06-29

Windows Docker Desktop RabbitMQ生产级部署完整指南

前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
AI教程 · 2026-06-29

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践

先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A

阿里云Token Plan团队版功能价格与省钱购买指南
AI教程 · 2026-06-29

阿里云Token Plan团队版功能价格与省钱购买指南

阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全

阿里云物联网.NET Core客户端位置信息上报
AI教程 · 2026-06-29

阿里云物联网.NET Core客户端位置信息上报

阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将

年阿里云服务器选型配置与网站部署全攻略
AI教程 · 2026-06-29

年阿里云服务器选型配置与网站部署全攻略

2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网