生态学家必看:用R包SIMMR搞定稳定同位素混合模型,从数据加载到结果解读全流程
2026/6/5 6:07:17 网站建设 项目流程

生态学家实战指南:用SIMMR包解析稳定同位素混合模型的完整流程

在生态学和环境科学研究中,稳定同位素分析已成为揭示食物网结构、营养关系和物质流动路径的重要工具。作为SIAR包的现代替代品,SIMMR(Stable Isotope Mixing Model in R)凭借其强大的贝叶斯框架和灵活的操作界面,正在成为生态学家们的新宠。本文将带您从数据准备到结果解读,完整掌握SIMMR的应用技巧。

1. 环境准备与数据加载

1.1 安装必要软件包

在开始之前,请确保已安装JAGS(Just Another Gibbs Sampler),这是SIMMR运行的底层引擎。随后在R中安装并加载所需包:

install.packages(c("simmr", "R2jags", "ggplot2")) library(simmr) library(R2jags) library(ggplot2)

1.2 理解数据结构

SIMMR要求输入数据包含以下核心元素:

  • 混合物数据:生物样本的同位素测量值(如δ13C和δ15N)
  • 源数据:潜在食物源的均值与标准差
  • 校正因子:营养富集因子(TEFs/TDFs)
  • 浓度依赖:元素在食物源中的比例

以包内自带的geese_data_day1数据集为例:

data(geese_data_day1) str(geese_data_day1)

该数据集包含:

  • 9个鹅组织样本的δ13C和δ15N测量值
  • 4种食物源(Zostera, Grass, U.lactuca, Enteromorpha)的同位素特征
  • 对应的TEFs和浓度依赖数据

1.3 数据质量检查

在正式分析前,建议进行以下验证:

  1. 同位素空间图检查:确保混合物点位于源定义的凸包内
  2. 源区分度评估:不同源在同位素空间应有足够距离
  3. TEF合理性:校正因子应符合文献报道范围
prelim_plot <- plot( simmr_load( mixtures = geese_data_day1$mixtures, source_names = geese_data_day1$source_names, source_means = geese_data_day1$source_means, source_sds = geese_data_day1$source_sds ) ) print(prelim_plot)

2. 模型构建与MCMC运行

2.1 数据加载

使用simmr_load函数创建输入对象:

simmr_in <- with( geese_data_day1, simmr_load( mixtures = mixtures, source_names = source_names, source_means = source_means, source_sds = source_sds, correction_means = correction_means, correction_sds = correction_sds, concentration_means = concentration_means ) )

关键参数说明:

参数描述示例值
mixtures混合物测量矩阵geese_data_day1$mixtures
source_names源名称向量c("Zostera", "Grass")
source_means源均值矩阵matrix(c(-10, 2, ...), ncol=2)
correction_meansTEFs均值matrix(c(1, 2, ...), ncol=2)

2.2 MCMC参数设置

simmr_mcmc函数控制模型运行:

simmr_out <- simmr_mcmc( simmr_in, mcmc_control = list( iter = 10000, # 迭代次数 burn = 1000, # 老化期 thin = 10, # 稀释间隔 n.chain = 4 # 链数 ) )

经验建议

  • 初次运行可使用默认参数
  • 若Gelman诊断值>1.1,增加iter和burn值
  • 复杂模型可能需要iter=50000以上

2.3 收敛诊断

检查MCMC链的收敛性:

conv_check <- summary(simmr_out, type = "diagnostics") print(conv_check)

理想情况下,所有参数的psrf(潜在尺度缩减因子)应接近1(<1.05)。若出现:

  • 持续高值:增加迭代次数
  • 波动剧烈:检查模型设定或数据质量

3. 结果解读与可视化

3.1 统计摘要分析

获取膳食比例的后验分布统计量:

quantile_summary <- summary(simmr_out, type = "quantiles") stat_summary <- summary(simmr_out, type = "statistics") # 合并关键结果 results_table <- data.frame( Source = geese_data_day1$source_names, Mean = stat_summary$statistics[, "Mean"], SD = stat_summary$statistics[, "SD"], `2.5%` = quantile_summary$quantiles[, "2.5%"], `97.5%` = quantile_summary$quantiles[, "97.5%"] )

示例输出:

SourceMeanSD2.5%97.5%
Zostera0.620.100.420.82
Grass0.070.020.040.12

3.2 可视化技术

SIMMR提供丰富的绘图类型:

# 箱线图展示比例分布 plot(simmr_out, type = "boxplot") # 后验密度曲线 plot(simmr_out, type = "density") # 相关性矩阵图(关键诊断) plot(simmr_out, type = "matrix")

解读技巧

  • 箱线图:比较不同源贡献的中位数和范围
  • 密度图:识别双峰等复杂分布形态
  • 矩阵图:发现高度相关的源(估计不确定性增加)

3.3 源合并策略

当两个源同位素特征相似时,可进行后验合并:

simmr_combined <- combine_sources( simmr_out, to_combine = c("U.lactuca", "Enteromorpha"), new_source_name = "Algae" ) plot(simmr_combined, type = "boxplot")

合并条件:

  1. 同位素空间位置相近
  2. 系统发育或生态功能相似
  3. 后验相关性>0.7(绝对值)

4. 高级应用与疑难解答

4.1 多组比较分析

对于分组数据(如不同季节/种群):

data(geese_data) simmr_groups <- with( geese_data, simmr_load( mixtures = mixtures, source_names = source_names, source_means = source_means, group = groups # 指定分组变量 ) ) # 组间统计比较 compare_groups( simmr_mcmc(simmr_groups), source = "Zostera", groups = 1:3 )

4.2 先验信息整合

当有先验知识时,可通过simmr_elicit设置信息性先验:

prior <- simmr_elicit( n_sources = 4, proportion_means = c(0.5, 0.2, 0.2, 0.1), proportion_sds = c(0.08, 0.02, 0.01, 0.02) ) simmr_informative <- simmr_mcmc( simmr_in, prior_control = list( means = prior$mean, sd = prior$sd ) )

4.3 常见问题解决方案

问题1:模型收敛困难

  • 检查同位素空间图是否合理
  • 增加MCMC迭代次数
  • 尝试合并高度相关的源

问题2:结果解释困难

# 计算源间差异概率 compare_sources(simmr_out, c("Zostera", "Grass"))

问题3:TEFs不确定时的处理

# 使用simmr_mcmc_tdf估计TEFs simmr_tdf_out <- simmr_mcmc_tdf( simmr_in, p = matrix(rep(0.25, 4), ncol = 4) )

在实际应用中,我们发现矩阵图对于诊断模型问题特别有用——当看到源间存在强负相关时,意味着数据难以区分这些源的贡献,此时考虑合并源或收集更多同位素指标是明智的选择。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询