水文时间序列趋势提取与突变点综合分析系统
项目介绍
本项目是一款基于 MATLAB 平台开发的专业时间序列统计分析工具,专门用于分析水文、气象和环境科学领域的长序列观测数据。系统集成了非参数统计中的三大核心算法:Spearman 秩相关分析、Mann-Kendall (MK) 检验以及 Pettitt 检验。通过该系统,研究人员能够客观地识别观测数据的单调趋势、显著性水平以及精确的突变发生时间,为气候变化研究与水资源规划提供科学依据。
功能特性
本项目具备以下核心功能:
- 单调趋势评估:利用 Spearman 秩相关系数识别序列随时间的紧密程度和演变性质。
- 趋势显著性判定:通过 Mann-Kendall 趋势检验计算 Z 统计量,量化序列上升或下降的显著性程度。
- 突变过程检测:系统支持双重突变检测方法,包括构建 MK 统计量的正序列 (UF) 与逆序列 (UB) 的动态演化过程,以及基于非参数秩号的 Pettitt 突变点精确定位。
- 数据可视化展示:自动生成包含原始序列线性拟合图、MK 突变图谱及 Pettitt 统计量演化图的多维度图表。
使用方法
- 数据输入:程序默认模拟生成了 50 年长度(1971年至2020年)的水文数据。若需分析实际数据,用户可在程序开头的数据准备部分,通过 xlsread 等函数替换模拟生成的 raw_data 数组。
- 运行分析:在 MATLAB 命令行窗口运行主程序,系统将自动执行所有统计分析步骤。
- 结果查看:
- 命令行:查看 Spearman 相关系数、MK Z统计量、Pettitt 突变年份及各自的 P 值。
- 图形窗口:观察三个子图,包含原始序列中的线性趋势、MK UF/UB 曲线交点及其在显著性水平(±1.96)下的位置,以及 Pettitt 统计量绝对值的峰值位置。
系统要求
- 软件环境:MATLAB R2016b 及以上版本。
- 必要工具箱:Statistics and Machine Learning Toolbox(用于执行 tcdf 和 normcdf 等分布函数计算)。
实现逻辑与功能细节
本程序的执行逻辑严格遵循以下步骤:
- 数据预处理
程序构建了一个具有特定特性的模拟序列:前 25 年为随机平稳波动,后 25 年注入明显的下降趋势并在中间节点模拟突变现象。
- Spearman 秩相关实现
- 通过对原始数据进行两次 sort 排序操作实现秩号(Rank)的提取。
- 计算秩相关系数 rs 和对应的 t 统计量。
- 利用 t 分布累积分布函数计算双端 P 值,用于判定序列是否存在显著的单调性。
- Mann-Kendall 趋势检验实现
- 采用符号函数 sign 对序列所有对偶元素进行比较,累计 S 统计量。
- 计算 S 的方差并在均值基础上进行正态化转换,得出 Z 统计量。
- 根据标准化正态分布计算 P 值,并在显著性水平 0.05(Zc=1.96)下输出判定结论。
- Mann-Kendall 突变检测实现
- UF 序列计算:从序列起点开始,逐点计算累计秩统计量,并进行标准化处理。
- UB 序列计算:将原始序列翻转后执行相同的计算逻辑,最后将结果取负并再次翻转,形成与 UF 对应的逆序列。
- 临界线设定:在绘图中预置了 ±1.96 的临界线,UF 与 UB 在临界线内的交点即为可能的突变时间节点。
- Pettitt 突变检测实现
- 算法核心在于计算统计量 Ut,n,该统计量反映了序列中两部分观测值之间的相对秩号关系。
- 程序遍历整个时间轴找出 Ut,n 绝对值最大的点作为潜在突变位置。
- 计算 Pettitt 显著性 P 值,该值独立于数据的分布类型,具有较强的稳健性。
- 可视化模块
- 线性分析:在第一子图中展示原始数据波动,并叠加一阶多项式拟合生成的线性趋势线。
- 突变双法对比:左下角展示 MK 的动态演变过程,右下角专注于 Pettitt 统计量的极值定位,以此实现突变点的综合验证。
算法关键点分析
- 非参数特性:所有内置函数均不要求数据服从特定的分布(如正态分布),极大地提高了系统对异常值的抗干扰能力。
- 秩号转换:Spearman 与 Pettitt 算法均涉及将数值转换为秩号的操作,这使得系统在分析降水、径流等具有高度非线性的水文序列时表现更稳定。
- UB 序列处理:程序通过 flipud 函数精确实现了 MK 逆序列的构建,确保了正逆序列在时间尺度上的对应一致性。
- 时间戳标记:在趋势显著性输出中,程序结合了实时系统时间,为分析报告提供时间参考戳。