library(tibble)
library(ggplot2)
# 模拟 50 棵树的胸径和树高数据
set.seed(42)
n <- 50
tree_data <- tibble(
tree_id = 1:n,
species = sample(c(“马尾松”, “杉木”, “枫香”), n, replace = TRUE),
dbh_cm = runif(n, min = 5, max = 40), # 胸径 5-40 cm
height_m = 2.5 + 0.35 * dbh_cm + rnorm(n, mean = 0, sd = 1.5) # 树高 = 截距 + 斜率*胸径 + 噪声
)
# 查看前几行
head(tree_data)10 生态学模型采集数据方法
10.1 引言
在生态学研究中,有些问题是无法通过直接观测或实验来回答的。例如,未来 100 年气候变化对全球森林碳汇的影响,或者某种入侵物种在整个大陆尺度的扩散路径。在这种情况下,生态学模型(Ecological Modeling)成为了不可或缺的工具。模型不仅是理解系统的手段,更是一种重要的“数据生成器”,它能够产生跨越时空限制的虚拟数据,帮助我们探索“如果……会怎样”的情景。
10.2 模型作为“数据生成器”
模型生成的数据(Model-Generated Data)是指通过数学方程或计算机算法模拟生态过程而产生的结果。 * 输入数据:模型需要真实的观测或实验数据作为初始条件和参数。 * 输出数据:模型运行产生的预测值、模拟序列或空间分布图。这些输出在经过验证后,可以作为科学研究和政策制定的重要依据。
10.3 主要的生态学模型类型
10.3.1 1. 统计模型 (Statistical Models)
利用统计学方法(如线性回归、广义线性模型、机器学习)寻找变量间的数学关系。 * 特点:侧重于相关性,对历史数据依赖性强。 * 应用:物种分布模型(SDMs),预测物种在未来气候条件下的潜在栖息地。
10.3.2 2. 机理模型 (Process-based Models)
基于对生态系统内在机制(如光合作用、养分循环、能量流动)的理解,用微分方程或规则来描述系统。 * 特点:具有较强的生物学解释力,能够预测超出历史经验范围的情景。 * 应用:植被动态模型(DGVMs),模拟全球植被对大气 CO2 浓度升高的响应。
10.3.3 3. 个体为本模型 (Agent-Based Models, ABM)
模拟大量具有独立决策能力的个体(如动物、植物或人类)及其相互作用。 * 特点:能够观察到从微观行为中“涌现”出的宏观群体模式。 * 应用:动物迁徙路径模拟、流行病在野生动物种群中的传播。
10.3.4 4. 地球系统模型 (Earth System Models)
集成大气、海洋、陆地生态系统的超大规模数值模拟系统。 * 特点:处理全球尺度的复杂反馈关系。 * 应用:IPCC 气候变化评估报告中的生态系统响应预测。
10.4 模型数据的生成流程
- 参数化 (Parameterization):利用实测数据确定模型中的关键参数(如生长速率、死亡率)。
- 模拟运行 (Simulation):设定初始状态和驱动因子(如气象数据),运行模型生成模拟数据。
- 情景分析 (Scenario Analysis):通过改变输入条件(如不同的减排情景),生成多组对比数据,评估不同政策或环境变化的影响。
10.5 模型数据的验证与不确定性
模型生成的数据并非“真实”数据,其可靠性取决于: * 模型校准 (Calibration):调整参数使模型输出尽可能接近已知的观测值。 * 模型验证 (Validation):使用未参与建模的独立数据集来检验模型的预测准确性。 * 不确定性分析:识别由于参数误差、模型结构缺陷或输入数据质量导致的结果波动。
10.6 R 代码示例:简单统计模型
下面以一个经典的生态学问题——树高与胸径的关系——为例,演示如何在 R 中构建线性回归模型、进行模型诊断和结果解读。
10.6.1 准备数据
我们模拟一组亚热带常绿阔叶林的树木测量数据。在生态学中,树高(height)与胸径(DBH, diameter at breast height)之间通常存在正相关关系。
10.6.2 拟合线性回归模型
使用 lm() 函数拟合树高对胸径的线性回归。
# 拟合模型:树高 ~ 胸径
model <- lm(height_m ~ dbh_cm, data = tree_data)
# 查看模型摘要
summary(model)summary() 输出?
- Estimate(估计值):截距(Intercept)表示胸径为 0 时的预测树高,
dbh_cm的系数表示胸径每增加 1 cm,树高平均增加多少米 - Pr(>|t|):p 值,小于 0.05 通常认为该变量对树高有显著影响
- R-squared:决定系数,表示胸径能解释树高变异的比例,越接近 1 说明模型拟合越好
- Residual standard error:残差标准误,反映预测值与实际值的平均偏差
10.6.3 可视化回归结果
ggplot(tree_data, aes(x = dbh_cm, y = height_m)) +
geom_point(aes(color = species), size = 2, alpha = 0.7) +
geom_smooth(method = “lm”, color = “steelblue”, se = TRUE) +
labs(
x = “胸径 (cm)”,
y = “树高 (m)”,
title = “树高与胸径的线性关系”,
color = “树种”
) +
theme_minimal()10.6.4 模型诊断
拟合模型后,必须检查模型假设是否成立。plot() 函数会生成四张诊断图。
# 四张诊断图
par(mar = c(4, 4, 2, 1))
plot(model, which = 1) # 残差 vs 拟合值:检查线性假设和等方差性
plot(model, which = 2) # Q-Q 图:检查残差是否服从正态分布
plot(model, which = 3) # 标准化残差 vs 拟合值:检查方差齐性
plot(model, which = 5) # 残差 vs 杠杆值:识别强影响点- 残差 vs 拟合值:点应随机分布在 0 线两侧,无明显趋势。若呈现弯曲,说明线性假设不成立
- Q-Q 图:点应大致落在对角线上。若两端偏离严重,说明残差不服从正态分布
- Scale-Location 图:红线应大致水平,否则说明存在异方差
- Residuals vs Leverage:关注 Cook’s distance 超过 0.5 的点,它们可能是强影响观测值
10.6.5 使用模型生成预测数据
模型的核心价值在于预测。下面演示如何用拟合好的模型为新数据生成预测值及其置信区间——这就是”模型作为数据生成器”的具体体现。
# 为新的胸径值生成预测
new_trees <- tibble(dbh_cm = seq(5, 40, by = 1))
# 预测树高及 95% 置信区间
predictions <- predict(model, newdata = new_trees, interval = "confidence")
pred_df <- bind_cols(new_trees, as_tibble(predictions))
head(pred_df)- 置信区间 (confidence interval):反映回归线本身的不确定性,即”平均树高”的估计范围
- 预测区间 (prediction interval):反映单棵树的预测不确定性,通常比置信区间更宽。使用
interval = "prediction"获取
10.7 总结
模型数据采集方法极大地扩展了生态学的研究边界。它将零散的观测和实验数据整合进统一的理论框架中,使我们能够预见未来并评估复杂的生态反馈。然而,正如统计学家乔治·博克斯所言:”所有模型都是错的,但有些是有用的。”在使用模型数据时,始终保持对其不确定性的清醒认识,并不断用实测数据进行修正,是科学建模的核心要求。