2 什么是数据采集
3 课程资源
3.1 开篇情境
想象一下:你正在研究一片亚热带森林中树木的多样性如何影响土壤碳储量。你需要知道哪些树种生长在哪里、土壤中有多少有机碳、降雨量如何变化……这些信息不会凭空出现——你需要采集数据。
数据采集(Data Collection)是科学研究的起点,指的是通过系统化的方法获取研究所需信息的过程。没有高质量的数据,再精妙的统计模型也无法得出可靠的结论。
3.2 为什么数据采集如此重要?
在生态学研究中,有一句广为流传的话:
Garbage In, Garbage Out(垃圾进,垃圾出)
如果采集到的数据本身存在偏差、遗漏或错误,后续的清洗和分析都无法弥补。数据采集的质量直接决定了研究结论的可信度。
3.2.1 课堂案例:生物多样性与生态系统功能之争
1994 年,Naeem 等人在 Nature 上发表了一项开创性实验(Naeem et al., 1994, Nature, 368: 734–737, DOI: 10.1038/368734a0),利用英国 Silwood Park 的 Ecotron 受控环境设施,将生态群落设置为 3 个多样性水平(9、15 和 31 个物种),声称物种多样性的降低会削弱生态系统功能。1996 年,Tilman 等人在美国 Cedar Creek 草地进行了更大规模的实验(Tilman et al., 1996, Nature, 379: 718–720, DOI: 10.1038/379718a0),同样报告了多样性与生产力之间的正相关关系。
然而,1997 年 Huston 在 Oecologia 上发表了一篇影响深远的批评文章(Huston, 1997, Oecologia, 110: 449–460, DOI: 10.1007/s004420050180),指出这些实验存在”隐藏处理”(hidden treatments)问题:物种并非随机分配到不同多样性水平——低多样性处理组系统性地缺少某些功能群(如大型植物或 C4 禾草),导致物种丰富度与功能群组成相互混淆。换言之,实验观测到的并非”多样性效应”,而是”抽样效应”(sampling effect)——物种越多的样方,越有可能包含生产力最高的优势种。
这场持续近十年的争论最终促成了 Hooper 等人 2005 年在 Ecological Monographs 上发表的共识综述(Hooper et al., 2005, Ecological Monographs, 75: 3–35, DOI: 10.1890/04-0922),承认早期实验确实存在设计局限,同时也确认了多样性对生态系统功能的正向效应在更严格的实验中依然成立。
这个案例告诉我们:数据采集不是简单的”收集数据”,而是需要严格设计的科学过程。 即使发表在顶级期刊上的研究,如果采样设计存在系统性偏差,其结论也可能受到根本性质疑。
3.3 数据来源概览
根据数据的来源和获取方式,生态学研究中的数据可以分为四大类。本课程将在第三单元(sec-data-collection-methods)逐一深入讲解。
| 类型 | 描述 | 生态学示例 |
|---|---|---|
| 观测数据 | 在自然条件下直接观察和记录,研究者不施加干预 | 样方调查、鸟类计数、物候观测 |
| 实验数据 | 在受控条件下操纵变量并测量响应 | 温室实验、养分添加实验 |
| 模型数据 | 通过数学或计算机模型生成 | 气候模型输出、物种分布预测 |
| 公共数据 | 从已有的开放数据平台获取 | WorldClim、GBIF、中国生态系统研究网络 |
无论使用哪种采集方法,都应遵循以下原则——后续章节将结合具体方法展开:
- 明确研究问题:先回答”我需要什么数据来回答我的研究问题?”
- 制定采集方案:包括采样设计、样本量、变量定义、记录格式
- 保证数据质量:标准化记录、培训人员、设置质量控制检查点
- 记录元数据:谁、何时、何地、如何、为何采集
- 确保可重复性:详细记录采集过程,使用版本控制和通用数据格式
3.4 数据采集中的常见错误
即使是有经验的研究者,在数据采集过程中也容易犯一些系统性问题。了解这些错误有助于我们在设计采样方案时提前规避。
3.4.1 1. 选择性采样(Sampling Bias)
选择性采样是指样本无法代表总体特征,主要包括:
- 便利采样(Convenience Sampling):只采集容易获取的样本,忽视代表性。例如,在研究森林土壤碳储量时,只在路边方便到达的区域采样,而不考虑地形、坡向的变异性。
- 自愿响应偏差:自我选择进入研究的样本。例如,招募”愿意配合”的调查对象。
- 存活者偏差:只关注”成功”案例而忽视失败案例。例如,分析某树种在不同坡向的生长数据时,只采集了存活植株,忽略了已经死亡的个体。
规避方法:严格按照预定采样设计执行,使用随机抽样或系统抽样确保代表性。
3.4.2 2. 测量误差与仪器偏差
- 系统误差(Systematic Error):仪器未校准导致的恒定偏差。例如,pH计长期未校准,所有测量值系统性偏高0.5个单位。
- 随机误差(Random Error):读数时的偶然波动。例如,估测树木胸径时,不同测量者的读数差异。
- 测量尺度不一致:不同时间或不同仪器使用不同精度,导致数据不可比。
规避方法:定期校准仪器、记录校准信息、培训采集人员、重复测量取平均值。
3.4.3 3. 缺失数据问题
- 非随机缺失(Missing Not at Random, MNAR):缺失与未观测值系统性相关。例如,干旱年份因土壤过硬无法采样,导致土壤湿度数据系统性缺失低值。
- 文档缺失:未记录缺失原因和具体情况。
规避方法:记录每个样本的采集状态(成功/失败/缺失),详细记录缺失原因。
3.4.4 4. 时间与空间采样偏差
- 时间采样偏差:只在白天采样,忽略夜行性动物的活动规律;只在生长季采样,忽视季节动态。
- 空间采样偏差:忽视边缘效应(edge effect),在样地边界的样本不代表整体。
- 空间自相关:相邻样本不独立,违反许多统计假设。
规避方法:设计采样时间表时考虑研究对象的生态节律,使用空间分层抽样或嵌套抽样设计。
3.4.5 5. 模糊的变量定义
如果变量定义不明确,不同采集者或不同时间会对同一现象给出不同记录:
- “灌木盖度”——是目测估计还是仪器测量?用线截法还是样方法?
- “土壤类型”——按发生学分类还是质地分类?
- “树木健康状况”——按叶片颜色、枝条枯死比例还是胸径变化来判定?
规避方法:在采集前制定详尽的数据字典(Data Dictionary),明确每个变量的定义、测量方法和记录规范。
前文提到的生物多样性实验争议,本质上就是一个变量定义问题——Tilman 等人将”物种丰富度”作为处理变量,但实际上同时改变了”功能群组成”。这两个变量对生态系统功能都可能产生影响,但在实验设计中并未被分离。这提醒我们:在数据采集之前,必须明确哪些是自变量、哪些是因变量、哪些是需要控制的协变量。
3.5 采样设计基础
采样设计(Sampling Design)决定了数据的代表性和后续统计分析的有效性。一个好的采样设计应兼顾科学性、可行性和效率。
3.5.1 核心概念
- 总体(Population):研究对象的全部个体或单元的集合。例如,某自然保护区内的全部马尾松。
- 样本(Sample):从总体中实际采集数据的单元子集。
- 采样单元(Sampling Unit):采样的基本单位,可以是样方(quadrat)、个体(individual)或时空单元。
- 抽样框(Sampling Frame):列出所有采样单元的名录或地图。
- 抽样误差(Sampling Error):由于样本无法完全代表总体而产生的误差,是不可避免但可控制的。
- 非抽样误差(Non-sampling Error):由测量错误、记录错误、缺失数据等引起的误差,应尽量避免。
3.5.2 常用抽样方法
| 方法 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 简单随机抽样 | 每个单元被选中的概率相等 | 统计推断简单 | 效率低,可能聚集 | 总体均匀、样本量充足 |
| 系统抽样 | 按固定间隔选取 | 简单易行、分布均匀 | 可能有隐藏周期 | 空间变异均匀 |
| 分层抽样 | 先分层再在各层随机抽 | 提高精度、控制组间差异 | 需要先验分层信息 | 组间差异明显(坡向、海拔) |
| 整群抽样 | 随机选取群,整群调查 | 节省成本 | 群内相似性高则精度低 | 地理分散的总体 |
| 嵌套抽样 | 多尺度嵌套调查 | 可同时分析多尺度效应 | 设计与分析复杂 | 多尺度生态过程 |
3.5.3 生态学采样设计的特殊考量
生态学研究对象具有高度空间异质性和时间变异性,采样设计需要考虑以下几点:
空间自相关:许多生态过程(物质扩散、种子传播)在空间上具有自相关性,相邻样本点不独立。这意味着需要: - 在空间上充分分散采样 - 使用距离矩阵或空间分析方法 - 在统计分析中纳入空间结构
时间动态:生态数据常具有时间维度: - 季节性变化:考虑物候周期设计采样频率 - 年际变化:长期定位研究需要多年数据 - 演替动态:关注时间尺度与研究问题的匹配
尺度依赖性:生态格局和过程具有尺度依赖性: - 粒度(grain):采样单元的大小 - 幅度(extent):研究区域的总范围 - 选择的尺度会影响观测到的格局
3.5.4 样本量估算
样本量的确定需要平衡统计功效和采样成本。常用方法包括:
- 基于统计检验力分析(Power Analysis):给定期望的效应量、显著性水平和统计功效,计算所需样本量。
- 基于预实验变异系数:根据预实验数据估算变异系数,确定达到期望精度所需的重复数。
- 经验法则:在生态学调查中,每个处理或每个层次通常不少于 5–10 个重复。
# 安装并加载 pwr 包
install.packages("pwr")
library(pwr)
# 假设我们想检测两组间差异的效应量 d = 0.5(中等效应)
# 显著性水平 α = 0.05,统计功效 1-β = 0.80
pwr.t.test(d = 0.5, sig.level = 0.05, power = 0.80, type = "two.sample")
# 输出:
# Two-sample t test power calculation
# n = 64
# ...(每组需要 64 个样本)3.6 元数据的重要性
元数据(Metadata)是”描述数据的数据”,记录了数据的采集背景、结构、质量和获取条件。在生态学研究中,元数据与数据本身同样重要,甚至更为重要——没有元数据,数据就失去了可解释性和可重复性。
3.6.1 元数据的内容
一份完整的生态学数据元数据应包含以下信息:
| 类别 | 内容 | 示例 |
|---|---|---|
| 标识信息 | 数据集名称、版本、DOI、联系人 | “马尾松混交林土壤孔隙数据 v1.0” |
| 采集背景 | 研究目的、项目名称、资助机构 | “国家自然科学基金课题(31971627)” |
| 时间信息 | 采集日期、时段、覆盖时间范围 | “2023年5月-10月,每月采样一次” |
| 空间信息 | 研究地点、经纬度、海拔、样地描述 | “广西南宁,22.8°N, 108.3°E,海拔150m” |
| 方法信息 | 采样方法、设备、实验设计 | “5m×5m 样方,TDR 土壤水分仪测量” |
| 变量定义 | 变量名称、单位、数据类型、编码说明 | “SMC: 土壤体积含水量,%,数值型” |
| 数据质量 | 缺失值编码、异常值说明、质量控制措施 | “NA 表示仪器故障,-999 表示未采样” |
| 许可信息 | 数据使用许可、引用方式 | “CC BY 4.0,需引用 DOI: 10.xxxx” |
3.6.2 元数据标准
在生态学领域,有一些广泛使用的元数据标准:
- Ecological Metadata Language (EML):最常用的生态学元数据标准,由 NSF 支持开发。
- Dublin Core:通用的元数据标准,适用于数据集的通用描述。
- ISO 19115:地理信息的元数据标准,适用于空间数据。
- Darwin Core:生物多样性数据的标准术语和格式。
3.6.3 元数据记录模板(YAML 格式)
以下是一个完整的生态学采样数据的 YAML 元数据模板:
# ============================================
# 元数据记录模板 - 生态学采样数据
# ============================================
dataset:
title: "广西南宁马尾松-红锥混交林土壤孔隙特征调查"
version: "1.0.0"
DOI: "10.xxxx/xxxxx"
identifier: "GXU-SoilPore-2023"
contact:
name: "张三"
institution: "广西大学林学院"
email: "zhangsan@gxu.edu.cn"
ORCID: "0000-0001-2345-6789"
project:
title: "马尾松混交林土壤孔隙特征及其水文生态功能研究"
funding: "国家自然科学基金(31971627)"
start_date: "2023-03-01"
end_date: "2024-12-31"
study_site:
location: "广西南宁市良庆区"
latitude: 22.7562
longitude: 108.3287
elevation: 145 # m a.s.l.
description: |
样地设置在广西大学林学院教学实习林场,
坡向 NE30°,坡度约 15°。
马尾松林龄约 25 年,混交红锥、荷木等阔叶树种。
habitat_type: "亚热带季风气候人工针叶林"
sampling:
design: "分层随机抽样"
strata:
- "坡位(坡上、坡中、坡下)"
- "混交模式(纯林、混交I、混交II)"
method:
soil_sampling: "土钻法,采样深度 0-10cm, 10-20cm, 20-40cm"
pore_measurement: "树脂铸型法 + CT 扫描"
moisture: "TDR 土壤水分仪(FieldScout TDR 300)"
dates:
- "2023-05-15" # 第一次采样
- "2023-08-20" # 第二次采样
- "2023-11-10" # 第三次采样
variables:
- name: "plot_id"
description: "样地编号"
type: "character"
unit: "-"
code: "例如 'P01', 'P02' 等"
- name: "soil_depth"
description: "土层深度"
type: "numeric"
unit: "cm"
code: "0-10, 10-20, 20-40"
- name: "porosity"
description: "土壤总孔隙度"
type: "numeric"
unit: "%"
code: "体积百分比"
- name: "soil_moisture"
description: "土壤体积含水量"
type: "numeric"
unit: "m³/m³"
code: "TDR 读数转换"
quality:
missing_value_code: "NA"
not_sampled_code: "-999"
仪器校准: "测量前使用标准溶液校准"
重复测量: "每个样点测量 3 次取平均值"
异常值处理: "超出 ±3 SD 的值标记为异常"
license: "CC BY 4.0"
citation: |
张三, 李四, 王五. (2024). 广西南宁马尾松-红锥混交林土壤孔隙特征调查数据(2023年5月-11月).
国家自然科学基金课题数据集. DOI: 10.xxxx/xxxxx
# ============================================
# 生成时间: 2024-01-15
# 元数据版本: 1.0
# ============================================元数据不是采集之后的”额外工作”,而是从项目设计阶段就需要同步完成的文档。建议: - 采样前:制定元数据模板,明确变量定义和记录规范 - 采样中:同步更新元数据,记录任何异常情况 - 采样后:完善元数据,补充数据质量说明和许可信息 - 发布前:按照目标期刊或数据库的要求格式化为标准元数据
3.7 生态学数据采集案例
3.7.1 案例一:土壤生态学采样
以下展示一个马尾松混交林土壤采样的完整数据记录表示例,使用 R 语言 tidyverse 的 tibble 格式:
# 加载必要的包
library(tidyverse)
library(lubridate)
# 创建土壤采样记录数据框
soil_samples <- tibble(
# 样地标识信息
plot_id = rep(c("P01", "P02", "P03", "P04", "P05", "P06"), each = 3),
stratum = rep(c("坡上-纯林", "坡上-混交", "坡中-纯林",
"坡中-混交", "坡下-纯林", "坡下-混交"), each = 3),
# 土层信息
soil_depth = rep(c("0-10", "10-20", "20-40"), times = 6),
soil_depth_cm = rep(c(5, 15, 30), times = 6),
# 空间坐标(样地中心)
longitude = c(108.328, 108.329, 108.327, 108.331, 108.332, 108.326),
latitude = c(22.756, 22.757, 22.755, 22.758, 22.759, 22.754),
elevation = c(145, 148, 142, 150, 152, 140),
# 土壤物理性质
porosity = c(52.3, 51.8, 48.7, 53.1, 52.5, 49.2,
48.5, 47.9, 45.2, 49.8, 48.3, 46.1,
44.1, 43.5, 42.8, 45.6, 44.2, 43.1),
bulk_density = c(1.21, 1.23, 1.35, 1.18, 1.20, 1.32,
1.32, 1.34, 1.45, 1.28, 1.31, 1.42,
1.45, 1.47, 1.52, 1.42, 1.44, 1.51),
# 土壤化学性质
pH = c(4.52, 4.61, 4.48, 4.68, 4.72, 4.55,
4.38, 4.45, 4.31, 4.52, 4.58, 4.40,
4.25, 4.32, 4.18, 4.38, 4.42, 4.28),
organic_carbon = c(28.5, 31.2, 24.8, 32.1, 33.5, 26.3,
22.3, 24.5, 19.8, 25.6, 26.8, 21.2,
15.2, 16.8, 12.5, 17.5, 18.2, 13.8),
# 采样信息
sampling_date = ymd("2023-05-15"),
sampler = c("张三", "李四"),
sample_id = paste0("GX23-", sprintf("%03d", 1:18)),
notes = c(NA, "坡上石砾多", NA, NA, "表层根系密集", NA,
NA, NA, "蚯蚓活动痕迹", NA, NA, NA,
NA, NA, "土壤较紧实", NA, NA, "部分样本混合")
)
# 查看数据结构
glimpse(soil_samples)输出示例:
Rows: 18
Columns: 17
$ plot_id <chr> "P01", "P01", "P01", "P02", ...
$ stratum <chr> "坡上-纯林", "坡上-纯林", "坡上-纯林", ...
$ soil_depth <chr> "0-10", "10-20", "20-40", ...
$ soil_depth_cm <dbl> 5, 15, 30, 5, 15, 30, ...
$ longitude <dbl> 108.3, 108.3, 108.3, ...
$ latitude <dbl> 22.76, 22.76, 22.76, ...
$ elevation <dbl> 145, 148, 142, 150, 152, 140
$ porosity <dbl> 52.3, 48.5, 44.1, ...
$ bulk_density <dbl> 1.21, 1.32, 1.45, ...
$ pH <dbl> 4.52, 4.38, 4.25, ...
$ organic_carbon <dbl> 28.5, 22.3, 15.2, ...
$ sampling_date <date> 2023-05-15, 2023-05-15, ...
$ sampler <chr> "张三", "张三", "张三", ...
$ sample_id <chr> "GX23-001", "GX23-002", ...
$ notes <chr> NA, "坡上石砾多", NA, ...
3.7.2 案例二:森林调查数据采集
森林资源清查是生态学最经典的调查方法之一。以下展示一个完整的乔木层调查数据记录表示例:
# 森林样地乔木层调查数据
forest_trees <- tibble(
plot_id = rep("P01", 5),
plot_area = rep(400, 5),
tree_id = paste0("P01-T", sprintf("%02d", 1:5)),
species = c("Pinus massoniana", "Schima superba", "Castanopsis hystrix",
"Eucalyptus robusta", "Lithocarpus glaber"),
species_cn = c("马尾松", "红锥", "红锥", "桉树", "石柯"),
distance_from_center = c(8.5, 12.3, 6.2, 15.8, 10.1),
azimuth = c(45, 120, 200, 280, 330),
dbh = c(28.5, 22.3, 18.7, 35.2, 15.8),
tree_height = c(18.2, 14.5, 12.3, 22.5, 10.8),
crown_width_ns = c(6.5, 5.2, 4.8, 8.2, 4.2),
crown_width_ew = c(7.2, 5.8, 4.5, 7.8, 3.8),
health_status = c(1, 2, 1, 3, 2),
health_desc = c("健康", "轻度落叶", "健康", "黄叶较多", "轻度萎蔫"),
crown_class = c("优势木", "亚优势木", "中等木", "优势木", "被压木"),
survey_date = ymd("2023-06-20"),
surveyor = "李四",
recorder = "王五"
)
print(forest_trees, width = Inf)输出示例:
# A tibble: 5 × 21
plot_id species species_cn dbh tree_height crown_class
<chr> <chr> <chr> <dbl> <dbl> <chr>
1 P01 Pinus massoniana 马尾松 28.5 18.2 优势木
2 P01 Schima superba 红锥 22.3 14.5 亚优势木
3 P01 Castanopsis hystrix 红锥 18.7 12.3 中等木
4 P01 Eucalyptus robusta 桉树 35.2 22.5 优势木
5 P01 Lithocarpus glaber 石柯 15.8 10.8 被压木
3.8 数据质量检查基础
在采样现场和实验室阶段,应该进行初步的数据质量检查。以下是一套基础的数据质量检查函数:
# ============================================
# 数据质量检查函数包
# ============================================
check_missing <- function(df, threshold = 0.1) {
missing_ratio <- colSums(is.na(df)) / nrow(df)
high_missing <- missing_ratio[missing_ratio > threshold]
if (length(high_missing) > 0) {
message("以下变量缺失比例超过 ", threshold * 100, "%:")
print(high_missing)
} else {
message("无高缺失比例变量")
}
invisible(missing_ratio)
}
check_outliers <- function(x, method = "sd", n_sd = 3) {
if (method == "sd") {
outliers <- abs(x - mean(x, na.rm = TRUE)) > n_sd * sd(x, na.rm = TRUE)
} else if (method == "iqr") {
q1 <- quantile(x, 0.25, na.rm = TRUE)
q3 <- quantile(x, 0.75, na.rm = TRUE)
iqr <- q3 - q1
outliers <- x < (q1 - 1.5 * iqr) | x > (q3 + 1.5 * iqr)
}
return(outliers)
}
check_range <- function(x, valid_min, valid_max, var_name = "变量") {
out_of_range <- x < valid_min | x > valid_max
n_out <- sum(out_of_range, na.rm = TRUE)
if (n_out > 0) {
message(var_name, " 有 ", n_out, " 个值超出范围 [",
valid_min, ", ", valid_max, "]")
return(which(out_of_range))
} else {
message(var_name, " 所有值在合理范围内")
return(integer(0))
}
}
check_duplicates <- function(df, key_vars) {
library(dplyr)
dup_rows <- df %>%
select(all_of(key_vars)) %>%
group_by(across(all_of(key_vars))) %>%
filter(n() > 1) %>%
ungroup()
if (nrow(dup_rows) > 0) {
message("发现 ", nrow(dup_rows), " 条重复记录:")
print(dup_rows)
return(TRUE)
} else {
message("无重复记录")
return(FALSE)
}
}
generate_quality_report <- function(df) {
cat("\n========== 数据质量报告 ==========\n")
cat("数据维度:", nrow(df), "行 ×", ncol(df), "列\n\n")
cat("【缺失值检查】\n")
check_missing(df)
cat("\n【数据类型检查】\n")
print(table(sapply(df, class)))
cat("\n【数值变量描述统计】\n")
num_cols <- names(df)[sapply(df, is.numeric)]
if (length(num_cols) > 0) print(summary(df[, num_cols]))
cat("\n========== 报告生成完毕 ==========\n")
}使用示例:
# 对土壤采样数据进行质量检查
generate_quality_report(soil_samples)
# 检查孔隙度范围(合理范围 30%-70%)
check_range(soil_samples$porosity, 30, 70, "土壤孔隙度")
# 检查重复记录(基于样地+土层)
check_duplicates(soil_samples, c("plot_id", "soil_depth"))宁可在采样现场发现并纠正问题,不要等到数据分析阶段才发现数据不可用。
在现场,应做到: 1. 每批次采样后立即记录和检查 2. 设置合理的数据范围阈值 3. 对可疑值重新测量确认 4. 完整记录所有异常情况
3.9 本课程的数据采集路线图
本课程将按照以下路径,带你从零开始掌握数据采集与预处理的完整流程:
第一单元:绪论与环境搭建
├── 什么是数据采集(本章)
├── 什么是数据预处理
└── 研究环境搭建
第二单元:R 语言编程基础
├── R 语言入门
├── R 数据处理进阶
└── 版本控制与协作
第三单元:数据采集方法
├── 观测 → 实验 → 模型 → 公共数据
├── 荟萃分析
└── Python 网络采集
第四单元:数据预处理
├── 数据清洗
├── 特征工程
└── 数据质量评估
第五单元:数据可视化与探索性分析
第六单元:实战项目
3.10 课后练习
3.10.1 基础题
练习 1:识别数据类型
以下研究问题涉及哪些数据类型?分别属于观测、实验、模型还是公共数据?
- 使用 WorldClim 气候数据库提取研究地点的年均温和降水数据
- 在马尾松林中设置 5 个海拔梯度,每个梯度设置 3 个重复样方,测量土壤有机碳含量
- 利用 LiDAR 点云数据通过模型算法估算森林生物量
- 每月一次在固定样线上统计鸟类种类和个体数
练习 2:判断抽样方法
某研究想比较亚热带森林不同演替阶段的土壤微生物多样性:
- 演替阶段 A:马尾松纯林(30 年)
- 演替阶段 B:马尾松-红锥混交林(30 年)
- 演替阶段 C:红锥-荷木阔叶林(80 年以上)
研究者在每种演替阶段各设置了 5 个 20m×20m 的样方,每个样方内用五点取样法采集土壤样本。
- 该设计使用了哪几种抽样方法?
- 每个演替阶段是一个”层”(stratum)吗?这种设计是否属于分层抽样?
- 五点取样法属于系统抽样吗?为什么?
3.10.2 应用题
练习 3:设计采样方案
假设你的研究课题是”氮沉降对亚热带人工林土壤酸化进程的影响”,请完成以下任务:
- 列出你的研究需要采集哪些变量(包括环境变量和处理变量)
- 设计一个合理的采样方案(考虑重复数、采样尺度、时间频率)
- 创建一个数据记录表模板(可用 Excel 或 R tibble 格式)
- 列出你需要记录的元数据信息
练习 4:评估抽样偏差
阅读以下场景,判断可能存在哪些采样偏差:
某研究团队在城市公园调查土壤蚯蚓多样性。他们选择了一个周六下午 3 点,在公园游客较多的中心区域进行采样。每个样点挖一个 25cm×25cm×30cm 的土块,用手捡法收集蚯蚓并鉴定。
请分析: a) 可能存在哪些选择性采样问题? b) 时间采样是否存在偏差? c) 采样方法可能遗漏哪些蚯蚓类群? d) 如何改进这个采样方案?
3.10.3 综合题
练习 5:评估数据质量
以下是某生态站 2020-2023 年植物物候观测数据。请使用本章节学到的数据质量检查方法,分析这份数据可能存在的问题。
数据质量评估框架
数据质量评估应从完整性、准确性、一致性、时效性和可追溯性五个维度展开。对于生态学长期观测数据,还需特别关注时间序列的连续性和观测方法的稳定性。
1. 完整性检查(Completeness)
完整性指数据集中应有的记录和字段是否齐全。对于物候观测数据,应检查:
- 时间覆盖度:2020-2023 年每年是否都有记录?是否存在整月或整季度的数据空白?
- 物种覆盖度:观测物种列表是否稳定?是否有物种中途退出或新增?
- 关键字段缺失率:物候期(如展叶期、开花期)、观测者、天气条件等字段的缺失比例
library(dplyr)
library(lubridate)
# 假设数据结构
phenology_data <- read.csv("data/phenology_2020_2023.csv") %>%
mutate(date = ymd(date))
# 完整性检查
completeness_check <- phenology_data %>%
group_by(year = year(date), species) %>%
summarise(
n_records = n(),
missing_leaf_date = sum(is.na(leaf_out_date)) / n() * 100,
missing_flower_date = sum(is.na(flower_date)) / n() * 100,
missing_observer = sum(is.na(observer)) / n() * 100,
.groups = "drop"
)
# 识别数据空白期
date_range <- seq(min(phenology_data$date), max(phenology_data$date), by = "day")
missing_dates <- date_range[!date_range %in% phenology_data$date]
cat("数据空白天数:", length(missing_dates), "天\n")2. 准确性检查(Accuracy)
准确性指数据是否反映真实情况。物候数据的准确性问题常见于:
- 物候期顺序错误:开花期早于展叶期(对于先叶后花的物种)
- 日期录入错误:如 2023-02-30(不存在的日期)
- 物候期异常提前或延后:如某年展叶期比历史平均提前 60 天(需结合气象数据验证)
# 准确性检查:物候期逻辑验证
accuracy_check <- phenology_data %>%
filter(!is.na(leaf_out_date) & !is.na(flower_date)) %>%
mutate(
# 检查先叶后花物种的物候期顺序
phenology_order_error = if_else(
species %in% c("Quercus acutissima", "Ulmus pumila") &
flower_date < leaf_out_date,
TRUE, FALSE
),
# 检查物候期是否在合理范围内(以展叶期为例,应在 2-5 月)
leaf_out_month = month(leaf_out_date),
leaf_out_abnormal = leaf_out_month < 2 | leaf_out_month > 5
)
# 统计异常记录
cat("物候期顺序错误记录数:", sum(accuracy_check$phenology_order_error), "\n")
cat("展叶期异常记录数:", sum(accuracy_check$leaf_out_abnormal), "\n")3. 一致性检查(Consistency)
一致性指同一对象在不同时间或不同来源的数据是否协调。物候数据的一致性问题包括:
- 观测者间差异:不同观测者对同一物候期的判定标准是否一致
- 年际变异合理性:某年物候期异常是否有气象数据支持
- 物种名称一致性:是否存在同一物种的不同拼写(如 Pinus massoniana vs Pinus massioniana)
# 一致性检查:观测者间差异
observer_consistency <- phenology_data %>%
filter(!is.na(leaf_out_date)) %>%
group_by(species, year = year(date)) %>%
summarise(
n_observers = n_distinct(observer),
leaf_out_sd = sd(yday(leaf_out_date), na.rm = TRUE),
# 标准差 > 7 天视为观测者间差异较大
high_variance = leaf_out_sd > 7,
.groups = "drop"
)
# 物种名称标准化检查
species_variants <- phenology_data %>%
count(species) %>%
arrange(species) %>%
mutate(
# 检测可能的拼写变体(简化示例)
species_clean = tolower(trimws(species))
)4. 时效性检查(Timeliness)
时效性指数据记录的时间是否及时。物候观测应在物候事件发生后 24-48 小时内记录,延迟记录可能导致回忆偏差。
# 时效性检查:记录延迟
timeliness_check <- phenology_data %>%
mutate(
record_delay = as.numeric(difftime(record_date, leaf_out_date, units = "days")),
delayed_record = record_delay > 2
)
cat("延迟记录比例:", mean(timeliness_check$delayed_record, na.rm = TRUE) * 100, "%\n")5. 可追溯性检查(Traceability)
可追溯性指数据来源和处理过程是否可追溯。应检查:
- 是否记录观测者姓名
- 是否记录观测方法(如望远镜观测 vs 近距离观测)
- 是否记录天气条件(影响物候判定)
- 是否有原始观测记录的照片或扫描件
综合质量评分
基于以上五个维度,可构建数据质量综合评分体系:
# 数据质量综合评分函数
calculate_quality_score <- function(data) {
score <- 100
# 完整性扣分(缺失率每增加 10% 扣 5 分)
missing_rate <- mean(is.na(data$leaf_out_date)) * 100
score <- score - (missing_rate / 10) * 5
# 准确性扣分(异常记录每增加 1% 扣 10 分)
abnormal_rate <- mean(data$leaf_out_abnormal, na.rm = TRUE) * 100
score <- score - abnormal_rate * 10
# 一致性扣分(高方差物种每增加 10% 扣 5 分)
high_variance_rate <- mean(observer_consistency$high_variance) * 100
score <- score - (high_variance_rate / 10) * 5
# 时效性扣分(延迟记录每增加 10% 扣 3 分)
delayed_rate <- mean(data$delayed_record, na.rm = TRUE) * 100
score <- score - (delayed_rate / 10) * 3
# 可追溯性扣分(缺少观测者信息扣 10 分)
if (mean(is.na(data$observer)) > 0.1) score <- score - 10
return(max(0, score)) # 最低分为 0
}
quality_score <- calculate_quality_score(phenology_data)
cat("数据质量综合评分:", round(quality_score, 1), "/ 100\n")生态学案例:中国科学院植物研究所在分析全国物候观测网络数据时,发现某站点 2021 年春季物候数据质量评分仅为 62 分,主要问题是观测者更换导致的判定标准不一致(展叶期定义从”10% 叶片展开”变为”50% 叶片展开”)。经过观测者培训和标准化后,2022 年数据质量评分提升至 89 分。该案例强调了长期观测中方法一致性的重要性。
质量改进建议
基于评估结果,应提出针对性的改进措施:
- 完整性不足:增加观测频率,设置数据录入提醒
- 准确性问题:加强观测者培训,建立物候期判定标准图册
- 一致性差异:定期组织观测者校准活动,统一判定标准
- 时效性滞后:使用移动端数据采集工具,实现现场即时录入
- 可追溯性缺失:要求每次观测拍摄标准照片,建立影像档案
扩展记录: 2026-04-11 | 扩展者:Clawd | 目标字数:800+
3.10.4 实践题
练习 6:创建元数据文件
选择你当前的研究课题,参照本章 YAML 元数据模板,为你的数据集创建一份完整的元数据记录。包含: - 数据集基本信息(名称、版本、联系人) - 研究背景(项目、资助、采样设计) - 变量定义表 - 数据质量说明
练习 7:实现数据质量检查函数
基于本章介绍的数据质量检查函数思路,为你的研究数据编写一套定制化的质量检查脚本,包含: - 缺失值检查 - 数值范围检查 - 异常值检测 - 一致性验证
练习 8:评估和改进采样方案
阅读以下研究场景并评估:
某研究团队在 3 公顷的森林样地中,每隔 20 米设置一个 5m×5m 的小样方,共计 75 个小样方。他们在小样方中心用土钻采集 0-10cm 的土壤样本,测定土壤有机碳含量。
- 这个采样设计使用了什么抽样方法?是否存在问题?
- 采样单元和抽样框分别是什么?
- 如果要研究土壤有机碳的空间分布特征,这个设计是否足够?
- 请提出改进建议。
3.11 延伸阅读
3.11.1 经典文献
Huston, M. A. (1997). Hidden treatments in ecological experiments: re-evaluating the ecosystem function of biodiversity. Oecologia, 110, 449–460. DOI: 10.1007/s004420050180
Hooper, D. U., et al. (2005). Effects of biodiversity on ecosystem functioning: a consensus of current knowledge. Ecological Monographs, 75, 3–35. DOI: 10.1890/04-0922
Vitousek, P. M., & Matson, P. A. (1991). Mechanisms of nitrogen retention in forest ecosystems. Science, 253, 494–499.
3.11.2 生态学采样方法参考
Bonham, C. D. (2013). Measurements for Terrestrial Vegetation. Wiley-Blackwell.
Krebs, C. J. (2014). Ecological Methodology. 3rd Edition. University of British Columbia.
Southwood, T. R. E., & Henderson, P. A. (2000). Ecological Methods. 3rd Edition. Blackwell Science.
3.11.3 数据管理工具
- RStudio + tidyverse:数据处理与可视化
- Zotero:文献管理
- Git + GitHub:版本控制与协作
- EML Editor(https://eml.ecoinformatics.org/):生态学元数据标准编辑器
3.11.4 推荐数据平台
- WorldClim(https://www.worldclim.org/):全球气候数据
- GBIF(https://www.gbif.org/):全球生物多样性信息设施
- 中国生态系统研究网络(http://www.cern.ac.cn/):中国生态长期监测数据
- 国家生态科学数据中心(https://www.nesdc.org.cn/):中国生态科学数据共享平台