R语言实战:5步搞定微生物网络分析与环境因子关联(附完整代码)

张开发
2026/5/9 11:57:28 15 分钟阅读
R语言实战:5步搞定微生物网络分析与环境因子关联(附完整代码)
R语言实战5步搞定微生物网络分析与环境因子关联附完整代码微生物群落数据蕴含着丰富的生态信息而网络分析能直观展现物种间的复杂互作关系。当我们将这些网络特征与环境因子关联时往往能发现驱动微生物群落构建的关键生态因子。本文将用R语言带你完整实现从原始数据到可视化结论的全流程分析特别针对实际研究中常见的网络模块划分、特征提取与相关性检验问题提供解决方案。1. 环境准备与数据导入在开始分析前我们需要配置合适的R环境并导入必要的数据。微生物网络分析通常涉及三类核心数据OTU丰度表、环境因子表和预构建的微生物网络。首先安装所需的R包# 安装核心分析包若未安装 install.packages(c(igraph, WGCNA, psych, ecodist, vegan))接着导入示例数据。这里假设数据文件存放在工作目录下的data文件夹中library(igraph) library(WGCNA) # 读取环境因子数据行名为样本列名为环境因子 env_data - read.delim(data/env_factors.txt, row.names1) # 读取OTU丰度表行名为样本列名为OTU otu_table - read.delim(data/otu_abundance.txt, row.names1) # 读取预构建的微生物网络GraphML格式 microbial_net - read_graph(data/microbial_network.graphml, formatgraphml)提示实际分析中应确保OTU表和网络中的节点名称完全匹配可使用colnames(otu_table) %in% V(microbial_net)$name进行检查。数据导入后建议进行基本的质控# 过滤低丰度OTU保留在至少10%样本中出现的OTU otu_filtered - otu_table[, colSums(otu_table 0) nrow(otu_table)*0.1] # 检查环境因子缺失值 summary(env_data)2. 网络模块划分与特征提取微生物网络中的模块(module)通常代表功能相关的OTU群体。我们使用鲁汶算法进行模块划分并计算各模块的特征基因(eigengene)。# 使用鲁汶算法检测模块 louvain_clusters - cluster_louvain(microbial_net) V(microbial_net)$module - membership(louvain_clusters) # 计算模块度(modularity)评估划分质量 modularity_score - modularity(louvain_clusters) print(paste(网络模块度为:, round(modularity_score, 3))) # 可视化模块结构需要Rgraphviz包 if(!require(Rgraphviz)) { BiocManager::install(Rgraphviz) library(Rgraphviz) } plotModuleNetwork(microbial_net, louvain_clusters)接下来计算模块特征基因# 提取模块特征基因 MEs - moduleEigengenes(t(otu_filtered[, V(microbial_net)$name]), colors louvain_clusters$membership)$eigengenes # 选择丰度最高的5个模块进行分析 top_modules - names(sort(table(louvain_clusters$membership), decreasing TRUE)[1:5]) MEs_selected - MEs[, paste0(ME, top_modules)]3. 模块特征基因与环境因子关联模块特征基因代表了整个模块的表达模式将其与环境因子进行相关性分析可识别影响特定微生物群体的环境驱动因子。library(psych) # 计算Spearman相关性考虑非正态分布 module_env_cor - corr.test(env_data, MEs_selected, adjust fdr, method spearman) # 整理结果输出 cor_results - data.frame( r round(module_env_cor$r, 3), p round(module_env_cor$p, 4) ) print(cor_results)为更直观展示结果可以绘制热图library(pheatmap) pheatmap(module_env_cor$r, display_numbers matrix(ifelse(module_env_cor$p 0.05, *, ), nrow nrow(module_env_cor$r)), main 模块特征基因-环境因子相关性)4. 样本子图拓扑特征分析另一种思路是分析每个样本对应的子图拓扑特征再与环境因子进行关联。这能反映环境变化如何影响微生物网络的整体结构。首先定义计算子图特征的函数calculate_graph_properties - function(graph, otu_table) { prop_names - c(avg_degree, avg_distance, betweenness_centralization, degree_centralization, eigen_centralization, density, transitivity) properties - data.frame(matrix(0, nrow nrow(otu_table), ncol length(prop_names), dimnames list(rownames(otu_table), prop_names))) for (i in 1:nrow(otu_table)) { # 获取当前样本存在的OTU节点 present_otus - colnames(otu_table)[otu_table[i, ] 0] subgraph - induced_subgraph(graph, present_otus) # 计算各项拓扑指标 properties[i, avg_degree] - mean(degree(subgraph)) properties[i, avg_distance] - mean_distance(subgraph) properties[i, betweenness_centralization] - centr_betw(subgraph)$centralization properties[i, degree_centralization] - centr_degree(subgraph)$centralization properties[i, eigen_centralization] - centr_eigen(subgram)$centralization properties[i, density] - edge_density(subgraph) properties[i, transitivity] - transitivity(subgraph) } return(properties) }应用函数计算所有样本的子图特征graph_properties - calculate_graph_properties(microbial_net, otu_filtered) head(graph_properties)5. 环境因子与拓扑特征的Mantel检验Mantel检验用于评估两个距离矩阵的相关性适合分析环境因子与网络拓扑特征的关系。library(vegan) # 标准化拓扑特征0-1标准化 props_scaled - decostand(graph_properties, method max) # 计算环境因子与拓扑特征的Mantel检验 mantel_results - list() for (env_var in colnames(env_data)) { mantel_test - mantel(distance(props_scaled), distance(env_data[, env_var]), method spearman) mantel_results[[env_var]] - mantel_test } # 整理结果输出 mantel_summary - do.call(rbind, lapply(mantel_results, function(x) { c(r x$statistic, p x$signif) })) print(mantel_summary)为直观展示关键结果可以绘制气泡图library(ggplot2) # 准备绘图数据 plot_data - data.frame( Environment rownames(mantel_summary), Correlation mantel_summary[, r], Pvalue mantel_summary[, p] ) # 绘制气泡图 ggplot(plot_data, aes(x Environment, y Network Properties, size abs(Correlation), color ifelse(Pvalue 0.05, Significant, NS))) geom_point(alpha 0.7) scale_color_manual(values c(Significant red, NS gray)) scale_size(range c(3, 10)) theme_minimal() labs(title 环境因子与网络拓扑特征的Mantel检验结果, x , y , color 显著性, size 相关系数绝对值)

更多文章